aboutsummaryrefslogtreecommitdiff
path: root/infra/cifuzz/filestore/github_actions/github_actions_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'infra/cifuzz/filestore/github_actions/github_actions_test.py')
-rw-r--r--infra/cifuzz/filestore/github_actions/github_actions_test.py110
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())