コード例 #1
0
  def test_extract_all_overlap(self):
    assert self.default_archive_type

    items1 = temp_archive.make_temp_item_list([
      ( 'base-1.2.3/foo.txt', 'foo.txt\n' ),
      ( 'base-1.2.3/bar.txt', 'bar.txt\n' ),
    ])

    items2 = temp_archive.make_temp_item_list([
      ( 'base-1.2.3/orange.txt', 'orange.txt\n' ),
      ( 'base-1.2.3/kiwi.txt', 'kiwi.txt\n' ),
    ])

    tmp_archive1 = self.make_temp_archive_for_reading(items1)
    tmp_archive2 = self.make_temp_archive_for_reading(items2)

    tmp_dir = temp_file.make_temp_dir()
    tmp_archive1.extract_all(tmp_dir)
    tmp_archive2.extract_all(tmp_dir)

    actual_files = file_find.find(tmp_dir, relative = True)

    expected_files = [
      'base-1.2.3/bar.txt',
      'base-1.2.3/foo.txt',
      'base-1.2.3/kiwi.txt',
      'base-1.2.3/orange.txt',
    ]

    self.assertEqual( expected_files, actual_files )
コード例 #2
0
ファイル: test_archive_util.py プロジェクト: reconstruir/bes
 def test_combine_conflicts_different_content_with_check(self):
     a1 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([
         (self.native_filename('fruits/apple.txt'), 'apple.txt'),
         (self.native_filename('fruits/durian.txt'), 'durian.txt'),
         (self.native_filename('fruits/kiwi.txt'), 'kiwi.txt'),
         (self.native_filename('fruits/plum.txt'), '1plum.txt'),
     ]),
                                         'zip',
                                         delete=not self.DEBUG,
                                         prefix='a1-')
     a2 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([
         (self.native_filename('fruits/kiwi.txt'), 'kiwi.txt'),
         (self.native_filename('fruits/melon.txt'), 'melon.txt'),
         (self.native_filename('fruits/lemon.txt'), '1lemon.txt'),
         (self.native_filename('fruits/dragonfruit.txt'),
          'dragonfruit.txt'),
     ]),
                                         'zip',
                                         delete=not self.DEBUG,
                                         prefix='a2-')
     a3 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([
         (self.native_filename('fruits/lemon.txt'), '2lemon.txt'),
         (self.native_filename('fruits/strawberry.txt'), 'strawberry.txt'),
         (self.native_filename('fruits/pear.txt'), 'pear.txt'),
         (self.native_filename('fruits/plum.txt'), '2plum.txt'),
     ]),
                                         'zip',
                                         delete=not self.DEBUG,
                                         prefix='a3-')
     tmp_archive = self.make_temp_file(suffix='.zip')
     with self.assertRaises(RuntimeError) as ctx:
         archive_util.combine([a1, a2, a3], tmp_archive, check_content=True)
コード例 #3
0
  def test_extract_all_overlap_with_base_dir_and_strip_common_ancestor(self):
    assert self.default_archive_type

    items1 = temp_archive.make_temp_item_list([
      ( 'base-1.2.3/foo.txt', 'foo.txt\n' ),
      ( 'base-1.2.3/subdir/bar.txt', 'bar.txt\n' ),
    ])

    items2 = temp_archive.make_temp_item_list([
      ( 'notbase-1.2.3/orange.txt', 'orange.txt\n' ),
      ( 'notbase-1.2.3/subdir/kiwi.txt', 'kiwi.txt\n' ),
    ])

    tmp_archive1 = self.make_temp_archive_for_reading(items1)
    tmp_archive2 = self.make_temp_archive_for_reading(items2)

    tmp_dir = temp_file.make_temp_dir()
    base_dir = 'foo-6.6.6'
    tmp_archive1.extract_all(tmp_dir, base_dir = base_dir, strip_common_ancestor = True)
    tmp_archive2.extract_all(tmp_dir, base_dir = base_dir, strip_common_ancestor = True)

    actual_files = file_find.find(tmp_dir, relative = True)
    expected_files = [
      'foo-6.6.6/foo.txt',
      'foo-6.6.6/orange.txt',
      'foo-6.6.6/subdir/bar.txt',
      'foo-6.6.6/subdir/kiwi.txt',
    ]
    self.assertEqual( expected_files, actual_files )
コード例 #4
0
ファイル: test_archive_util.py プロジェクト: reconstruir/bes
 def test_remove_members(self):
     items = temp_archive.make_temp_item_list([
         (self.native_filename('foo-1.2.3/fruits/apple.txt'), 'apple.txt'),
         (self.native_filename('foo-1.2.3/fruits/durian.txt'),
          'durian.txt'),
         (self.native_filename('foo-1.2.3/fruits/kiwi.txt'), 'kiwi.txt'),
         (self.native_filename('foo-1.2.3/.import/foo.txt'), 'foo.txt'),
         (self.native_filename('foo-1.2.3/.import/bar.txt'), 'bar.txt'),
     ])
     tmp_archive = temp_archive.make_temp_archive(items,
                                                  'zip',
                                                  delete=not self.DEBUG)
     self.assertEqual([
         'foo-1.2.3/.import/bar.txt',
         'foo-1.2.3/.import/foo.txt',
         'foo-1.2.3/fruits/apple.txt',
         'foo-1.2.3/fruits/durian.txt',
         'foo-1.2.3/fruits/kiwi.txt',
     ], archiver.members(tmp_archive))
     archive_util.remove_members(tmp_archive, ['foo-1.2.3/.import'],
                                 debug=self.DEBUG)
     self.assertEqual([
         'foo-1.2.3/fruits/apple.txt',
         'foo-1.2.3/fruits/durian.txt',
         'foo-1.2.3/fruits/kiwi.txt',
     ], archiver.members(tmp_archive))
コード例 #5
0
ファイル: test_archive_util.py プロジェクト: reconstruir/bes
 def test_match_members(self):
     tmp_archive = temp_archive.make_temp_archive(
         temp_archive.make_temp_item_list([
             (self.native_filename('fruits/apple.pdf'), 'apple.pdf'),
             (self.native_filename('fruits/durian.pdf'), 'durian.pdf'),
             (self.native_filename('fruits/plum.pdf'), 'plum.pdf'),
             (self.native_filename('cheese/brie.txt'), 'brie.txt'),
             (self.native_filename('cheese/cheddar.txt'), 'cheddar.txt'),
             (self.native_filename('cheese/fontina.txt'), 'fontina.txt'),
         ]),
         'zip',
         delete=not self.DEBUG)
     self.assertEqual([
         'cheese/brie.txt',
         'cheese/cheddar.txt',
         'cheese/fontina.txt',
         'fruits/apple.pdf',
         'fruits/durian.pdf',
         'fruits/plum.pdf',
     ], archive_util.match_members(tmp_archive, ['*']))
     self.assertEqual([
         'cheese/brie.txt',
         'cheese/cheddar.txt',
         'cheese/fontina.txt',
     ], archive_util.match_members(tmp_archive, ['cheese*']))
     self.assertEqual([
         'cheese/brie.txt',
         'cheese/cheddar.txt',
         'cheese/fontina.txt',
     ], archive_util.match_members(tmp_archive, ['*.txt']))
     self.assertEqual([
         'fruits/apple.pdf',
         'fruits/durian.pdf',
         'fruits/plum.pdf',
     ], archive_util.match_members(tmp_archive, ['*.pdf']))
コード例 #6
0
  def test_create_base_dir(self):
    self.maxDiff = None

    items = temp_archive.make_temp_item_list([
      ( 'base-1.2.3/foo.txt', 'foo.txt\n' ),
      ( 'base-1.2.3/bar.txt', 'bar.txt\n' ),
    ])
    
    tmp_dir = temp_archive.write_temp_items(items)

    base_dir = 'foo-666'

    archive = self.make_temp_archive_for_writing()
    archive.create(tmp_dir, base_dir = base_dir)

    self.assertTrue( path.isfile(archive.filename) )

    tmp_extract_dir = temp_file.make_temp_dir()
    archive.extract_all(tmp_extract_dir)

    def _remove_base_dir(f):
      return file_util.remove_head(f, base_dir)

    self._compare_dirs(tmp_dir, tmp_extract_dir, transform = _remove_base_dir)

    file_util.remove([ tmp_dir, tmp_extract_dir])
コード例 #7
0
 def test_common_base(self):
   items = temp_archive.make_temp_item_list([
     ( 'base-1.2.3/foo.txt', 'foo.txt\n' ),
     ( 'base-1.2.3/bar.txt', 'bar.txt\n' ),
     ( 'base-1.2.3/baz.txt', 'baz.txt\n' ),
   ])
   tmp_archive = self.make_temp_archive_for_reading(items)
   self.assertEqual( 'base-1.2.3', self.make_temp_archive_for_reading(items).common_base() )
コード例 #8
0
 def test_extract_all(self):
   assert self.default_archive_type
   items = temp_archive.make_temp_item_list([
     ( 'foo.txt', 'foo.txt\n' ),
   ])
   tmp_archive = self.make_temp_archive_for_reading(items)
   tmp_dir = temp_file.make_temp_dir()
   tmp_archive.extract_all(tmp_dir)
   self.assertTrue( path.isfile(path.join(tmp_dir, 'foo.txt')) )
コード例 #9
0
ファイル: test_archive_util.py プロジェクト: reconstruir/bes
 def test_combine_conflicts_different_content_no_check(self):
     a1 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([
         (self.native_filename('fruits/apple.txt'), 'apple.txt'),
         (self.native_filename('fruits/durian.txt'), 'durian.txt'),
         (self.native_filename('fruits/kiwi.txt'), 'kiwi.txt'),
         (self.native_filename('fruits/plum.txt'), '1plum.txt'),
     ]),
                                         'zip',
                                         delete=not self.DEBUG,
                                         prefix='a1-')
     a2 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([
         (self.native_filename('fruits/kiwi.txt'), 'kiwi.txt'),
         (self.native_filename('fruits/melon.txt'), 'melon.txt'),
         (self.native_filename('fruits/lemon.txt'), '1lemon.txt'),
         (self.native_filename('fruits/dragonfruit.txt'),
          'dragonfruit.txt'),
     ]),
                                         'zip',
                                         delete=not self.DEBUG,
                                         prefix='a2-')
     a3 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([
         (self.native_filename('fruits/lemon.txt'), '2lemon.txt'),
         (self.native_filename('fruits/strawberry.txt'), 'strawberry.txt'),
         (self.native_filename('fruits/pear.txt'), 'pear.txt'),
         (self.native_filename('fruits/plum.txt'), '2plum.txt'),
     ]),
                                         'zip',
                                         delete=not self.DEBUG,
                                         prefix='a3-')
     tmp_archive = self.make_temp_file(suffix='.zip')
     archive_util.combine([a1, a2, a3], tmp_archive)
     self.assertEqual([
         'fruits/apple.txt',
         'fruits/dragonfruit.txt',
         'fruits/durian.txt',
         'fruits/kiwi.txt',
         'fruits/lemon.txt',
         'fruits/melon.txt',
         'fruits/pear.txt',
         'fruits/plum.txt',
         'fruits/strawberry.txt',
     ], archiver.members(tmp_archive))
コード例 #10
0
 def test_extract_member_to_string(self):
   assert self.default_archive_type
   items = temp_archive.make_temp_item_list([
     ( 'foo/apple.txt', 'apple.txt\n' ),
     ( 'foo/durian.txt', 'durian.txt\n' ),
     ( 'foo/kiwi.txt', 'kiwi.txt\n' ),
     ( 'metadata/db.json', '{}\n' ),
   ])
   tmp_archive = self.make_temp_archive_for_reading(items)
   self.assertEqual( b'apple.txt\n', tmp_archive.extract_member_to_string('foo/apple.txt') )
   self.assertEqual( b'{}\n', tmp_archive.extract_member_to_string('metadata/db.json') )
コード例 #11
0
ファイル: test_archive_util.py プロジェクト: reconstruir/bes
    def test_remove_members_matching_patterns(self):
        items = temp_archive.make_temp_item_list([
            (self.native_filename('foo-1.2.3/fruits/apple.txt'), 'apple.txt'),
            (self.native_filename('foo-1.2.3/fruits/durian.txt'),
             'durian.txt'),
            (self.native_filename('foo-1.2.3/fruits/kiwi.txt'), 'kiwi.txt'),
            (self.native_filename('foo-1.2.3/.import/foo.txt'), 'foo.txt'),
            (self.native_filename('foo-1.2.3/.import/bar.txt'), 'bar.txt'),
            (self.native_filename('foo-1.2.3/cheese/brie.jpg'), 'brie.jpg'),
            (self.native_filename('foo-1.2.3/cheese/halumi.jpg'),
             'halumi.jpg'),
            (self.native_filename('foo-1.2.3/cheese/feta.jpg'), 'feta.jpg'),
        ])
        tmp_archive = temp_archive.make_temp_archive(items,
                                                     'zip',
                                                     delete=not self.DEBUG)
        archive_util.remove_members_matching_patterns(tmp_archive,
                                                      ['notfound'],
                                                      debug=self.DEBUG)
        self.assertEqual([
            'foo-1.2.3/.import/bar.txt',
            'foo-1.2.3/.import/foo.txt',
            'foo-1.2.3/cheese/brie.jpg',
            'foo-1.2.3/cheese/feta.jpg',
            'foo-1.2.3/cheese/halumi.jpg',
            'foo-1.2.3/fruits/apple.txt',
            'foo-1.2.3/fruits/durian.txt',
            'foo-1.2.3/fruits/kiwi.txt',
        ], archiver.members(tmp_archive))

        tmp_archive = temp_archive.make_temp_archive(items,
                                                     'zip',
                                                     delete=not self.DEBUG)
        archive_util.remove_members_matching_patterns(tmp_archive, ['*.txt'],
                                                      debug=self.DEBUG)
        self.assertEqual([
            'foo-1.2.3/cheese/brie.jpg',
            'foo-1.2.3/cheese/feta.jpg',
            'foo-1.2.3/cheese/halumi.jpg',
        ], archiver.members(tmp_archive))

        tmp_archive = temp_archive.make_temp_archive(items,
                                                     'zip',
                                                     delete=not self.DEBUG)
        archive_util.remove_members_matching_patterns(tmp_archive,
                                                      ['*cheese*'],
                                                      debug=self.DEBUG)
        self.assertEqual([
            'foo-1.2.3/.import/bar.txt',
            'foo-1.2.3/.import/foo.txt',
            'foo-1.2.3/fruits/apple.txt',
            'foo-1.2.3/fruits/durian.txt',
            'foo-1.2.3/fruits/kiwi.txt',
        ], archiver.members(tmp_archive))
コード例 #12
0
ファイル: test_archive_util.py プロジェクト: reconstruir/bes
 def test_duplicate_members_with_conflicts(self):
     a1 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([
         (self.native_filename('foo-1.2.3/fruits/apple.txt'), 'apple.txt'),
         (self.native_filename('foo-1.2.3/fruits/durian.txt'),
          'durian.txt'),
         (self.native_filename('foo-1.2.3/fruits/kiwi.txt'), 'kiwi.txt'),
     ]),
                                         'zip',
                                         delete=not self.DEBUG,
                                         prefix='a1-')
     a2 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([
         (self.native_filename('foo-1.2.3/fruits/apple.txt'), 'apple2.txt'),
         (self.native_filename('foo-1.2.3/fruits/durian.txt'),
          'durian.txt'),
         (self.native_filename('foo-1.2.3/fruits/melon.txt'), 'melon.txt'),
         (self.native_filename('foo-1.2.3/wine/barolo.txt'), 'barolo.txt'),
         (self.native_filename('foo-1.2.3/cheese/brie.txt'), 'brie.txt'),
     ]),
                                         'zip',
                                         delete=not self.DEBUG,
                                         prefix='a2-')
     a3 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([
         (self.native_filename('foo-1.2.3/fruits/strawberry.txt'),
          'strawberry.txt'),
         (self.native_filename('foo-1.2.3/fruits/blueberry.txt'),
          'blueberry.txt'),
         (self.native_filename('foo-1.2.3/fruits/banana.txt'),
          'banana.txt'),
         (self.native_filename('foo-1.2.3/wine/barolo.txt'), 'barolo.txt'),
         (self.native_filename('foo-1.2.3/cheese/brie.txt'), 'brie2.txt'),
     ]),
                                         'zip',
                                         delete=not self.DEBUG,
                                         prefix='a3-')
     self.assertEqual(
         {
             'foo-1.2.3/cheese/brie.txt': {a2, a3},
             'foo-1.2.3/fruits/apple.txt': {a1, a2},
         },
         archive_util.duplicate_members([a1, a2, a3],
                                        only_content_conficts=True))
コード例 #13
0
 def test_extract_all_with_base_dir_and_strip_common_ancestor(self):
   assert self.default_archive_type
   base_dir_to_strip = 'base-1.2.3'
   items = temp_archive.make_temp_item_list([
     ( 'foo.txt', 'foo.txt\n' ),
   ])
   items = temp_archive.add_base_dir(items, base_dir_to_strip)
   base_dir_to_add = 'added-6.6.6'
   tmp_archive = self.make_temp_archive_for_reading(items)
   tmp_dir = temp_file.make_temp_dir()
   tmp_archive.extract_all(tmp_dir, base_dir = base_dir_to_add, strip_common_ancestor = True)
   self.assertTrue( path.isfile(path.join(tmp_dir, base_dir_to_add, 'foo.txt')) )
コード例 #14
0
  def test_has_member(self):
    assert self.default_archive_type

    items = temp_archive.make_temp_item_list([
      ( 'foo/apple.txt', 'apple.txt\n' ),
      ( 'foo/durian.txt', 'durian.txt\n' ),
      ( 'foo/kiwi.txt', 'kiwi.txt\n' ),
      ( 'metadata/db.json', '{}\n' ),
    ])
    tmp_archive = self.make_temp_archive_for_reading(items)
    self.assertTrue( self.make_archive(tmp_archive.filename).has_member('foo/apple.txt') )
    self.assertFalse( self.make_archive(tmp_archive.filename).has_member('nothere.txt') )
コード例 #15
0
ファイル: test_archive_util.py プロジェクト: reconstruir/bes
 def test_combine_with_base_dir(self):
     a1 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([
         (self.native_filename('fruits/apple.txt'), 'apple.txt'),
         (self.native_filename('fruits/durian.txt'), 'durian.txt'),
         (self.native_filename('fruits/kiwi.txt'), 'kiwi.txt'),
     ]),
                                         'zip',
                                         delete=not self.DEBUG,
                                         prefix='a1-')
     a2 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([
         (self.native_filename('fruits/melon.txt'), 'melon.txt'),
         (self.native_filename('fruits/lemon.txt'), 'lemon.txt'),
         (self.native_filename('fruits/dragonfruit.txt'),
          'dragonfruit.txt'),
     ]),
                                         'zip',
                                         delete=not self.DEBUG,
                                         prefix='a2-')
     a3 = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([
         (self.native_filename('fruits/strawberry.txt'), 'strawberry.txt'),
         (self.native_filename('fruits/pear.txt'), 'pear.txt'),
         (self.native_filename('fruits/plum.txt'), 'plum.txt'),
     ]),
                                         'zip',
                                         delete=not self.DEBUG,
                                         prefix='a3-')
     tmp_archive = self.make_temp_file(suffix='.zip')
     archive_util.combine([a1, a2, a3], tmp_archive, base_dir='foo-1.2.3')
     self.assertEqual([
         'foo-1.2.3/fruits/apple.txt',
         'foo-1.2.3/fruits/dragonfruit.txt',
         'foo-1.2.3/fruits/durian.txt',
         'foo-1.2.3/fruits/kiwi.txt',
         'foo-1.2.3/fruits/lemon.txt',
         'foo-1.2.3/fruits/melon.txt',
         'foo-1.2.3/fruits/pear.txt',
         'foo-1.2.3/fruits/plum.txt',
         'foo-1.2.3/fruits/strawberry.txt',
     ], archiver.members(tmp_archive))
コード例 #16
0
 def test_extract_members(self):
   assert self.default_archive_type
   items = temp_archive.make_temp_item_list([
     ( 'foo/apple.txt', 'apple.txt\n' ),
     ( 'foo/durian.txt', 'durian.txt\n' ),
     ( 'foo/kiwi.txt', 'kiwi.txt\n' ),
     ( 'metadata/db.json', '{}\n' ),
   ])
   members = [
     'foo/apple.txt',
     'foo/durian.txt',
   ]
   actual_files = self._test_extract_with_members(items, members)
   expected_files = members
   self.assertEqual( expected_files, actual_files )
コード例 #17
0
 def test_extract_with_exclude(self):
   assert self.default_archive_type
   items = temp_archive.make_temp_item_list([
     ( 'foo/apple.txt', 'apple.txt\n' ),
     ( 'foo/durian.txt', 'durian.txt\n' ),
     ( 'foo/kiwi.txt', 'kiwi.txt\n' ),
     ( 'metadata/db.json', '{}\n' ),
   ])
   include = None
   exclude = [ '*.txt' ]
   actual_files = self._test_extract_with_include_exclude(items, include, exclude)
   expected_files = [
     'metadata/db.json',
   ]
   self.assertEqual( expected_files, actual_files )
コード例 #18
0
 def test_create_with_include_and_exclude(self):
   self.maxDiff = None
   items = temp_archive.make_temp_item_list([
     ( 'base-1.2.3/foo.txt', 'foo.txt\n' ),
     ( 'base-1.2.3/bar.txt', 'bar.txt\n' ),
     ( 'base-1.2.3/baz.png', 'baz.png\n' ),
     ( 'base-1.2.3/baz2.png', 'baz2.png\n' ),
     ( 'base-1.2.3/apple.pdf', 'apple.pdf\n' ),
     ( 'base-1.2.3/kiwi.pdf', 'kiwi.pdf\n' ),
     ( 'base-1.2.3/durian.pdf', 'durian.pdf\n' ),
   ])
   include = [ '*.pdf' ]
   exclude = [ '*kiwi.pdf' ]
   expected_files = [
     'base-1.2.3/apple.pdf',
     'base-1.2.3/durian.pdf',
   ]
   actual_files = self._test_create_with_include_exclude(items, include, exclude)
   self.assertEqual( expected_files, actual_files )
コード例 #19
0
ファイル: test_archive_util.py プロジェクト: reconstruir/bes
 def test_member_checksums(self):
     a = temp_archive.make_temp_archive(temp_archive.make_temp_item_list([
         (self.native_filename('foo-1.2.3/fruits/apple.txt'), 'apple.txt'),
         (self.native_filename('foo-1.2.3/fruits/durian.txt'),
          'durian.txt'),
         (self.native_filename('foo-1.2.3/fruits/kiwi.txt'), 'kiwi.txt'),
     ]),
                                        'zip',
                                        delete=not self.DEBUG)
     self.assertEqual(
         {
             'foo-1.2.3/fruits/apple.txt':
             '7269b27861e2a5ba6947b6279bb5e66b23439d83a65a3c0cf529f5834ed2e7fb',
             'foo-1.2.3/fruits/kiwi.txt':
             'a7be44d9dda7e951298316b34ce84a1b2da8b5e0bead26118145bda4fbca9329',
         },
         archive_util.member_checksums(
             a,
             ['foo-1.2.3/fruits/apple.txt', 'foo-1.2.3/fruits/kiwi.txt']))
コード例 #20
0
  def test_extract_all_with_strip_common_ancestor_and_strip_head(self):
    assert self.default_archive_type

    items = temp_archive.make_temp_item_list([
      ( 'base-1.2.3/foo/apple.txt', 'apple.txt\n' ),
      ( 'base-1.2.3/foo/durian.txt', 'durian.txt\n' ),
      ( 'base-1.2.3/foo/kiwi.txt', 'kiwi.txt\n' ),
      ( 'base-1.2.3/metadata/db.json', '{}\n' ),
    ])
    tmp_archive = self.make_temp_archive_for_reading(items)
    tmp_dir = temp_file.make_temp_dir()
    tmp_archive.extract_all(tmp_dir, strip_common_ancestor = True, strip_head = 'foo')

    actual_files = file_find.find(tmp_dir, relative = True)

    expected_files = [
      'apple.txt',
      'durian.txt',
      'kiwi.txt',
      'metadata/db.json',
    ]

    self.assertEqual( expected_files, actual_files )