Ejemplo n.º 1
0
 def test_bb_not_implemented(self):
     """Ensure NotImplementedError raised for Bitbucket."""
     evidence = RepoMetadataEvidence('bb_foo.json', 'bar')
     evidence.set_content('{"matters": "not"}')
     gl_err_msg = 'Support for Bitbucket coming soon...'
     with self.assertRaises(NotImplementedError) as rs:
         _ = evidence.repo_size
     self.assertEqual(str(rs.exception), gl_err_msg)
 def test_metadata_integrity(self):
     """Check whether the repo details have unexpectedly changed."""
     locker_urls = self.config.get(
         'org.auditree.locker_integrity.repos',
         self.config.get('org.auditree.repo_integrity.repos',
                         [self.config.get('locker.repo_url')]))
     for locker_url in locker_urls:
         parsed = urlparse(locker_url)
         service = 'gh'
         if 'gitlab' in parsed.hostname:
             service = 'gl'
         elif 'bitbucket' in parsed.hostname:
             service = 'bb'
         repo = parsed.path.strip('/')
         filename = [
             service,
             repo.lower().replace('/', '_').replace('-', '_'),
             'repo_metadata.json'
         ]
         path = f'raw/auditree/{"_".join(filename)}'
         with evidences(self, path) as raw:
             evidence_found = True
             previous_dt = datetime.utcnow() - timedelta(days=1)
             try:
                 previous_raw = self.get_historical_evidence(
                     path, previous_dt)
             except ValueError:
                 self.add_failures(
                     'Locker Repository Metadata - (No prior evidence)',
                     ('No prior evidence found on or prior '
                      f'to {previous_dt.strftime("%b %d, %Y")} '
                      f'for locker `{locker_url}`.'))
                 evidence_found = False
             if evidence_found:
                 current = RepoMetadataEvidence.from_evidence(raw)
                 prev = RepoMetadataEvidence.from_evidence(previous_raw)
                 if current.repo_size < prev.repo_size:
                     self.add_warnings(
                         'Locker Repository Metadata - (Locker shrunk)',
                         (f'Locker `{locker_url}` appears to have '
                          'shrunk in size/content.  It was '
                          f'{str(prev.repo_size)} and is '
                          f'now {str(current.repo_size)}.'))
                 difference = ''.join(
                     context_diff(
                         prev.filtered_content.splitlines(keepends=True),
                         current.filtered_content.splitlines(keepends=True),
                         path, path, previous_dt.strftime('%b %d, %Y'),
                         datetime.utcnow().strftime('%b %d, %Y')))
                 if difference:
                     self.add_failures(
                         'Locker Repository Metadata - (Metadata changed)',
                         (f'Locker `{locker_url}` details have changed.'
                          f'\n\n```\n{difference}\n```\n'))
 def fetch_gh_repo_details(self):
     """Fetch Github repository metadata."""
     repo_urls = self.config.get('org.auditree.repo_integrity.repos',
                                 [self.config.get('locker.repo_url')])
     current_url = None
     github = None
     for repo_url in repo_urls:
         parsed = urlparse(repo_url)
         base_url = f'{parsed.scheme}://{parsed.hostname}'
         repo = parsed.path.strip('/')
         file_prefix = repo.lower().replace('/', '_').replace('-', '_')
         path = ['auditree', f'gh_{file_prefix}_repo_metadata.json']
         if base_url != current_url:
             github = Github(self.config.creds, base_url)
             current_url = base_url
         self.config.add_evidences([
             RepoMetadataEvidence(path[1], path[0], DAY,
                                  f'Github {repo} repo metadata details')
         ])
         with raw_evidence(self.locker, os.path.join(*path)) as evidence:
             if evidence:
                 evidence.set_content(
                     json.dumps(github.get_repo_details(repo)))
Ejemplo n.º 4
0
 def test_filtered_content(self):
     """Ensure all IGNORED_REPO_METADATA fields are parsed out."""
     evidence = RepoMetadataEvidence('gh_foo.json', 'bar')
     evidence.set_content(
         open('./test/fixtures/gh_repo_metadata.json').read())
     self.assertEqual(json.loads(evidence.filtered_content), {'foo': 'bar'})
Ejemplo n.º 5
0
 def test_repo_size(self):
     """Ensure repo size is returned."""
     evidence = RepoMetadataEvidence('gh_foo.json', 'bar')
     evidence.set_content(
         open('./test/fixtures/gh_repo_metadata.json').read())
     self.assertEqual(evidence.repo_size, 12345)
Ejemplo n.º 6
0
 def test_no_content(self):
     """Ensure properties requiring content return None when no content."""
     evidence = RepoMetadataEvidence('gh_foo.json', 'bar')
     self.assertIsNone(evidence.repo_size)
     self.assertIsNone(evidence.filtered_content)