diff options
Diffstat (limited to 'infra/cifuzz/filestore/github_actions/github_actions_test.py')
-rw-r--r-- | infra/cifuzz/filestore/github_actions/github_actions_test.py | 110 |
1 files changed, 79 insertions, 31 deletions
diff --git a/infra/cifuzz/filestore/github_actions/github_actions_test.py b/infra/cifuzz/filestore/github_actions/github_actions_test.py index d3a69ac91..1c5610f29 100644 --- a/infra/cifuzz/filestore/github_actions/github_actions_test.py +++ b/infra/cifuzz/filestore/github_actions/github_actions_test.py @@ -44,9 +44,8 @@ class GithubActionsFilestoreTest(fake_filesystem_unittest.TestCase): self.repo = 'examplerepo' os.environ['GITHUB_REPOSITORY'] = f'{self.owner}/{self.repo}' self.config = test_helpers.create_run_config(github_token=self.github_token) - self.artifact_name = 'corpus' - self.corpus_dir = '/corpus-dir' - self.testcase = os.path.join(self.corpus_dir, 'testcase') + self.local_dir = '/local-dir' + self.testcase = os.path.join(self.local_dir, 'testcase') def _get_expected_http_headers(self): return { @@ -67,15 +66,15 @@ class GithubActionsFilestoreTest(fake_filesystem_unittest.TestCase): return_value=None) @mock.patch('filestore.github_actions.github_api.find_artifact', return_value=None) - def test_download_latest_build_no_artifact(self, _, __, mocked_warning): - """Tests that download_latest_build returns None and doesn't exception when + def test_download_build_no_artifact(self, _, __, mocked_warning): + """Tests that download_build returns None and doesn't exception when find_artifact can't find an artifact.""" filestore = github_actions.GithubActionsFilestore(self.config) - name = 'build-name' + name = 'name' build_dir = 'build-dir' - self.assertFalse(filestore.download_latest_build(name, build_dir)) + self.assertFalse(filestore.download_build(name, build_dir)) mocked_warning.assert_called_with('Could not download artifact: %s.', - 'cifuzz-' + name) + 'cifuzz-build-' + name) @mock.patch('logging.warning') @mock.patch('filestore.github_actions.GithubActionsFilestore._list_artifacts', @@ -86,35 +85,86 @@ class GithubActionsFilestoreTest(fake_filesystem_unittest.TestCase): """Tests that download_corpus_build returns None and doesn't exception when find_artifact can't find an artifact.""" filestore = github_actions.GithubActionsFilestore(self.config) - name = 'corpus-name' - dst_dir = 'corpus-dir' + name = 'name' + dst_dir = 'local-dir' self.assertFalse(filestore.download_corpus(name, dst_dir)) mocked_warning.assert_called_with('Could not download artifact: %s.', - 'cifuzz-' + name) + 'cifuzz-corpus-' + name) @mock.patch('filestore.github_actions.tar_directory') @mock.patch('third_party.github_actions_toolkit.artifact.artifact_client' '.upload_artifact') - def test_upload_directory(self, mocked_upload_artifact, mocked_tar_directory): - """Tests that upload_directory invokes tar_directory and - artifact_client.upload_artifact properly.""" - self._create_corpus_dir() + def test_upload_corpus(self, mocked_upload_artifact, mocked_tar_directory): + """Test uploading corpus.""" + self._create_local_dir() + + def mock_tar_directory(_, archive_path): + self.fs.create_file(archive_path) + + mocked_tar_directory.side_effect = mock_tar_directory + + filestore = github_actions.GithubActionsFilestore(self.config) + filestore.upload_corpus('target', self.local_dir) + self.assert_upload(mocked_upload_artifact, mocked_tar_directory, + 'corpus-target') + + @mock.patch('third_party.github_actions_toolkit.artifact.artifact_client' + '.upload_artifact') + def test_upload_crashes(self, mocked_upload_artifact): + """Test uploading crashes.""" + self._create_local_dir() + + filestore = github_actions.GithubActionsFilestore(self.config) + filestore.upload_crashes('current', self.local_dir) + mocked_upload_artifact.assert_has_calls( + [mock.call('crashes-current', ['/local-dir/testcase'], '/local-dir')]) + + @mock.patch('filestore.github_actions.tar_directory') + @mock.patch('third_party.github_actions_toolkit.artifact.artifact_client' + '.upload_artifact') + def test_upload_build(self, mocked_upload_artifact, mocked_tar_directory): + """Test uploading build.""" + self._create_local_dir() + + def mock_tar_directory(_, archive_path): + self.fs.create_file(archive_path) + + mocked_tar_directory.side_effect = mock_tar_directory + + filestore = github_actions.GithubActionsFilestore(self.config) + filestore.upload_build('sanitizer', self.local_dir) + self.assert_upload(mocked_upload_artifact, mocked_tar_directory, + 'build-sanitizer') + + @mock.patch('filestore.github_actions.tar_directory') + @mock.patch('third_party.github_actions_toolkit.artifact.artifact_client' + '.upload_artifact') + def test_upload_coverage(self, mocked_upload_artifact, mocked_tar_directory): + """Test uploading coverage.""" + self._create_local_dir() def mock_tar_directory(_, archive_path): self.fs.create_file(archive_path) mocked_tar_directory.side_effect = mock_tar_directory + filestore = github_actions.GithubActionsFilestore(self.config) - filestore.upload_directory(self.artifact_name, self.corpus_dir) + filestore.upload_coverage('latest', self.local_dir) + self.assert_upload(mocked_upload_artifact, mocked_tar_directory, + 'coverage-latest') + def assert_upload(self, mocked_upload_artifact, mocked_tar_directory, + expected_artifact_name): + """Tests that upload_directory invokes tar_directory and + artifact_client.upload_artifact properly.""" # Don't assert what second argument will be since it's a temporary # directory. self.assertEqual(mocked_tar_directory.call_args_list[0][0][0], - self.corpus_dir) + self.local_dir) # Don't assert what second and third arguments will be since they are # temporary directories. - expected_artifact_name = 'cifuzz-' + self.artifact_name + expected_artifact_name = 'cifuzz-' + expected_artifact_name self.assertEqual(mocked_upload_artifact.call_args_list[0][0][0], expected_artifact_name) @@ -124,7 +174,7 @@ class GithubActionsFilestoreTest(fake_filesystem_unittest.TestCase): self.assertEqual(os.path.basename(artifacts_list[0]), expected_artifact_name + '.tar') - def _create_corpus_dir(self): + def _create_local_dir(self): """Sets up pyfakefs and creates a corpus directory containing self.testcase.""" self.setUpPyfakefs() @@ -138,16 +188,16 @@ class GithubActionsFilestoreTest(fake_filesystem_unittest.TestCase): artifact_download_url = 'http://example.com/download' artifact_listing = { 'expired': False, - 'name': self.artifact_name, + 'name': 'corpus', 'archive_download_url': artifact_download_url } mocked_find_artifact.return_value = artifact_listing - self._create_corpus_dir() + self._create_local_dir() with tempfile.TemporaryDirectory() as temp_dir: # Create a tarball. - archive_path = os.path.join(temp_dir, f'cifuzz-{self.artifact_name}.tar') - github_actions.tar_directory(self.corpus_dir, archive_path) + archive_path = os.path.join(temp_dir, 'cifuzz-corpus.tar') + github_actions.tar_directory(self.local_dir, archive_path) artifact_download_dst_dir = os.path.join(temp_dir, 'dst') os.mkdir(artifact_download_dst_dir) @@ -165,9 +215,8 @@ class GithubActionsFilestoreTest(fake_filesystem_unittest.TestCase): mocked_download_and_unpack_zip.side_effect = mock_download_and_unpack_zip filestore = github_actions.GithubActionsFilestore(self.config) self.assertTrue( - filestore._download_artifact(self.artifact_name, - artifact_download_dst_dir)) - mocked_find_artifact.assert_called_with(f'cifuzz-{self.artifact_name}') + filestore._download_artifact('corpus', artifact_download_dst_dir)) + mocked_find_artifact.assert_called_with('cifuzz-corpus') self.assertTrue( os.path.exists( os.path.join(artifact_download_dst_dir, @@ -183,17 +232,17 @@ class GithubActionsFilestoreTest(fake_filesystem_unittest.TestCase): } artifact_listing_2 = { 'expired': False, - 'name': self.artifact_name, + 'name': 'artifact', 'archive_download_url': 'http://download2' } artifact_listing_3 = { 'expired': True, - 'name': self.artifact_name, + 'name': 'artifact', 'archive_download_url': 'http://download3' } artifact_listing_4 = { 'expired': False, - 'name': self.artifact_name, + 'name': 'artifact', 'archive_download_url': 'http://download4' } artifacts = [ @@ -204,8 +253,7 @@ class GithubActionsFilestoreTest(fake_filesystem_unittest.TestCase): filestore = github_actions.GithubActionsFilestore(self.config) # Test that find_artifact will return the most recent unexpired artifact # with the correct name. - self.assertEqual(filestore._find_artifact(self.artifact_name), - artifact_listing_2) + self.assertEqual(filestore._find_artifact('artifact'), artifact_listing_2) mocked_list_artifacts.assert_called_with(self.owner, self.repo, self._get_expected_http_headers()) |