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 packages info."""
13 sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
14 import pynacl.working_directory
21 CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
22 TEST_PACKAGES_JSON = os.path.join(CURRENT_DIR, 'test_packages.json')
23 TEST_PLATFORM = 'platform'
24 TEST_ARCH_ALL = 'arch_all'
25 TEST_ARCH_SHARED = 'arch_shared'
26 TEST_ARCH_NON_SHARED = 'arch_non_shared'
27 TEST_EMPTY_PACKAGE_TARGET = 'empty_package_target'
28 TEST_SINGLE_PACKAGE_PACKAGE_TARGET = 'package_1'
29 TEST_MULTI_PACKAGE_PACKAGE_TARGET = 'package_2'
32 class TestRevisionInfo(unittest.TestCase):
35 self._packages = packages_info.PackagesInfo(TEST_PACKAGES_JSON)
37 def test_RevTargetSets(self):
38 # Tests that we can properly set a target revision.
39 package = package_info.PackageInfo()
40 package.AppendArchive(archive_info.ArchiveInfo('test_name', 'hash_value'))
42 revision_desc = revision_info.RevisionInfo(self._packages)
43 revision_desc.SetTargetRevision('test_package', 'package_target', package)
45 self.assertEqual(package, revision_desc.GetPackageInfo('package_target'))
47 def test_RevisionTargetSamePackage(self):
48 # Tests that all the targets must all be the same.
49 package = package_info.PackageInfo()
50 package.AppendArchive(archive_info.ArchiveInfo('test_name', 'hash_value'))
52 revision_desc = revision_info.RevisionInfo(self._packages)
53 revision_desc.SetTargetRevision('test1', 'package_target', package)
57 revision_desc.SetTargetRevision,
63 def test_RevisionFileSaveLoad(self):
64 # Tests that we can properly save and load a revision file.
65 package = package_info.PackageInfo()
66 package.AppendArchive(archive_info.ArchiveInfo('test_name', 'hash_value'))
68 revision = revision_info.RevisionInfo(self._packages)
69 revision.SetRevisionNumber(100)
70 package_targets = self._packages.GetPackageTargetsForPackage(
71 TEST_SINGLE_PACKAGE_PACKAGE_TARGET
76 "Invalid test data, single package package target requires 1 target"
79 revision.SetTargetRevision(
80 TEST_SINGLE_PACKAGE_PACKAGE_TARGET,
85 with pynacl.working_directory.TemporaryWorkingDirectory() as work_dir:
86 revision_file = os.path.join(work_dir, 'test_revision.json')
87 revision.SaveRevisionFile(revision_file)
89 new_revision = revision_info.RevisionInfo(self._packages, revision_file)
91 self.assertEqual(revision, new_revision)
93 def test_RevisionFileRequiresRevisionNumber(self):
94 # Tests that we can properly save and load a revision file.
95 package = package_info.PackageInfo()
96 package.AppendArchive(archive_info.ArchiveInfo('test_name', 'hash_value'))
98 revision = revision_info.RevisionInfo(self._packages)
99 package_targets = self._packages.GetPackageTargetsForPackage(
100 TEST_SINGLE_PACKAGE_PACKAGE_TARGET
102 for package_target in package_targets:
103 revision.SetTargetRevision(
104 TEST_SINGLE_PACKAGE_PACKAGE_TARGET,
109 with pynacl.working_directory.TemporaryWorkingDirectory() as work_dir:
110 revision_file = os.path.join(work_dir, 'test_revision.json')
114 revision.SaveRevisionFile,
118 def test_AlteredRevisionFileFails(self):
119 # Tests that an altered revision file will fail to load.
120 package = package_info.PackageInfo()
121 package.AppendArchive(archive_info.ArchiveInfo('test_name', 'hash_value'))
123 revision = revision_info.RevisionInfo(self._packages)
124 revision.SetRevisionNumber(100)
125 package_targets = self._packages.GetPackageTargetsForPackage(
126 TEST_SINGLE_PACKAGE_PACKAGE_TARGET
128 for package_target in package_targets:
129 revision.SetTargetRevision(
130 TEST_SINGLE_PACKAGE_PACKAGE_TARGET,
135 with pynacl.working_directory.TemporaryWorkingDirectory() as work_dir:
136 revision_file = os.path.join(work_dir, 'altered_revision.json')
137 revision.SaveRevisionFile(revision_file)
139 # Alter the file directly and save it back out
140 with open(revision_file, 'rt') as f:
141 revision_json = json.load(f)
142 revision_json[revision_info.FIELD_REVISION] = 'noise'
143 with open(revision_file, 'wt') as f:
144 json.dump(revision_json, f)
146 new_revision = revision_info.RevisionInfo(self._packages)
149 new_revision.LoadRevisionFile,
153 def test_RevisionFileMustSetAllTargets(self):
154 # Tests that a revision file fails if not all package targets are set.
155 package = package_info.PackageInfo()
156 package.AppendArchive(archive_info.ArchiveInfo('test_name', 'hash_value'))
158 package_targets = self._packages.GetPackageTargetsForPackage(
159 TEST_MULTI_PACKAGE_PACKAGE_TARGET
162 len(package_targets) > 0,
163 'Invalid test data, multiple package targets expected'
166 revision = revision_info.RevisionInfo(self._packages)
167 revision.SetRevisionNumber(100)
168 revision.SetTargetRevision(
169 TEST_MULTI_PACKAGE_PACKAGE_TARGET,
174 with pynacl.working_directory.TemporaryWorkingDirectory() as work_dir:
175 revision_file = os.path.join(work_dir, 'incomplete_revision.json')
178 revision.SaveRevisionFile,
182 def test_RevisionFileSavesForMultiTargets(self):
183 # Tests that a revision successfully saves a multi-package target package.
184 package = package_info.PackageInfo()
185 package.AppendArchive(archive_info.ArchiveInfo('test_name', 'hash_value'))
187 package_targets = self._packages.GetPackageTargetsForPackage(
188 TEST_MULTI_PACKAGE_PACKAGE_TARGET
191 len(package_targets) > 0,
192 'Invalid test data, multiple package targets expected'
195 revision = revision_info.RevisionInfo(self._packages)
196 revision.SetRevisionNumber(100)
197 for package_target in package_targets:
198 revision.SetTargetRevision(
199 TEST_MULTI_PACKAGE_PACKAGE_TARGET,
204 with pynacl.working_directory.TemporaryWorkingDirectory() as work_dir:
205 revision_file = os.path.join(work_dir, 'complete_revision.json')
206 revision.SaveRevisionFile(revision_file)
208 new_revision = revision_info.RevisionInfo(self._packages, revision_file)
210 self.assertEqual(revision, new_revision)
213 if __name__ == '__main__':