[dts] [PATCH 2/2 v2] framework: make option -d to absolute path

Michael Qiu michael.qiu at intel.com
Sun Feb 15 09:41:31 CET 2015


Option -d is used for dpdk directory name, which is not suitable.

Meanwhile, dts need make dpdk location in DUT more flexable.

Specify the absolute path with -d option to solve the issue.

Signed-off-by: Michael Qiu <michael.qiu at intel.com>
---
 framework/main.py           | 22 +++++++++++-----------
 framework/project_dpdk.py   | 36 ++++++++++++++++++++++++++++++------
 framework/ssh_connection.py |  2 +-
 3 files changed, 42 insertions(+), 18 deletions(-)

diff --git a/framework/main.py b/framework/main.py
index 0223f57..11b7513 100755
--- a/framework/main.py
+++ b/framework/main.py
@@ -43,23 +43,23 @@ import dts
 os.chdir("../")
 
 
-def git_build_package(gitLabel, gitPkg, output):
+def git_build_package(gitLabel, pkgName, depot="dep"):
     """
     generate package from git, if dpdk existed will pull latest code
     """
     gitURL = r"http://dpdk.org/git/dpdk"
     gitPrefix = r"dpdk/"
-    if os.path.exists("%s/%s" % (output, gitPrefix)) is True:
-        ret = os.system("cd %s/%s && git pull --force" % (output, gitPrefix))
+    if os.path.exists("%s/%s" % (depot, gitPrefix)) is True:
+        ret = os.system("cd %s/%s && git pull --force" % (depot, gitPrefix))
     else:
-        print "git clone %s %s/%s" % (gitURL, output, gitPrefix)
-        ret = os.system("git clone %s output/%s" % (gitURL, gitPrefix))
+        print "git clone %s %s/%s" % (gitURL, depot, gitPrefix)
+        ret = os.system("git clone %s %s/%s" % (gitURL, depot, gitPrefix))
     if ret is not 0:
         raise EnvironmentError
 
-    print "git archive --format=tar.gz --prefix=%s %s -o %s" % (gitPrefix, gitLabel, gitPkg)
-    ret = os.system("cd %s/%s && git archive --format=tar.gz --prefix=%s/ %s -o ../../%s"
-                    % (output, gitPrefix, gitPrefix, gitLabel, gitPkg))
+    print "git archive --format=tar.gz --prefix=%s %s -o %s" % (gitPrefix, gitLabel, pkgName)
+    ret = os.system("cd %s/%s && git archive --format=tar.gz --prefix=%s/ %s -o ../%s"
+                    % (depot, gitPrefix, gitPrefix, gitLabel, pkgName))
     if ret is not 0:
         raise EnvironmentError
 
@@ -79,7 +79,7 @@ parser.add_argument('--patch',
                     help='apply a patch to the package under test')
 
 parser.add_argument('--snapshot',
-                    default='dpdk.tar.gz',
+                    default='dep/dpdk.tar.gz',
                     help='snapshot .tgz file to use as input')
 
 parser.add_argument('--output',
@@ -110,7 +110,7 @@ parser.add_argument('-t', '--test-cases',
                     help='executes only the followings test cases')
 
 parser.add_argument('-d', '--dir',
-                    default='dpdk',
+                    default='~/dpdk',
                     help='Output directory where dpdk package is extracted')
 
 parser.add_argument('-v', '--verbose',
@@ -123,7 +123,7 @@ args = parser.parse_args()
 # prepare DPDK source test package, DTS will exited when failed.
 if args.git is not None:
     try:
-        git_build_package(args.git, args.snapshot, args.output)
+        git_build_package(args.git, os.path.split(args.snapshot)[1])
     except Exception:
         print "FAILED TO PREPARE DPDK PACKAGE!!!"
         sys.exit()
diff --git a/framework/project_dpdk.py b/framework/project_dpdk.py
index 8448a61..18a8853 100644
--- a/framework/project_dpdk.py
+++ b/framework/project_dpdk.py
@@ -198,10 +198,22 @@ class DPDKdut(Dut):
         if not self.skip_setup:
             assert (os.path.isfile(pkgName) is True), "Invalid package"
 
-            self.session.copy_file_to(pkgName)
+            p_dir, _ = os.path.split(self.base_dir)
+            # ToDo: make this configurable
+            dst_dir = "/tmp/"
+
+            out = self.send_expect("ll %s && cd %s" % (dst_dir, p_dir),
+                                   "#", verify = True)
+            if out == -1:
+                raise ValueError("Directiry %s or %s does not exist,"
+                                 "please check params -d"
+                                  % (p_dir, dst_dir))
+            self.session.copy_file_to(pkgName, dst_dir)
+
+            # put patches to p_dir/patches/
             if (patch is not None):
                 for p in patch:
-                    self.session.copy_file_to('../' + p)
+                    self.session.copy_file_to('dep/' + p, dst_dir)
 
             self.kill_all()
 
@@ -216,13 +228,25 @@ class DPDKdut(Dut):
             self.send_expect("rm -rf %s" % self.base_dir, "#")
 
             # unpack dpdk
-            out = self.send_expect("tar zxf " + pkgName.split('/')[-1], "# ", 20)
-            assert "Error" not in out
+            out = self.send_expect("tar zxf %s%s -C %s" %
+                                   (dst_dir, pkgName.split('/')[-1], p_dir),
+                                   "# ", 20, verify = True)
+            if out == -1:
+                raise ValueError("Extract dpdk package to %s failure,"
+                                 "please check params -d"
+                                  % (p_dir))
+
+            # check dpdk dir name is expect
+            out = self.send_expect("ls %s" % self.base_dir,
+                                   "# ", 20, verify = True)
+            if out == -1:
+                raise ValueError("dpdk dir %s mismatch, please check params -d"
+                                  % self.base_dir)
 
             if (patch is not None):
                 for p in patch:
-                    out = self.send_expect("patch -d %s -p1 < ../%s" %
-                                           (self.base_dir, p), "# ")
+                    out = self.send_expect("patch -d %s -p1 < %s" %
+                                           (self.base_dir, dst_dir + p), "# ")
                     assert "****" not in out
 
         self.dut_prerequisites()
diff --git a/framework/ssh_connection.py b/framework/ssh_connection.py
index f3debc1..d1075b5 100644
--- a/framework/ssh_connection.py
+++ b/framework/ssh_connection.py
@@ -51,7 +51,7 @@ class SSHConnection(object):
 
     def send_expect(self, cmds, expected, timeout=15, verify=False):
         self.logger.info(cmds)
-        out = self.session.send_expect(cmds, expected, timeout, verify=False)
+        out = self.session.send_expect(cmds, expected, timeout, verify)
         self.logger.debug(out)
         return out
 
-- 
1.9.3



More information about the dts mailing list