All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCHv2 0/2] Allows to copy symlinks to DUTs with testimage
@ 2016-07-26  9:38 mariano.lopez
  2016-07-26  9:38 ` [PATCHv2 1/2] oeqa/oetest.py: Allow to export packages using symlinks mariano.lopez
  2016-07-26  9:38 ` [PATCHv2 2/2] oeqa/utils/sshcontrol.py: Allows to copy symlinks to target mariano.lopez
  0 siblings, 2 replies; 4+ messages in thread
From: mariano.lopez @ 2016-07-26  9:38 UTC (permalink / raw)
  To: openembedded-core

From: Mariano Lopez <mariano.lopez@linux.intel.com>

Currently when using the install functionality in the DUT without package
manager, if you copy a symlink the function will fail.

These series will change the behaviour and will allow to recreate the
symlinks in the DUT.

Changes in v2:

- Use oe.path.copytree instead of shutil.copytree
- Don't create function oeqa_copy, not needed anymore

[YOCTO #9932]

The following changes since commit 039f47ad197a9a53109c9f3deadd9c35e62c056d:

  uclibc: remove meta-yocto-bsp append (2016-07-26 08:56:32 +0100)

are available in the git repository at:

  git://git.yoctoproject.org/poky-contrib mariano/bug9932v2
  http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=mariano/bug9932v2

Mariano Lopez (2):
  oeqa/oetest.py: Allow to export packages using symlinks
  oeqa/utils/sshcontrol.py: Allows to copy symlinks to target

 meta/classes/testexport.bbclass   | 24 +++++-------------------
 meta/lib/oeqa/oetest.py           | 17 +++++++++++++----
 meta/lib/oeqa/utils/sshcontrol.py |  9 +++++++--
 3 files changed, 25 insertions(+), 25 deletions(-)

-- 
2.6.6



^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCHv2 1/2] oeqa/oetest.py: Allow to export packages using symlinks
  2016-07-26  9:38 [PATCHv2 0/2] Allows to copy symlinks to DUTs with testimage mariano.lopez
@ 2016-07-26  9:38 ` mariano.lopez
  2016-07-26 20:49   ` Joshua G Lock
  2016-07-26  9:38 ` [PATCHv2 2/2] oeqa/utils/sshcontrol.py: Allows to copy symlinks to target mariano.lopez
  1 sibling, 1 reply; 4+ messages in thread
From: mariano.lopez @ 2016-07-26  9:38 UTC (permalink / raw)
  To: openembedded-core

From: Mariano Lopez <mariano.lopez@linux.intel.com>

Currently packages that contains symlinks can't be extracted
and exported. This allows to export extracted such packages.

A nice side effect is improved readability.

[YOCTO #9932]

Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com>
---
 meta/classes/testexport.bbclass | 24 +++++-------------------
 meta/lib/oeqa/oetest.py         | 17 +++++++++++++----
 2 files changed, 18 insertions(+), 23 deletions(-)

diff --git a/meta/classes/testexport.bbclass b/meta/classes/testexport.bbclass
index 15fa470..5147020 100644
--- a/meta/classes/testexport.bbclass
+++ b/meta/classes/testexport.bbclass
@@ -47,6 +47,7 @@ def exportTests(d,tc):
     import shutil
     import pkgutil
     import re
+    import oe.path
 
     exportpath = d.getVar("TEST_EXPORT_DIR", True)
 
@@ -103,7 +104,7 @@ def exportTests(d,tc):
                     isfolder = True
                     target_folder = os.path.join(exportpath, "oeqa", "runtime", os.path.basename(foldername))
                     if not os.path.exists(target_folder):
-                        shutil.copytree(foldername, target_folder)
+                        oe.path.copytree(foldername, target_folder)
         if not isfolder:
             shutil.copy2(mod.path, os.path.join(exportpath, "oeqa/runtime"))
             json_file = "%s.json" % mod.path.rsplit(".", 1)[0]
@@ -132,27 +133,12 @@ def exportTests(d,tc):
     create_tarball(d, "testexport.tar.gz", d.getVar("TEST_EXPORT_DIR", True))
 
     # Copy packages needed for runtime testing
-    export_pkg_dir = os.path.join(d.getVar("TEST_EXPORT_DIR", True), "packages")
     test_pkg_dir = d.getVar("TEST_NEEDED_PACKAGES_DIR", True)
-    need_pkg_dir = False
-    for root, subdirs, files in os.walk(test_pkg_dir):
-        for subdir in subdirs:
-            tmp_dir = os.path.join(root.replace(test_pkg_dir, "").lstrip("/"), subdir)
-            new_dir = os.path.join(export_pkg_dir, tmp_dir)
-            bb.utils.mkdirhier(new_dir)
-
-        for f in files:
-            need_pkg_dir = True
-            src_f = os.path.join(root, f)
-            dst_f = os.path.join(export_pkg_dir, root.replace(test_pkg_dir, "").lstrip("/"), f)
-            shutil.copy2(src_f, dst_f)
-
-    if need_pkg_dir:
+    if os.listdir(test_pkg_dir):
+        export_pkg_dir = os.path.join(d.getVar("TEST_EXPORT_DIR", True), "packages")
+        oe.path.copytree(test_pkg_dir, export_pkg_dir)
         # Create tar file for packages needed by the DUT
         create_tarball(d, "testexport_packages_%s.tar.gz" % d.getVar("MACHINE", True), export_pkg_dir)
-    else:
-        # Remov packages dir from exported test
-        bb.utils.remove(export_pkg_dir, True)
 
     # Copy SDK
     if d.getVar("TEST_EXPORT_SDK_ENABLED", True) == "1":
diff --git a/meta/lib/oeqa/oetest.py b/meta/lib/oeqa/oetest.py
index e63ca56..3bf3643 100644
--- a/meta/lib/oeqa/oetest.py
+++ b/meta/lib/oeqa/oetest.py
@@ -447,6 +447,8 @@ class RuntimeTestContext(TestContext):
         modules = self.getTestModules()
         bbpaths = self.d.getVar("BBPATH", True).split(":")
 
+        shutil.rmtree(self.d.getVar("TEST_EXTRACTED_DIR", True))
+        shutil.rmtree(self.d.getVar("TEST_PACKAGED_DIR", True))
         for module in modules:
             json_file = self._getJsonFile(module)
             if json_file:
@@ -458,6 +460,8 @@ class RuntimeTestContext(TestContext):
         Extract packages that will be needed during runtime.
         """
 
+        import oe.path
+
         extracted_path = self.d.getVar("TEST_EXTRACTED_DIR", True)
         packaged_path = self.d.getVar("TEST_PACKAGED_DIR", True)
 
@@ -481,13 +485,18 @@ class RuntimeTestContext(TestContext):
                     dst_dir = os.path.join(packaged_path)
 
                 # Extract package and copy it to TEST_EXTRACTED_DIR
-                if extract and not os.path.exists(dst_dir):
-                    pkg_dir = self._extract_in_tmpdir(pkg)
-                    shutil.copytree(pkg_dir, dst_dir)
+                pkg_dir = self._extract_in_tmpdir(pkg)
+                if extract:
+
+                    # Same package used for more than one test,
+                    # don't need to extract again.
+                    if os.path.exists(dst_dir):
+                        continue
+                    oe.path.copytree(pkg_dir, dst_dir)
                     shutil.rmtree(pkg_dir)
 
                 # Copy package to TEST_PACKAGED_DIR
-                elif not extract:
+                else:
                     self._copy_package(pkg)
 
     def _getJsonFile(self, module):
-- 
2.6.6



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCHv2 2/2] oeqa/utils/sshcontrol.py: Allows to copy symlinks to target
  2016-07-26  9:38 [PATCHv2 0/2] Allows to copy symlinks to DUTs with testimage mariano.lopez
  2016-07-26  9:38 ` [PATCHv2 1/2] oeqa/oetest.py: Allow to export packages using symlinks mariano.lopez
@ 2016-07-26  9:38 ` mariano.lopez
  1 sibling, 0 replies; 4+ messages in thread
From: mariano.lopez @ 2016-07-26  9:38 UTC (permalink / raw)
  To: openembedded-core

From: Mariano Lopez <mariano.lopez@linux.intel.com>

Currently when copying a symlink to the target it will fail
throwing an exception. This will recreate symlinks from the
system performing the tests to the device under tests.

[YOCTO #9932]

Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com>
---
 meta/lib/oeqa/utils/sshcontrol.py | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/meta/lib/oeqa/utils/sshcontrol.py b/meta/lib/oeqa/utils/sshcontrol.py
index f5d46e0..da485ee 100644
--- a/meta/lib/oeqa/utils/sshcontrol.py
+++ b/meta/lib/oeqa/utils/sshcontrol.py
@@ -147,8 +147,13 @@ class SSHControl(object):
         return self._internal_run(command, timeout, self.ignore_status)
 
     def copy_to(self, localpath, remotepath):
-        command = self.scp + [localpath, '%s@%s:%s' % (self.user, self.ip, remotepath)]
-        return self._internal_run(command, ignore_status=False)
+        if os.path.islink(localpath):
+            link = os.readlink(localpath)
+            dst_dir, dst_base = os.path.split(remotepath)
+            return self.run("cd %s; ln -s %s %s" % (dst_dir, link, dst_base))
+        else:
+            command = self.scp + [localpath, '%s@%s:%s' % (self.user, self.ip, remotepath)]
+            return self._internal_run(command, ignore_status=False)
 
     def copy_from(self, remotepath, localpath):
         command = self.scp + ['%s@%s:%s' % (self.user, self.ip, remotepath), localpath]
-- 
2.6.6



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCHv2 1/2] oeqa/oetest.py: Allow to export packages using symlinks
  2016-07-26  9:38 ` [PATCHv2 1/2] oeqa/oetest.py: Allow to export packages using symlinks mariano.lopez
@ 2016-07-26 20:49   ` Joshua G Lock
  0 siblings, 0 replies; 4+ messages in thread
From: Joshua G Lock @ 2016-07-26 20:49 UTC (permalink / raw)
  To: mariano.lopez, openembedded-core

On Tue, 2016-07-26 at 09:38 +0000, mariano.lopez@linux.intel.com wrote:
> From: Mariano Lopez <mariano.lopez@linux.intel.com>
> 
> Currently packages that contains symlinks can't be extracted
> and exported. This allows to export extracted such packages.
> 
> A nice side effect is improved readability.
> 
> [YOCTO #9932]
> 
> Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com>
> ---
>  meta/classes/testexport.bbclass | 24 +++++-------------------
>  meta/lib/oeqa/oetest.py         | 17 +++++++++++++----
>  2 files changed, 18 insertions(+), 23 deletions(-)
> 
> diff --git a/meta/classes/testexport.bbclass
> b/meta/classes/testexport.bbclass
> index 15fa470..5147020 100644
> --- a/meta/classes/testexport.bbclass
> +++ b/meta/classes/testexport.bbclass
> @@ -47,6 +47,7 @@ def exportTests(d,tc):
>      import shutil
>      import pkgutil
>      import re
> +    import oe.path
>  
>      exportpath = d.getVar("TEST_EXPORT_DIR", True)
>  
> @@ -103,7 +104,7 @@ def exportTests(d,tc):
>                      isfolder = True
>                      target_folder = os.path.join(exportpath, "oeqa",
> "runtime", os.path.basename(foldername))
>                      if not os.path.exists(target_folder):
> -                        shutil.copytree(foldername, target_folder)
> +                        oe.path.copytree(foldername, target_folder)
>          if not isfolder:
>              shutil.copy2(mod.path, os.path.join(exportpath,
> "oeqa/runtime"))
>              json_file = "%s.json" % mod.path.rsplit(".", 1)[0]
> @@ -132,27 +133,12 @@ def exportTests(d,tc):
>      create_tarball(d, "testexport.tar.gz",
> d.getVar("TEST_EXPORT_DIR", True))
>  
>      # Copy packages needed for runtime testing
> -    export_pkg_dir = os.path.join(d.getVar("TEST_EXPORT_DIR", True),
> "packages")
>      test_pkg_dir = d.getVar("TEST_NEEDED_PACKAGES_DIR", True)
> -    need_pkg_dir = False
> -    for root, subdirs, files in os.walk(test_pkg_dir):
> -        for subdir in subdirs:
> -            tmp_dir = os.path.join(root.replace(test_pkg_dir,
> "").lstrip("/"), subdir)
> -            new_dir = os.path.join(export_pkg_dir, tmp_dir)
> -            bb.utils.mkdirhier(new_dir)
> -
> -        for f in files:
> -            need_pkg_dir = True
> -            src_f = os.path.join(root, f)
> -            dst_f = os.path.join(export_pkg_dir,
> root.replace(test_pkg_dir, "").lstrip("/"), f)
> -            shutil.copy2(src_f, dst_f)
> -
> -    if need_pkg_dir:
> +    if os.listdir(test_pkg_dir):
> +        export_pkg_dir = os.path.join(d.getVar("TEST_EXPORT_DIR",
> True), "packages")
> +        oe.path.copytree(test_pkg_dir, export_pkg_dir)
>          # Create tar file for packages needed by the DUT
>          create_tarball(d, "testexport_packages_%s.tar.gz" %
> d.getVar("MACHINE", True), export_pkg_dir)
> -    else:
> -        # Remov packages dir from exported test
> -        bb.utils.remove(export_pkg_dir, True)
>  
>      # Copy SDK
>      if d.getVar("TEST_EXPORT_SDK_ENABLED", True) == "1":
> diff --git a/meta/lib/oeqa/oetest.py b/meta/lib/oeqa/oetest.py
> index e63ca56..3bf3643 100644
> --- a/meta/lib/oeqa/oetest.py
> +++ b/meta/lib/oeqa/oetest.py
> @@ -447,6 +447,8 @@ class RuntimeTestContext(TestContext):
>          modules = self.getTestModules()
>          bbpaths = self.d.getVar("BBPATH", True).split(":")
>  
> +        shutil.rmtree(self.d.getVar("TEST_EXTRACTED_DIR", True))
> +        shutil.rmtree(self.d.getVar("TEST_PACKAGED_DIR", True))

Do we use the shutil module anywhere else in oetest.py? Could we drop
it completely if we use oe.path.remove() rather than shutil.rmtree()?
Perhaps you could send a follow-on patch?

>          for module in modules:
>              json_file = self._getJsonFile(module)
>              if json_file:
> @@ -458,6 +460,8 @@ class RuntimeTestContext(TestContext):
>          Extract packages that will be needed during runtime.
>          """
>  
> +        import oe.path
> +
>          extracted_path = self.d.getVar("TEST_EXTRACTED_DIR", True)
>          packaged_path = self.d.getVar("TEST_PACKAGED_DIR", True)
>  
> @@ -481,13 +485,18 @@ class RuntimeTestContext(TestContext):
>                      dst_dir = os.path.join(packaged_path)
>  
>                  # Extract package and copy it to TEST_EXTRACTED_DIR
> -                if extract and not os.path.exists(dst_dir):
> -                    pkg_dir = self._extract_in_tmpdir(pkg)
> -                    shutil.copytree(pkg_dir, dst_dir)
> +                pkg_dir = self._extract_in_tmpdir(pkg)
> +                if extract:
> +
> +                    # Same package used for more than one test,
> +                    # don't need to extract again.
> +                    if os.path.exists(dst_dir):
> +                        continue
> +                    oe.path.copytree(pkg_dir, dst_dir)
>                      shutil.rmtree(pkg_dir)
>  
>                  # Copy package to TEST_PACKAGED_DIR
> -                elif not extract:
> +                else:
>                      self._copy_package(pkg)
>  
>      def _getJsonFile(self, module):
> -- 
> 2.6.6
> 


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-07-26 20:49 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-26  9:38 [PATCHv2 0/2] Allows to copy symlinks to DUTs with testimage mariano.lopez
2016-07-26  9:38 ` [PATCHv2 1/2] oeqa/oetest.py: Allow to export packages using symlinks mariano.lopez
2016-07-26 20:49   ` Joshua G Lock
2016-07-26  9:38 ` [PATCHv2 2/2] oeqa/utils/sshcontrol.py: Allows to copy symlinks to target mariano.lopez

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.