2 # Copyright (c) 2014 The Native Client Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
6 """Tests for package info."""
13 sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
14 import pynacl.working_directory
20 class TestPackageInfo(unittest.TestCase):
22 def test_AddArchive(self):
23 # Check that we can successfully add an archive.
24 archive_name = 'test_archive'
25 archive_hash = 'test_archive_hash'
26 archive_url = 'test_archive_url'
27 tar_src_dir = 'test_archive_dir'
28 extract_dir = 'test_extraction_dir'
30 package = package_info.PackageInfo()
31 archive = archive_info.ArchiveInfo(name=archive_name,
34 tar_src_dir=tar_src_dir,
35 extract_dir=extract_dir)
36 package.AppendArchive(archive)
38 archive_list = package.GetArchiveList()
40 self.assertEqual(len(archive_list), 1)
41 archive_item = archive_list[0].GetArchiveData()
42 self.assertEqual(archive_item.name, archive_name)
43 self.assertEqual(archive_item.hash, archive_hash)
44 self.assertEqual(archive_item.url, archive_url)
45 self.assertEqual(archive_item.tar_src_dir, tar_src_dir)
46 self.assertEqual(archive_item.extract_dir, extract_dir)
48 def test_ClearArchiveListClearsEverything(self):
49 # Check that clear archive list actually clears everything
50 package1 = package_info.PackageInfo()
51 archive1 = archive_info.ArchiveInfo(name='name',
54 tar_src_dir='tar_src_dir',
55 extract_dir='extract_dir')
56 package1.AppendArchive(archive1)
57 package1.ClearArchiveList()
59 # Test to be sure the archive list is clear.
60 self.assertEqual(len(package1.GetArchiveList()), 0)
62 # Test to be sure the state is equal to an empty PackageInfo.
63 package2 = package_info.PackageInfo()
64 self.assertEqual(package1, package2)
66 def test_OrderIndependentEquality(self):
67 # Check that order does not matter when adding multiple archives.
68 arch_name1 = 'archive1.tar'
69 arch_name2 = 'archive2.tar'
70 arch_hash1 = 'archive_hash1'
71 arch_hash2 = 'archive_hash2'
73 package1 = package_info.PackageInfo()
74 package1.AppendArchive(archive_info.ArchiveInfo(name=arch_name1,
76 package1.AppendArchive(archive_info.ArchiveInfo(name=arch_name2,
79 package2 = package_info.PackageInfo()
80 package2.AppendArchive(archive_info.ArchiveInfo(name=arch_name2,
82 package2.AppendArchive(archive_info.ArchiveInfo(name=arch_name1,
85 self.assertEqual(len(package1.GetArchiveList()), 2)
86 self.assertEqual(len(package2.GetArchiveList()), 2)
87 self.assertEqual(package1, package2)
89 def test_PackageLoadJsonList(self):
90 # Check if we can successfully load a list of archive.
91 arch_name1 = 'archive_item1.tar'
92 arch_name2 = 'archive_item2.tar'
93 arch_hash1 = 'archive_item_hash1'
94 arch_hash2 = 'archive_item_hash2'
96 mast_package = package_info.PackageInfo()
97 mast_package.AppendArchive(archive_info.ArchiveInfo(name=arch_name1,
99 mast_package.AppendArchive(archive_info.ArchiveInfo(name=arch_name2,
101 json_data = mast_package.DumpPackageJson()
103 constructed_package = package_info.PackageInfo(json_data)
104 loaded_package = package_info.PackageInfo()
105 loaded_package.LoadPackageFile(json_data)
107 self.assertEqual(mast_package, constructed_package)
108 self.assertEqual(mast_package, loaded_package)
110 def test_PackageSaveLoadFile(self):
111 # Check if we can save/load a package file and retain it's values.
112 arch_name1 = 'archive_saveload1.tar'
113 arch_name2 = 'archive_saveload2.tar'
114 arch_hash1 = 'archive_saveload_hash1'
115 arch_hash2 = 'archive_saveload_hash2'
117 mast_package = package_info.PackageInfo()
118 mast_package.AppendArchive(archive_info.ArchiveInfo(name=arch_name1,
120 mast_package.AppendArchive(archive_info.ArchiveInfo(name=arch_name2,
123 with pynacl.working_directory.TemporaryWorkingDirectory() as work_dir:
124 package_file = os.path.join(work_dir, 'test_package.json')
125 mast_package.SavePackageFile(package_file)
127 constructed_package = package_info.PackageInfo(package_file)
128 loaded_package = package_info.PackageInfo()
129 loaded_package.LoadPackageFile(package_file)
131 self.assertEqual(mast_package, constructed_package)
132 self.assertEqual(mast_package, loaded_package)
134 def test_PackageJsonDumpLoad(self):
135 # Check if Json from DumpPackageJson() represents a package correctly.
136 arch_name1 = 'archive_json1.tar'
137 arch_name2 = 'archive_json2.tar'
138 arch_hash1 = 'archive_json_hash1'
139 arch_hash2 = 'archive_json_hash2'
141 mast_package = package_info.PackageInfo()
142 mast_package.AppendArchive(archive_info.ArchiveInfo(name=arch_name1,
144 mast_package.AppendArchive(archive_info.ArchiveInfo(name=arch_name2,
147 json_package = package_info.PackageInfo(mast_package.DumpPackageJson())
148 self.assertEqual(mast_package, json_package)
151 if __name__ == '__main__':