Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / native_client / build / package_version / revision_info_test.py
1 #!/usr/bin/python
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.
5
6 """Tests for packages info."""
7
8 import json
9 import os
10 import sys
11 import unittest
12
13 sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
14 import pynacl.working_directory
15
16 import archive_info
17 import package_info
18 import packages_info
19 import revision_info
20
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'
30
31
32 class TestRevisionInfo(unittest.TestCase):
33
34   def setUp(self):
35     self._packages = packages_info.PackagesInfo(TEST_PACKAGES_JSON)
36
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'))
41
42     revision_desc = revision_info.RevisionInfo(self._packages)
43     revision_desc.SetTargetRevision('test_package', 'package_target', package)
44
45     self.assertEqual(package, revision_desc.GetPackageInfo('package_target'))
46
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'))
51
52     revision_desc = revision_info.RevisionInfo(self._packages)
53     revision_desc.SetTargetRevision('test1', 'package_target', package)
54
55     self.assertRaises(
56         RuntimeError,
57         revision_desc.SetTargetRevision,
58         'test2',
59         'package_target',
60         package
61     )
62
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'))
67
68     revision = revision_info.RevisionInfo(self._packages)
69     revision.SetRevisionNumber(100)
70     package_targets = self._packages.GetPackageTargetsForPackage(
71         TEST_SINGLE_PACKAGE_PACKAGE_TARGET
72     )
73     self.assertEqual(
74         1,
75         len(package_targets),
76         "Invalid test data, single package package target requires 1 target"
77     )
78
79     revision.SetTargetRevision(
80         TEST_SINGLE_PACKAGE_PACKAGE_TARGET,
81         package_targets[0],
82         package
83     )
84
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)
88
89       new_revision = revision_info.RevisionInfo(self._packages, revision_file)
90
91     self.assertEqual(revision, new_revision)
92
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'))
97
98     revision = revision_info.RevisionInfo(self._packages)
99     package_targets = self._packages.GetPackageTargetsForPackage(
100         TEST_SINGLE_PACKAGE_PACKAGE_TARGET
101     )
102     for package_target in package_targets:
103       revision.SetTargetRevision(
104           TEST_SINGLE_PACKAGE_PACKAGE_TARGET,
105           package_target,
106           package
107       )
108
109     with pynacl.working_directory.TemporaryWorkingDirectory() as work_dir:
110       revision_file = os.path.join(work_dir, 'test_revision.json')
111
112       self.assertRaises(
113           RuntimeError,
114           revision.SaveRevisionFile,
115           revision_file
116       )
117
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'))
122
123     revision = revision_info.RevisionInfo(self._packages)
124     revision.SetRevisionNumber(100)
125     package_targets = self._packages.GetPackageTargetsForPackage(
126         TEST_SINGLE_PACKAGE_PACKAGE_TARGET
127     )
128     for package_target in package_targets:
129       revision.SetTargetRevision(
130           TEST_SINGLE_PACKAGE_PACKAGE_TARGET,
131           package_target,
132           package
133       )
134
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)
138
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)
145
146       new_revision = revision_info.RevisionInfo(self._packages)
147       self.assertRaises(
148           IOError,
149           new_revision.LoadRevisionFile,
150           revision_file
151       )
152
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'))
157
158     package_targets = self._packages.GetPackageTargetsForPackage(
159         TEST_MULTI_PACKAGE_PACKAGE_TARGET
160     )
161     self.assertTrue(
162         len(package_targets) > 0,
163         'Invalid test data, multiple package targets expected'
164     )
165
166     revision = revision_info.RevisionInfo(self._packages)
167     revision.SetRevisionNumber(100)
168     revision.SetTargetRevision(
169         TEST_MULTI_PACKAGE_PACKAGE_TARGET,
170         package_targets[0],
171         package
172     )
173
174     with pynacl.working_directory.TemporaryWorkingDirectory() as work_dir:
175       revision_file = os.path.join(work_dir, 'incomplete_revision.json')
176       self.assertRaises(
177           RuntimeError,
178           revision.SaveRevisionFile,
179           revision_file
180       )
181
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'))
186
187     package_targets = self._packages.GetPackageTargetsForPackage(
188         TEST_MULTI_PACKAGE_PACKAGE_TARGET
189     )
190     self.assertTrue(
191         len(package_targets) > 0,
192         'Invalid test data, multiple package targets expected'
193     )
194
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,
200           package_target,
201           package
202       )
203
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)
207
208       new_revision = revision_info.RevisionInfo(self._packages, revision_file)
209
210     self.assertEqual(revision, new_revision)
211
212
213 if __name__ == '__main__':
214   unittest.main()