diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_git_superproject.py | 115 |
1 files changed, 64 insertions, 51 deletions
diff --git a/tests/test_git_superproject.py b/tests/test_git_superproject.py index fc9101dd..d2ee9f4f 100644 --- a/tests/test_git_superproject.py +++ b/tests/test_git_superproject.py | |||
| @@ -19,7 +19,6 @@ import tempfile | |||
| 19 | import unittest | 19 | import unittest |
| 20 | from unittest import mock | 20 | from unittest import mock |
| 21 | 21 | ||
| 22 | from error import GitError | ||
| 23 | import git_superproject | 22 | import git_superproject |
| 24 | import manifest_xml | 23 | import manifest_xml |
| 25 | import platform_utils | 24 | import platform_utils |
| @@ -32,7 +31,6 @@ class SuperprojectTestCase(unittest.TestCase): | |||
| 32 | """Set up superproject every time.""" | 31 | """Set up superproject every time.""" |
| 33 | self.tempdir = tempfile.mkdtemp(prefix='repo_tests') | 32 | self.tempdir = tempfile.mkdtemp(prefix='repo_tests') |
| 34 | self.repodir = os.path.join(self.tempdir, '.repo') | 33 | self.repodir = os.path.join(self.tempdir, '.repo') |
| 35 | self._superproject = git_superproject.Superproject(self.repodir) | ||
| 36 | self.manifest_file = os.path.join( | 34 | self.manifest_file = os.path.join( |
| 37 | self.repodir, manifest_xml.MANIFEST_FILE_NAME) | 35 | self.repodir, manifest_xml.MANIFEST_FILE_NAME) |
| 38 | os.mkdir(self.repodir) | 36 | os.mkdir(self.repodir) |
| @@ -45,6 +43,16 @@ class SuperprojectTestCase(unittest.TestCase): | |||
| 45 | url = https://localhost:0/manifest | 43 | url = https://localhost:0/manifest |
| 46 | """) | 44 | """) |
| 47 | 45 | ||
| 46 | manifest = self.getXmlManifest(""" | ||
| 47 | <manifest> | ||
| 48 | <remote name="default-remote" fetch="http://localhost" /> | ||
| 49 | <default remote="default-remote" revision="refs/heads/main" /> | ||
| 50 | <superproject name="superproject"/> | ||
| 51 | <project path="art" name="platform/art" /> | ||
| 52 | </manifest> | ||
| 53 | """) | ||
| 54 | self._superproject = git_superproject.Superproject(manifest, self.repodir) | ||
| 55 | |||
| 48 | def tearDown(self): | 56 | def tearDown(self): |
| 49 | """Tear down superproject every time.""" | 57 | """Tear down superproject every time.""" |
| 50 | platform_utils.rmtree(self.tempdir) | 58 | platform_utils.rmtree(self.tempdir) |
| @@ -55,37 +63,53 @@ class SuperprojectTestCase(unittest.TestCase): | |||
| 55 | fp.write(data) | 63 | fp.write(data) |
| 56 | return manifest_xml.XmlManifest(self.repodir, self.manifest_file) | 64 | return manifest_xml.XmlManifest(self.repodir, self.manifest_file) |
| 57 | 65 | ||
| 58 | def test_superproject_get_project_shas_no_url(self): | 66 | def test_superproject_get_superproject_no_superproject(self): |
| 59 | """Test with no url.""" | 67 | """Test with no url.""" |
| 60 | with self.assertRaises(ValueError): | 68 | manifest = self.getXmlManifest(""" |
| 61 | self._superproject._GetAllProjectsSHAs(url=None) | 69 | <manifest> |
| 70 | </manifest> | ||
| 71 | """) | ||
| 72 | superproject = git_superproject.Superproject(manifest, self.repodir) | ||
| 73 | self.assertFalse(superproject.Sync()) | ||
| 62 | 74 | ||
| 63 | def test_superproject_get_project_shas_invalid_url(self): | 75 | def test_superproject_get_superproject_invalid_url(self): |
| 64 | """Test with an invalid url.""" | 76 | """Test with an invalid url.""" |
| 65 | with self.assertRaises(GitError): | 77 | manifest = self.getXmlManifest(""" |
| 66 | self._superproject._GetAllProjectsSHAs(url='localhost') | 78 | <manifest> |
| 79 | <remote name="test-remote" fetch="localhost" /> | ||
| 80 | <default remote="test-remote" revision="refs/heads/main" /> | ||
| 81 | <superproject name="superproject"/> | ||
| 82 | </manifest> | ||
| 83 | """) | ||
| 84 | superproject = git_superproject.Superproject(manifest, self.repodir) | ||
| 85 | self.assertFalse(superproject.Sync()) | ||
| 67 | 86 | ||
| 68 | def test_superproject_get_project_shas_invalid_branch(self): | 87 | def test_superproject_get_superproject_invalid_branch(self): |
| 69 | """Test with an invalid branch.""" | 88 | """Test with an invalid branch.""" |
| 70 | with self.assertRaises(GitError): | 89 | manifest = self.getXmlManifest(""" |
| 71 | self._superproject._GetAllProjectsSHAs( | 90 | <manifest> |
| 72 | url='sso://android/platform/superproject', | 91 | <remote name="test-remote" fetch="localhost" /> |
| 73 | branch='junk') | 92 | <default remote="test-remote" revision="refs/heads/main" /> |
| 93 | <superproject name="superproject"/> | ||
| 94 | </manifest> | ||
| 95 | """) | ||
| 96 | superproject = git_superproject.Superproject(manifest, self.repodir) | ||
| 97 | with mock.patch.object(self._superproject, '_GetBranch', return_value='junk'): | ||
| 98 | self.assertFalse(superproject.Sync()) | ||
| 74 | 99 | ||
| 75 | def test_superproject_get_project_shas_mock_clone(self): | 100 | def test_superproject_get_superproject_mock_clone(self): |
| 76 | """Test with _Clone failing.""" | 101 | """Test with _Clone failing.""" |
| 77 | with self.assertRaises(GitError): | 102 | with mock.patch.object(self._superproject, '_Clone', return_value=False): |
| 78 | with mock.patch.object(self._superproject, '_Clone', return_value=False): | 103 | self.assertFalse(self._superproject.Sync()) |
| 79 | self._superproject._GetAllProjectsSHAs(url='localhost') | 104 | |
| 80 | 105 | def test_superproject_get_superproject_mock_fetch(self): | |
| 81 | def test_superproject_get_project_shas_mock_fetch(self): | 106 | """Test with _Fetch failing and _clone being called.""" |
| 82 | """Test with _Fetch failing.""" | 107 | with mock.patch.object(self._superproject, '_Clone', return_value=True): |
| 83 | with self.assertRaises(GitError): | 108 | os.mkdir(self._superproject._superproject_path) |
| 84 | with mock.patch.object(self._superproject, '_Clone', return_value=True): | 109 | with mock.patch.object(self._superproject, '_Fetch', return_value=False): |
| 85 | with mock.patch.object(self._superproject, '_Fetch', return_value=False): | 110 | self.assertTrue(self._superproject.Sync()) |
| 86 | self._superproject._GetAllProjectsSHAs(url='localhost') | 111 | |
| 87 | 112 | def test_superproject_get_all_project_commit_ids_mock_ls_tree(self): | |
| 88 | def test_superproject_get_project_shas_mock_ls_tree(self): | ||
| 89 | """Test with LsTree being a mock.""" | 113 | """Test with LsTree being a mock.""" |
| 90 | data = ('120000 blob 158258bdf146f159218e2b90f8b699c4d85b5804\tAndroid.bp\x00' | 114 | data = ('120000 blob 158258bdf146f159218e2b90f8b699c4d85b5804\tAndroid.bp\x00' |
| 91 | '160000 commit 2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea\tart\x00' | 115 | '160000 commit 2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea\tart\x00' |
| @@ -94,8 +118,8 @@ class SuperprojectTestCase(unittest.TestCase): | |||
| 94 | '160000 commit ade9b7a0d874e25fff4bf2552488825c6f111928\tbuild/bazel\x00') | 118 | '160000 commit ade9b7a0d874e25fff4bf2552488825c6f111928\tbuild/bazel\x00') |
| 95 | with mock.patch.object(self._superproject, '_Clone', return_value=True): | 119 | with mock.patch.object(self._superproject, '_Clone', return_value=True): |
| 96 | with mock.patch.object(self._superproject, '_LsTree', return_value=data): | 120 | with mock.patch.object(self._superproject, '_LsTree', return_value=data): |
| 97 | shas = self._superproject._GetAllProjectsSHAs(url='localhost', branch='junk') | 121 | commit_ids = self._superproject._GetAllProjectsCommitIds() |
| 98 | self.assertEqual(shas, { | 122 | self.assertEqual(commit_ids, { |
| 99 | 'art': '2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea', | 123 | 'art': '2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea', |
| 100 | 'bootable/recovery': 'e9d25da64d8d365dbba7c8ee00fe8c4473fe9a06', | 124 | 'bootable/recovery': 'e9d25da64d8d365dbba7c8ee00fe8c4473fe9a06', |
| 101 | 'build/bazel': 'ade9b7a0d874e25fff4bf2552488825c6f111928' | 125 | 'build/bazel': 'ade9b7a0d874e25fff4bf2552488825c6f111928' |
| @@ -103,19 +127,12 @@ class SuperprojectTestCase(unittest.TestCase): | |||
| 103 | 127 | ||
| 104 | def test_superproject_write_manifest_file(self): | 128 | def test_superproject_write_manifest_file(self): |
| 105 | """Test with writing manifest to a file after setting revisionId.""" | 129 | """Test with writing manifest to a file after setting revisionId.""" |
| 106 | manifest = self.getXmlManifest(""" | 130 | self.assertEqual(len(self._superproject._manifest.projects), 1) |
| 107 | <manifest> | 131 | project = self._superproject._manifest.projects[0] |
| 108 | <remote name="default-remote" fetch="http://localhost" /> | ||
| 109 | <default remote="default-remote" revision="refs/heads/main" /> | ||
| 110 | <project name="test-name"/> | ||
| 111 | </manifest> | ||
| 112 | """) | ||
| 113 | self.assertEqual(len(manifest.projects), 1) | ||
| 114 | project = manifest.projects[0] | ||
| 115 | project.SetRevisionId('ABCDEF') | 132 | project.SetRevisionId('ABCDEF') |
| 116 | # Create temporary directory so that it can write the file. | 133 | # Create temporary directory so that it can write the file. |
| 117 | os.mkdir(self._superproject._superproject_path) | 134 | os.mkdir(self._superproject._superproject_path) |
| 118 | manifest_path = self._superproject._WriteManfiestFile(manifest) | 135 | manifest_path = self._superproject._WriteManfiestFile() |
| 119 | self.assertIsNotNone(manifest_path) | 136 | self.assertIsNotNone(manifest_path) |
| 120 | with open(manifest_path, 'r') as fp: | 137 | with open(manifest_path, 'r') as fp: |
| 121 | manifest_xml = fp.read() | 138 | manifest_xml = fp.read() |
| @@ -124,29 +141,24 @@ class SuperprojectTestCase(unittest.TestCase): | |||
| 124 | '<?xml version="1.0" ?><manifest>' + | 141 | '<?xml version="1.0" ?><manifest>' + |
| 125 | '<remote name="default-remote" fetch="http://localhost"/>' + | 142 | '<remote name="default-remote" fetch="http://localhost"/>' + |
| 126 | '<default remote="default-remote" revision="refs/heads/main"/>' + | 143 | '<default remote="default-remote" revision="refs/heads/main"/>' + |
| 127 | '<project name="test-name" revision="ABCDEF"/>' + | 144 | '<project name="platform/art" path="art" revision="ABCDEF"/>' + |
| 145 | '<superproject name="superproject"/>' + | ||
| 128 | '</manifest>') | 146 | '</manifest>') |
| 129 | 147 | ||
| 130 | def test_superproject_update_project_revision_id(self): | 148 | def test_superproject_update_project_revision_id(self): |
| 131 | """Test with LsTree being a mock.""" | 149 | """Test with LsTree being a mock.""" |
| 132 | manifest = self.getXmlManifest(""" | 150 | self.assertEqual(len(self._superproject._manifest.projects), 1) |
| 133 | <manifest> | 151 | projects = self._superproject._manifest.projects |
| 134 | <remote name="default-remote" fetch="http://localhost" /> | ||
| 135 | <default remote="default-remote" revision="refs/heads/main" /> | ||
| 136 | <project path="art" name="platform/art" /> | ||
| 137 | </manifest> | ||
| 138 | """) | ||
| 139 | self.assertEqual(len(manifest.projects), 1) | ||
| 140 | projects = manifest.projects | ||
| 141 | data = ('160000 commit 2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea\tart\x00' | 152 | data = ('160000 commit 2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea\tart\x00' |
| 142 | '160000 commit e9d25da64d8d365dbba7c8ee00fe8c4473fe9a06\tbootable/recovery\x00') | 153 | '160000 commit e9d25da64d8d365dbba7c8ee00fe8c4473fe9a06\tbootable/recovery\x00') |
| 143 | with mock.patch.object(self._superproject, '_Clone', return_value=True): | 154 | with mock.patch.object(self._superproject, '_Clone', return_value=True): |
| 144 | with mock.patch.object(self._superproject, '_Fetch', return_value=True): | 155 | with mock.patch.object(self._superproject, '_Fetch', return_value=True): |
| 145 | with mock.patch.object(self._superproject, '_LsTree', return_value=data): | 156 | with mock.patch.object(self._superproject, |
| 157 | '_LsTree', | ||
| 158 | return_value=data): | ||
| 146 | # Create temporary directory so that it can write the file. | 159 | # Create temporary directory so that it can write the file. |
| 147 | os.mkdir(self._superproject._superproject_path) | 160 | os.mkdir(self._superproject._superproject_path) |
| 148 | manifest_path = self._superproject.UpdateProjectsRevisionId( | 161 | manifest_path = self._superproject.UpdateProjectsRevisionId(projects) |
| 149 | manifest, projects, url='localhost') | ||
| 150 | self.assertIsNotNone(manifest_path) | 162 | self.assertIsNotNone(manifest_path) |
| 151 | with open(manifest_path, 'r') as fp: | 163 | with open(manifest_path, 'r') as fp: |
| 152 | manifest_xml = fp.read() | 164 | manifest_xml = fp.read() |
| @@ -157,6 +169,7 @@ class SuperprojectTestCase(unittest.TestCase): | |||
| 157 | '<default remote="default-remote" revision="refs/heads/main"/>' + | 169 | '<default remote="default-remote" revision="refs/heads/main"/>' + |
| 158 | '<project name="platform/art" path="art" ' + | 170 | '<project name="platform/art" path="art" ' + |
| 159 | 'revision="2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea"/>' + | 171 | 'revision="2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea"/>' + |
| 172 | '<superproject name="superproject"/>' + | ||
| 160 | '</manifest>') | 173 | '</manifest>') |
| 161 | 174 | ||
| 162 | 175 | ||
