All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/8] #11283: wic ls
@ 2017-05-17 13:39 Ed Bartosh
  2017-05-17 13:39 ` [PATCH v2 1/8] filemap: fix skip logic Ed Bartosh
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: Ed Bartosh @ 2017-05-17 13:39 UTC (permalink / raw)
  To: openembedded-core

Hi,

This is an implementation of new wic subcommand 'wic ls'.

It lists image partitions:

$ wic ls tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
Num     Start        End          Size      Fstype
1        1048576     24438783     23390208  fat16
2       25165824     50315263     25149440  ext4

or directory contents of vfat partitions:

$ wic ls tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic:1/efi/boot
Volume in drive : is boot
 Volume Serial Number is 66EC-5750
Directory for ::/efi/boot

.            <DIR>     2017-05-15  13:00
..           <DIR>     2017-05-15  13:00
grub     cfg       639 2017-05-15  13:00
bootx64  efi    571392 2017-05-15  13:00
        4 files             572 031 bytes
                         15 818 752 bytes free

The patchset also fixes and extends sparse_copy API to support copying part of
the image (one partition) into another image.

It also contains test case for 'wic ls' functionality.

Changes in v2: used mtools from sysroot in the test as oe-selftest failed
               trying to use host mtools

The following changes since commit b852248822868b543e6bec8c4dbea6d43eb55f1b:

  image_types_wic: schedule prepare_wic_build correctly (2017-05-17 13:35:31 +0000)

are available in the git repository at:

  git://git.yoctoproject.org/poky-contrib ed/wic/wip
  http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=ed/wic/wip

Ed Bartosh (8):
  filemap: fix skip logic
  filemap: add parameter 'length' to sparse_copy
  bootimg-pcbios: make boot image file unique
  wic: add wic_init_parser_ls
  wic: add help and usage content for 'wic ls'
  wic: add 'wic ls' command
  engine: implement listing wic images
  selftest: add new test case test_wic_ls

 meta/lib/oeqa/selftest/wic.py                    | 20 ++++++
 scripts/lib/wic/engine.py                        | 86 +++++++++++++++++++++++-
 scripts/lib/wic/filemap.py                       | 26 +++++--
 scripts/lib/wic/help.py                          | 65 ++++++++++++++++++
 scripts/lib/wic/plugins/source/bootimg-pcbios.py |  2 +-
 scripts/wic                                      | 40 +++++++++++
 6 files changed, 230 insertions(+), 9 deletions(-)

-- 
2.12.0



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

* [PATCH v2 1/8] filemap: fix skip logic
  2017-05-17 13:39 [PATCH v2 0/8] #11283: wic ls Ed Bartosh
@ 2017-05-17 13:39 ` Ed Bartosh
  2017-05-17 13:39 ` [PATCH v2 2/8] filemap: add parameter 'length' to sparse_copy Ed Bartosh
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Ed Bartosh @ 2017-05-17 13:39 UTC (permalink / raw)
  To: openembedded-core

Fixed bug in processing 'skip' parameter:
   don't read input file if end of bmap block is less than skip

Simplified logic of positioning to the start of data inside a
partially skipped bmap block.

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
---
 scripts/lib/wic/filemap.py | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/scripts/lib/wic/filemap.py b/scripts/lib/wic/filemap.py
index 1f1aacc522..585b7ea84e 100644
--- a/scripts/lib/wic/filemap.py
+++ b/scripts/lib/wic/filemap.py
@@ -545,11 +545,14 @@ def sparse_copy(src_fname, dst_fname, offset=0, skip=0, api=None):
         start = first * fmap.block_size
         end = (last + 1) * fmap.block_size
 
+        if skip >= end:
+            continue
+
         if start < skip < end:
-            fmap._f_image.seek(skip, os.SEEK_SET)
-        else:
-            fmap._f_image.seek(start, os.SEEK_SET)
-        dst_file.seek(offset + start, os.SEEK_SET)
+            start = skip
+
+        fmap._f_image.seek(start, os.SEEK_SET)
+        dst_file.seek(offset + start - skip, os.SEEK_SET)
 
         chunk_size = 1024 * 1024
         to_read = end - start
-- 
2.12.0



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

* [PATCH v2 2/8] filemap: add parameter 'length' to sparse_copy
  2017-05-17 13:39 [PATCH v2 0/8] #11283: wic ls Ed Bartosh
  2017-05-17 13:39 ` [PATCH v2 1/8] filemap: fix skip logic Ed Bartosh
@ 2017-05-17 13:39 ` Ed Bartosh
  2017-05-17 13:39 ` [PATCH v2 3/8] bootimg-pcbios: make boot image file unique Ed Bartosh
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Ed Bartosh @ 2017-05-17 13:39 UTC (permalink / raw)
  To: openembedded-core

Added parameter 'length' to specify amount of data
to write into destination file. This is useful when only
part of source file should be written into destination file.

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
---
 scripts/lib/wic/filemap.py | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/scripts/lib/wic/filemap.py b/scripts/lib/wic/filemap.py
index 585b7ea84e..8fe302ab49 100644
--- a/scripts/lib/wic/filemap.py
+++ b/scripts/lib/wic/filemap.py
@@ -530,7 +530,8 @@ def filemap(image, log=None):
     except ErrorNotSupp:
         return FilemapSeek(image, log)
 
-def sparse_copy(src_fname, dst_fname, offset=0, skip=0, api=None):
+def sparse_copy(src_fname, dst_fname, offset=0, skip=0,
+                length=0, api=None):
     """Efficiently copy sparse file to or into another file."""
     if not api:
         api = filemap
@@ -541,6 +542,7 @@ def sparse_copy(src_fname, dst_fname, offset=0, skip=0, api=None):
         dst_file = open(dst_fname, 'wb')
         dst_file.truncate(os.path.getsize(src_fname))
 
+    written = 0
     for first, last in fmap.get_mapped_ranges(0, fmap.blocks_cnt):
         start = first * fmap.block_size
         end = (last + 1) * fmap.block_size
@@ -561,7 +563,14 @@ def sparse_copy(src_fname, dst_fname, offset=0, skip=0, api=None):
         while read < to_read:
             if read + chunk_size > to_read:
                 chunk_size = to_read - read
-            chunk = fmap._f_image.read(chunk_size)
+            size = chunk_size
+            if length and written + size > length:
+                size = length - written
+            chunk = fmap._f_image.read(size)
             dst_file.write(chunk)
-            read += chunk_size
+            read += size
+            written += size
+            if written == length:
+                dst_file.close()
+                return
     dst_file.close()
-- 
2.12.0



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

* [PATCH v2 3/8] bootimg-pcbios: make boot image file unique
  2017-05-17 13:39 [PATCH v2 0/8] #11283: wic ls Ed Bartosh
  2017-05-17 13:39 ` [PATCH v2 1/8] filemap: fix skip logic Ed Bartosh
  2017-05-17 13:39 ` [PATCH v2 2/8] filemap: add parameter 'length' to sparse_copy Ed Bartosh
@ 2017-05-17 13:39 ` Ed Bartosh
  2017-05-17 13:39 ` [PATCH v2 4/8] wic: add wic_init_parser_ls Ed Bartosh
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Ed Bartosh @ 2017-05-17 13:39 UTC (permalink / raw)
  To: openembedded-core

Plugin code uses boot.img file name for an image file. If there are
two partitions that use bootimg-pcbios wic breaks with an error
"file already exists: boot.img"

Made image file name unique by adding wks like number to it to fix
the issue.

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
---
 scripts/lib/wic/plugins/source/bootimg-pcbios.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/lib/wic/plugins/source/bootimg-pcbios.py b/scripts/lib/wic/plugins/source/bootimg-pcbios.py
index 5890c1267b..98ad88b03e 100644
--- a/scripts/lib/wic/plugins/source/bootimg-pcbios.py
+++ b/scripts/lib/wic/plugins/source/bootimg-pcbios.py
@@ -186,7 +186,7 @@ class BootimgPcbiosPlugin(SourcePlugin):
                      extra_blocks, part.mountpoint, blocks)
 
         # dosfs image, created by mkdosfs
-        bootimg = "%s/boot.img" % cr_workdir
+        bootimg = "%s/boot%s.img" % (cr_workdir, part.lineno)
 
         dosfs_cmd = "mkdosfs -n boot -S 512 -C %s %d" % (bootimg, blocks)
         exec_native_cmd(dosfs_cmd, native_sysroot)
-- 
2.12.0



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

* [PATCH v2 4/8] wic: add wic_init_parser_ls
  2017-05-17 13:39 [PATCH v2 0/8] #11283: wic ls Ed Bartosh
                   ` (2 preceding siblings ...)
  2017-05-17 13:39 ` [PATCH v2 3/8] bootimg-pcbios: make boot image file unique Ed Bartosh
@ 2017-05-17 13:39 ` Ed Bartosh
  2017-05-17 13:39 ` [PATCH v2 5/8] wic: add help and usage content for 'wic ls' Ed Bartosh
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Ed Bartosh @ 2017-05-17 13:39 UTC (permalink / raw)
  To: openembedded-core

Added parser for 'wic ls' command.

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
---
 scripts/wic | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/scripts/wic b/scripts/wic
index 49cad869e2..6c9a30da7d 100755
--- a/scripts/wic
+++ b/scripts/wic
@@ -35,6 +35,8 @@ import os
 import sys
 import argparse
 import logging
+
+from collections import namedtuple
 from distutils import spawn
 
 # External modules
@@ -317,6 +319,29 @@ def wic_init_parser_list(subparser):
                              "defined inside the .wks file")
     return
 
+def imgtype(arg):
+    """
+    Custom type for ArgumentParser
+    Converts path spec to named tuple: (image, partition, path)
+    """
+    image = arg
+    part = path = None
+    if ':' in image:
+        image, part = image.split(':')
+        if '/' in part:
+            part, path = part.split('/', 1)
+
+    if not os.path.isfile(image):
+        err = "%s is not a regular file or symlink" % image
+        raise argparse.ArgumentTypeError(err)
+
+    return namedtuple('ImgType', 'image part path')(image, part, path)
+
+def wic_init_parser_ls(subparser):
+    subparser.add_argument("path", type=imgtype,
+                        help="image spec: <image>[:<vfat partition>[<path>]]")
+    subparser.add_argument("-n", "--native-sysroot",
+                        help="path to the native sysroot containing the tools")
 
 def wic_init_parser_help(subparser):
     helpparsers = subparser.add_subparsers(dest='help_topic', help=hlp.wic_usage)
-- 
2.12.0



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

* [PATCH v2 5/8] wic: add help and usage content for 'wic ls'
  2017-05-17 13:39 [PATCH v2 0/8] #11283: wic ls Ed Bartosh
                   ` (3 preceding siblings ...)
  2017-05-17 13:39 ` [PATCH v2 4/8] wic: add wic_init_parser_ls Ed Bartosh
@ 2017-05-17 13:39 ` Ed Bartosh
  2017-05-17 13:39 ` [PATCH v2 6/8] wic: add 'wic ls' command Ed Bartosh
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Ed Bartosh @ 2017-05-17 13:39 UTC (permalink / raw)
  To: openembedded-core

Added wic_ls_help and wic_ls_usage variables to
help.py. These variables contain help content that
will be used in 'wic ls help' and 'wic ls --help'
output.

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
---
 scripts/lib/wic/help.py | 65 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/scripts/lib/wic/help.py b/scripts/lib/wic/help.py
index f9f7268986..bb3c749323 100644
--- a/scripts/lib/wic/help.py
+++ b/scripts/lib/wic/help.py
@@ -284,6 +284,71 @@ DESCRIPTION
     details.
 """
 
+wic_ls_usage = """
+
+ List content of a partitioned image
+
+ usage: wic ls <image>[:<vfat partition>[<path>]] [--native-sysroot <path>]
+
+ This command  outputs either list of image partitions or directory contents
+ of vfat partitions.
+
+ See 'wic help ls' for more detailed instructions.
+
+"""
+
+wic_ls_help = """
+
+NAME
+    wic ls - List contents of partitioned image or vfat partitions
+
+SYNOPSIS
+    wic ls <image>
+    wic ls <image>:<vfat partition>
+    wic ls <image>:<vfat partition><path>
+    wic ls <image>:<vfat partition><path> --native-sysroot <path>
+
+DESCRIPTION
+    This command lists either partitions of the image or directory contents
+    of vfat partitions.
+
+    The first form it lists partitions of the image.
+    For example:
+        $ wic ls tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic
+        Num     Start        End          Size      Fstype
+        1        1048576     24438783     23390208  fat16
+        2       25165824     50315263     25149440  ext4
+
+    Second and third form list directory content of vfat partition:
+        $ wic ls tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic:1
+        Volume in drive : is boot
+         Volume Serial Number is 2DF2-5F02
+        Directory for ::/
+
+        efi          <DIR>     2017-05-11  10:54
+        startup  nsh        26 2017-05-11  10:54
+        vmlinuz        6922288 2017-05-11  10:54
+                3 files           6 922 314 bytes
+                                 15 818 752 bytes free
+
+
+        $ wic ls tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic:1/EFI/boot/
+        Volume in drive : is boot
+         Volume Serial Number is 2DF2-5F02
+        Directory for ::/EFI/boot
+
+        .            <DIR>     2017-05-11  10:54
+        ..           <DIR>     2017-05-11  10:54
+        grub     cfg       679 2017-05-11  10:54
+        bootx64  efi    571392 2017-05-11  10:54
+                4 files             572 071 bytes
+                                 15 818 752 bytes free
+
+    The -n option is used to specify the path to the native sysroot
+    containing the tools(parted and mtools) to use.
+
+"""
+
 wic_plugins_help = """
 
 NAME
-- 
2.12.0



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

* [PATCH v2 6/8] wic: add 'wic ls' command
  2017-05-17 13:39 [PATCH v2 0/8] #11283: wic ls Ed Bartosh
                   ` (4 preceding siblings ...)
  2017-05-17 13:39 ` [PATCH v2 5/8] wic: add help and usage content for 'wic ls' Ed Bartosh
@ 2017-05-17 13:39 ` Ed Bartosh
  2017-05-17 13:39 ` [PATCH v2 7/8] engine: implement listing wic images Ed Bartosh
  2017-05-17 13:39 ` [PATCH v2 8/8] selftest: add new test case test_wic_ls Ed Bartosh
  7 siblings, 0 replies; 9+ messages in thread
From: Ed Bartosh @ 2017-05-17 13:39 UTC (permalink / raw)
  To: openembedded-core

Added empty 'wic ls' command that does nothing.
The functionality will be added by the next commits.

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
---
 scripts/lib/wic/engine.py |  4 ++++
 scripts/wic               | 15 +++++++++++++++
 2 files changed, 19 insertions(+)

diff --git a/scripts/lib/wic/engine.py b/scripts/lib/wic/engine.py
index 647358287f..e58beb7dce 100644
--- a/scripts/lib/wic/engine.py
+++ b/scripts/lib/wic/engine.py
@@ -225,6 +225,10 @@ def wic_list(args, scripts_path):
 
     return False
 
+def wic_ls(args, native_sysroot):
+    """List contents of partitioned image or vfat partition."""
+    pass
+
 def find_canned(scripts_path, file_name):
     """
     Find a file either by its path or by name in the canned files dir.
diff --git a/scripts/wic b/scripts/wic
index 6c9a30da7d..4161f80367 100755
--- a/scripts/wic
+++ b/scripts/wic
@@ -234,6 +234,14 @@ def wic_list_subcommand(args, usage_str):
         raise WicError("Bad list arguments, exiting")
 
 
+def wic_ls_subcommand(args, usage_str):
+    """
+    Command-line handling for list content of images.
+    The real work is done by engine.wic_ls()
+    """
+    engine.wic_ls(args, args.native_sysroot)
+
+
 def wic_help_subcommand(args, usage_str):
     """
     Command-line handling for help subcommand to keep the current
@@ -266,6 +274,9 @@ helptopics = {
     "create":    [wic_help_topic_subcommand,
                   wic_help_topic_usage,
                   hlp.wic_create_help],
+    "ls":        [wic_help_topic_subcommand,
+                  wic_help_topic_usage,
+                  hlp.wic_ls_help],
     "list":      [wic_help_topic_subcommand,
                   wic_help_topic_usage,
                   hlp.wic_list_help]
@@ -359,6 +370,10 @@ subcommands = {
                   hlp.wic_list_usage,
                   hlp.wic_list_help,
                   wic_init_parser_list],
+    "ls":        [wic_ls_subcommand,
+                  hlp.wic_ls_usage,
+                  hlp.wic_ls_help,
+                  wic_init_parser_ls],
     "help":      [wic_help_subcommand,
                   wic_help_topic_usage,
                   hlp.wic_help_help,
-- 
2.12.0



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

* [PATCH v2 7/8] engine: implement listing wic images
  2017-05-17 13:39 [PATCH v2 0/8] #11283: wic ls Ed Bartosh
                   ` (5 preceding siblings ...)
  2017-05-17 13:39 ` [PATCH v2 6/8] wic: add 'wic ls' command Ed Bartosh
@ 2017-05-17 13:39 ` Ed Bartosh
  2017-05-17 13:39 ` [PATCH v2 8/8] selftest: add new test case test_wic_ls Ed Bartosh
  7 siblings, 0 replies; 9+ messages in thread
From: Ed Bartosh @ 2017-05-17 13:39 UTC (permalink / raw)
  To: openembedded-core

Implemented 'wic ls' functionality:
 - list image partitions
 - list directory content of vfat partitions

[YOCTO #11283]

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
---
 scripts/lib/wic/engine.py | 84 +++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 82 insertions(+), 2 deletions(-)

diff --git a/scripts/lib/wic/engine.py b/scripts/lib/wic/engine.py
index e58beb7dce..95c8d1cc22 100644
--- a/scripts/lib/wic/engine.py
+++ b/scripts/lib/wic/engine.py
@@ -30,10 +30,15 @@
 
 import logging
 import os
+import tempfile
+
+from collections import namedtuple, OrderedDict
+from distutils.spawn import find_executable
 
 from wic import WicError
+from wic.filemap import sparse_copy
 from wic.pluginbase import PluginMgr
-from wic.utils.misc import get_bitbake_var
+from wic.utils.misc import get_bitbake_var, exec_cmd
 
 logger = logging.getLogger('wic')
 
@@ -225,9 +230,84 @@ def wic_list(args, scripts_path):
 
     return False
 
+
+class Disk:
+    def __init__(self, imagepath, native_sysroot):
+        self.imagepath = imagepath
+        self.native_sysroot = native_sysroot
+        self._partitions = None
+        self._mdir = None
+        self._partimages = {}
+
+        # find parted
+        self.paths = "/bin:/usr/bin:/usr/sbin:/sbin/"
+        if native_sysroot:
+            for path in self.paths.split(':'):
+                self.paths = "%s%s:%s" % (native_sysroot, path, self.paths)
+
+        self.parted = find_executable("parted", self.paths)
+        if not self.parted:
+            raise WicError("Can't find executable parted")
+
+    def __del__(self):
+        for path in self._partimages.values():
+            os.unlink(path)
+
+    @property
+    def partitions(self):
+        if self._partitions is None:
+            self._partitions = OrderedDict()
+            out = exec_cmd("%s -sm %s unit B print" % (self.parted, self.imagepath))
+            parttype = namedtuple("Part", "pnum start end size fstype")
+            for line in out.splitlines()[2:]:
+                pnum, start, end, size, fstype = line.split(':')[:5]
+                partition = parttype(pnum, int(start[:-1]), int(end[:-1]),
+                                     int(size[:-1]), fstype)
+                self._partitions[pnum] = partition
+
+        return self._partitions
+
+    @property
+    def mdir(self):
+        if self._mdir is None:
+            self._mdir = find_executable("mdir", self.paths)
+            if not self._mdir:
+                raise WicError("Can't find executable mdir")
+        return self._mdir
+
+    def _get_part_image(self, pnum):
+        if pnum not in self.partitions:
+            raise WicError("Partition %s is not in the image")
+        part = self.partitions[pnum]
+        if not part.fstype.startswith("fat"):
+            raise WicError("Not supported fstype: {}".format(part.fstype))
+        if pnum not in self._partimages:
+            tmpf = tempfile.NamedTemporaryFile(prefix="wic-part")
+            dst_fname = tmpf.name
+            tmpf.close()
+            sparse_copy(self.imagepath, dst_fname, skip=part.start, length=part.size)
+            self._partimages[pnum] = dst_fname
+
+        return self._partimages[pnum]
+
+    def dir(self, pnum, path):
+        return exec_cmd("{} -i {} ::{}".format(self.mdir,
+                                               self._get_part_image(pnum),
+                                               path))
+
 def wic_ls(args, native_sysroot):
     """List contents of partitioned image or vfat partition."""
-    pass
+    disk = Disk(args.path.image, native_sysroot)
+    if not args.path.part:
+        if disk.partitions:
+            print('Num     Start        End          Size      Fstype')
+            for part in disk.partitions.values():
+                print("{:2s}  {:12d} {:12d} {:12d}  {}".format(\
+                          part.pnum, part.start, part.end,
+                          part.size, part.fstype))
+    else:
+        path = args.path.path or '/'
+        print(disk.dir(args.path.part, path))
 
 def find_canned(scripts_path, file_name):
     """
-- 
2.12.0



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

* [PATCH v2 8/8] selftest: add new test case test_wic_ls
  2017-05-17 13:39 [PATCH v2 0/8] #11283: wic ls Ed Bartosh
                   ` (6 preceding siblings ...)
  2017-05-17 13:39 ` [PATCH v2 7/8] engine: implement listing wic images Ed Bartosh
@ 2017-05-17 13:39 ` Ed Bartosh
  7 siblings, 0 replies; 9+ messages in thread
From: Ed Bartosh @ 2017-05-17 13:39 UTC (permalink / raw)
  To: openembedded-core

Tested 'wic ls' functionality:
 - list of image partitions
 - list of directory content of vfat partition

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
---
 meta/lib/oeqa/selftest/wic.py | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/meta/lib/oeqa/selftest/wic.py b/meta/lib/oeqa/selftest/wic.py
index 9cb9507830..e908c076ad 100644
--- a/meta/lib/oeqa/selftest/wic.py
+++ b/meta/lib/oeqa/selftest/wic.py
@@ -825,3 +825,23 @@ part /etc --source rootfs --ondisk mmcblk0 --fstype=ext4 --exclude-path bin/ --r
             status, output = qemu.run_serial(cmd)
             self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
             self.assertEqual(output, '2')
+
+    def test_wic_ls(self):
+        """Test listing image content using 'wic ls'"""
+        self.assertEqual(0, runCmd("wic create wictestdisk "
+                                   "--image-name=core-image-minimal "
+                                   "-D -o %s" % self.resultdir).status)
+        images = glob(self.resultdir + "wictestdisk-*.direct")
+        self.assertEqual(1, len(images))
+
+        sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
+
+        # list partitions
+        result = runCmd("wic ls %s -n %s" % (images[0], sysroot))
+        self.assertEqual(0, result.status)
+        self.assertEqual(3, len(result.output.split('\n')))
+
+        # list directory content of the first partition
+        result = runCmd("wic ls %s:1/ -n %s" % (images[0], sysroot))
+        self.assertEqual(0, result.status)
+        self.assertEqual(6, len(result.output.split('\n')))
-- 
2.12.0



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

end of thread, other threads:[~2017-05-17 13:40 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-17 13:39 [PATCH v2 0/8] #11283: wic ls Ed Bartosh
2017-05-17 13:39 ` [PATCH v2 1/8] filemap: fix skip logic Ed Bartosh
2017-05-17 13:39 ` [PATCH v2 2/8] filemap: add parameter 'length' to sparse_copy Ed Bartosh
2017-05-17 13:39 ` [PATCH v2 3/8] bootimg-pcbios: make boot image file unique Ed Bartosh
2017-05-17 13:39 ` [PATCH v2 4/8] wic: add wic_init_parser_ls Ed Bartosh
2017-05-17 13:39 ` [PATCH v2 5/8] wic: add help and usage content for 'wic ls' Ed Bartosh
2017-05-17 13:39 ` [PATCH v2 6/8] wic: add 'wic ls' command Ed Bartosh
2017-05-17 13:39 ` [PATCH v2 7/8] engine: implement listing wic images Ed Bartosh
2017-05-17 13:39 ` [PATCH v2 8/8] selftest: add new test case test_wic_ls Ed Bartosh

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.