def test_register_with_full_commit(self, client, **kwargs): git_commit = Commit( repository_id='safari', branch='main', id='8eba280e32daaf5fddbbb65aea37932ea9ad85df', timestamp=1601650100, order=0, committer='*****@*****.**', message='custom commit', ) self.assertEqual( 200, client.post(self.URL + '/api/commits', data=Commit.Encoder().default(git_commit)).status_code) response = client.get(self.URL + '/api/commits?repository_id=safari') self.assertEqual(200, response.status_code) self.assertEqual(Commit.from_json(response.json()[0]), git_commit) svn_commit = Commit( repository_id='webkit', branch='trunk', id='1234', timestamp=1601650100, order=0, committer='*****@*****.**', message='custom commit', ) self.assertEqual( 200, client.post(self.URL + '/api/commits', data=Commit.Encoder().default(svn_commit)).status_code) response = client.get(self.URL + '/api/commits?repository_id=webkit') self.assertEqual(200, response.status_code) self.assertEqual(Commit.from_json(response.json()[0]), svn_commit)
def test_register_with_partial_commit(self, client, **kwargs): self.assertEqual( 200, client.post(self.URL + '/api/commits', data=dict(repository_id='safari', id='bb6bda5f44dd2')).status_code) response = client.get(self.URL + '/api/commits?repository_id=safari') self.assertEqual(200, response.status_code) self.assertEqual( Commit.from_json(response.json()[0]), MockStashRepository.safari().commit_for_id('bb6bda5f44dd2'), ) self.assertEqual( 404, client.post(self.URL + '/api/commits', data=dict(repository_id='safari', id='aaaaaaaaaaaaa')).status_code) self.assertEqual( 200, client.post(self.URL + '/api/commits', data=dict(repository_id='webkit', id='236544')).status_code) response = client.get(self.URL + '/api/commits?repository_id=webkit') self.assertEqual(200, response.status_code) self.assertEqual( Commit.from_json(response.json()[0]), MockSVNRepository.webkit().commit_for_id('236544'), ) self.assertEqual( 404, client.post(self.URL + '/api/commits', data=dict(repository_id='webkit', id='0')).status_code)
def test_siblings(self, client, **kwargs): self.register_all_commits(client) response = client.get( self.URL + '/api/commits/siblings?repository_id=webkit&id=6') self.assertEqual(200, response.status_code) commits = { key: [Commit.from_json(element).hash for element in values] for key, values in response.json().items() } self.assertEqual( commits, dict(safari=[ 'd8bce26fa65c6fc8f39c17927abb77f69fab82fc', 'bae5d1e90999d4f916a8a15810ccfa43f37a2fd6', '1abe25b443e985f93b90d830e4a7e3731336af4d', 'fff83bb2d9171b4d9196e977eb0508fd57e7a08d', '9b8311f25a77ba14923d9d5a6532103f54abefcb', ]), ) response = client.get( self.URL + '/api/commits/siblings?repository_id=safari&id=d8bce26fa65c') self.assertEqual(200, response.status_code) commits = { key: [Commit.from_json(element).revision for element in values] for key, values in response.json().items() } self.assertEqual(commits, dict(webkit=[6]))
def test_next(self, client, **kwargs): self.register_all_commits(client) response = client.get(self.URL + '/api/commits/next?id=bae5d1e90999') self.assertEqual(200, response.status_code) self.assertEqual(1, len(response.json())) self.assertEqual('d8bce26fa65c6fc8f39c17927abb77f69fab82fc', Commit.from_json(response.json()[0]).hash) response = client.get(self.URL + '/api/commits/next?id=4') self.assertEqual(200, response.status_code) self.assertEqual(1, len(response.json())) self.assertEqual(6, Commit.from_json(response.json()[0]).revision)
def register(self, commit=None): is_endpoint = not bool(commit) if is_endpoint: AssertRequest.is_type(['POST']) AssertRequest.no_query() if is_endpoint: try: commit = request.form or json.loads(request.get_data()) if 'api_key' in commit: del commit['api_key'] except ValueError: abort(400, description='Expected uploaded data to be json') try: self.commit_context.register_commit(Commit.from_json(commit)) if is_endpoint: return jsonify({'status': 'ok'}) return Commit.from_json(commit) except ValueError: pass required_args = ['repository_id', 'id'] optional_args = ['branch'] for arg in required_args: if arg not in commit: abort(400, description=f"'{arg}' required to define commit") for arg in commit.keys(): if arg in required_args + optional_args: continue if arg in ['timestamp', 'order', 'committer', 'message']: abort( 400, description= 'Not enough arguments provided to define a commit, but too many to search for a commit' ) abort(400, description=f"'{arg}' is not valid for defining commits") try: commit = self.commit_context.register_commit_with_repo_and_id( repository_id=commit.get('repository_id'), branch=commit.get('branch'), commit_id=commit.get('id'), ) except (RuntimeError, SCMException) as error: abort(404, description=str(error)) if is_endpoint: return jsonify({'status': 'ok'}) return commit
def test_find_uuid(self, client, **kwargs): self.register_all_commits(client) response = client.get(self.URL + '/api/commits?uuid=160166800001') self.assertEqual(200, response.status_code) self.assertEqual(1, len(response.json())) self.assertEqual( Commit.from_json(response.json()[0]).hash, 'd8bce26fa65c6fc8f39c17927abb77f69fab82fc') response = client.get(self.URL + '/api/commits?uuid=160163990000') self.assertEqual(200, response.status_code) self.assertEqual(1, len(response.json())) self.assertEqual(Commit.from_json(response.json()[0]).revision, 6)
def test_previous(self, client, **kwargs): self.register_all_commits(client) response = client.get(self.URL + '/api/commits/previous?id=d8bce26fa65c') self.assertEqual(200, response.status_code) self.assertEqual(1, len(response.json())) self.assertEqual('bae5d1e90999d4f916a8a15810ccfa43f37a2fd6', Commit.from_json(response.json()[0]).hash) response = client.get(self.URL + '/api/commits/previous?id=6') self.assertEqual(200, response.status_code) self.assertEqual(1, len(response.json())) self.assertEqual(4, Commit.from_json(response.json()[0]).revision)
def test_find_uuid(self, client, **kwargs): self.register_all_commits(client) response = client.get(self.URL + '/api/commits?uuid=153755068501') self.assertEqual(200, response.status_code) self.assertEqual(1, len(response.json())) self.assertEqual( Commit.from_json(response.json()[0]), MockStashRepository.safari().commit_for_id(id='7be40842')) response = client.get(self.URL + '/api/commits?uuid=153804179200') self.assertEqual(200, response.status_code) self.assertEqual(1, len(response.json())) self.assertEqual(Commit.from_json(response.json()[0]), MockSVNRepository.webkit().commit_for_id(id=236541))
def test_find_id(self, client, **kwargs): self.register_all_commits(client) response = client.get(self.URL + '/api/commits?id=336610a8') self.assertEqual(200, response.status_code) self.assertEqual(1, len(response.json())) self.assertEqual( Commit.from_json(response.json()[0]), MockStashRepository.safari().commit_for_id(id='336610a8')) response = client.get(self.URL + '/api/commits?id=236540') self.assertEqual(200, response.status_code) self.assertEqual(1, len(response.json())) self.assertEqual(Commit.from_json(response.json()[0]), MockSVNRepository.webkit().commit_for_id(id=236540))
def test_previous(self, client, **kwargs): self.register_all_commits(client) response = client.get(self.URL + '/api/commits/previous?id=336610a4') self.assertEqual(200, response.status_code) self.assertEqual(1, len(response.json())) self.assertEqual( MockStashRepository.safari().commit_for_id(id='7be40842'), Commit.from_json(response.json()[0])) response = client.get(self.URL + '/api/commits/previous?id=236542') self.assertEqual(200, response.status_code) self.assertEqual(1, len(response.json())) self.assertEqual(MockSVNRepository.webkit().commit_for_id(id=236541), Commit.from_json(response.json()[0]))
def test_find_timestamp(self, client, **kwargs): self.register_all_commits(client) response = client.get(self.URL + '/api/commits?timestamp=1601668000') self.assertEqual(200, response.status_code) self.assertEqual(2, len(response.json())) self.assertEqual( [Commit.from_json(element).hash for element in response.json()], [ 'bae5d1e90999d4f916a8a15810ccfa43f37a2fd6', 'd8bce26fa65c6fc8f39c17927abb77f69fab82fc', ]) response = client.get(self.URL + '/api/commits?timestamp=1601639900') self.assertEqual(200, response.status_code) self.assertEqual(1, len(response.json())) self.assertEqual(Commit.from_json(response.json()[0]).revision, 6)
def _do_job_for_key(self, key, attempts=1): job_complete = False try: raw_data = self.redis.get(f'data_for_{key}') if raw_data: data = json.loads(raw_data) self.synchronously_process_test_results( configuration=Configuration.from_json( data['configuration']), commits=[ Commit.from_json(commit_json) for commit_json in data['commits'] ], suite=data['suite'], timestamp=data['timestamp'], test_results=data['test_results'], ) job_complete = True finally: if job_complete or attempts >= self.MAX_ATTEMPTS: self.redis.delete(key) self.redis.delete(f'data_for_{key}') else: self.redis.set( key, json.dumps(dict(started_processing=0, attempts=attempts)), ex=self.PROCESS_TIMEOUT, )
def test_find_timestamp(self, client, **kwargs): self.register_all_commits(client) response = client.get(self.URL + '/api/commits?timestamp=1537550685') self.assertEqual(200, response.status_code) self.assertEqual(2, len(response.json())) self.assertEqual( [Commit.from_json(element) for element in response.json()], [ MockStashRepository.safari().commit_for_id(id='e64810a4'), MockStashRepository.safari().commit_for_id(id='7be40842'), ]) response = client.get(self.URL + '/api/commits?timestamp=1538041791.8') self.assertEqual(200, response.status_code) self.assertEqual(1, len(response.json())) self.assertEqual(Commit.from_json(response.json()[0]), MockSVNRepository.webkit().commit_for_id(id=236541))
def test_encoding(self): commits_to_test = [ Commit( repository_id='safari', branch='master', id='e64810a40c3fecb728871e12ca31482ca715b383', timestamp=1537550685, ), Commit( repository_id='safari', branch='master', id='7be4084258a452e8fe22f36287c5b321e9c8249b', timestamp=1537550685, order=1, committer='*****@*****.**', message='Changelog', ), Commit( repository_id='webkit', branch='master', id=236522, timestamp=1537826614, ), ] for commit in commits_to_test: converted_commit = Commit.from_json(commit.to_json()) self.assertEqual(commit, converted_commit) self.assertEqual(commit.repository_id, converted_commit.repository_id) self.assertEqual(commit.id, converted_commit.id) self.assertEqual(commit.timestamp, converted_commit.timestamp) self.assertEqual(commit.order, converted_commit.order) self.assertEqual(commit.committer, converted_commit.committer) self.assertEqual(commit.message, converted_commit.message)
def unpack(self): return dict( commits=[Commit.from_json(element) for element in json.loads(UploadContext.from_zip(bytearray(self.commits)))], sdk=None if self.sdk == '?' else self.sdk, test_results=json.loads(UploadContext.from_zip(bytearray(self.test_results))), timestamp=calendar.timegm(self.time_uploaded.timetuple()), version=self.upload_version, )
def test_register_with_full_commit(self, client, **kwargs): git_commit = MockStashRepository.safari().commit_for_id( 'bb6bda5f44dd2') self.assertEqual( 200, client.post(self.URL + '/api/commits', data=Commit.Encoder().default(git_commit)).status_code) response = client.get(self.URL + '/api/commits?repository_id=safari') self.assertEqual(200, response.status_code) self.assertEqual(Commit.from_json(response.json()[0]), git_commit) svn_commit = MockSVNRepository.webkit().commit_for_id('236544') self.assertEqual( 200, client.post(self.URL + '/api/commits', data=Commit.Encoder().default(svn_commit)).status_code) response = client.get(self.URL + '/api/commits?repository_id=webkit') self.assertEqual(200, response.status_code) self.assertEqual(Commit.from_json(response.json()[0]), svn_commit)
def test_find_range_id(self, client, **kwargs): self.register_all_commits(client) response = client.get(self.URL + '/api/commits?after_id=6&before_id=fff83bb2d917') self.assertEqual(200, response.status_code) self.assertEqual( [Commit.from_json(element).id for element in response.json()], [ '6', '9b8311f25a77ba14923d9d5a6532103f54abefcb', 'fff83bb2d9171b4d9196e977eb0508fd57e7a08d', ])
def test_find_range_id(self, client, **kwargs): self.register_all_commits(client) response = client.get( self.URL + '/api/commits?after_id=336610a8&before_id=236540') self.assertEqual(200, response.status_code) self.assertEqual( [Commit.from_json(element) for element in response.json()], [ MockStashRepository.safari().commit_for_id(id='336610a8'), MockStashRepository.safari().commit_for_id(id='bb6bda5f'), MockSVNRepository.webkit().commit_for_id(id=236540), ])
def run_function_through_redis_cache(self, key, function): result = self.redis.get('commit_mapping:' + key) if result: try: result = [Commit.from_json(element) for element in json.loads(result)] except ValueError: result = None if result is None: result = function() if result: self.redis.set('commit_mapping:' + key, json.dumps(result, cls=Commit.Encoder), ex=self.cache_timeout) return result
def test_find_range_uuid(self, client, **kwargs): self.register_all_commits(client) response = client.get( self.URL + '/api/commits?after_uuid=160166800000&before_uuid=160166800001') self.assertEqual(200, response.status_code) self.assertEqual( [Commit.from_json(element).hash for element in response.json()], [ 'bae5d1e90999d4f916a8a15810ccfa43f37a2fd6', 'd8bce26fa65c6fc8f39c17927abb77f69fab82fc', ], )
def test_find_range_uuid(self, client, **kwargs): self.register_all_commits(client) response = client.get( self.URL + '/api/commits?after_uuid=153755068501&before_uuid=153756638602') self.assertEqual(200, response.status_code) self.assertEqual( [Commit.from_json(element) for element in response.json()], [ MockStashRepository.safari().commit_for_id(id='7be40842'), MockStashRepository.safari().commit_for_id(id='336610a4') ], )
def test_register_with_partial_commit(self, client, **kwargs): with MockModelFactory.safari(), MockModelFactory.webkit( ), OutputCapture(): self.assertEqual( 200, client.post(self.URL + '/api/commits', data=dict(repository_id='safari', id='d8bce26fa65c')).status_code) response = client.get(self.URL + '/api/commits?repository_id=safari') self.assertEqual(200, response.status_code) self.assertEqual( Commit.from_json(response.json()[0]).message, 'Patch Series\n', ) self.assertEqual( 404, client.post(self.URL + '/api/commits', data=dict(repository_id='safari', id='aaaaaaaaaaaaa')).status_code) self.assertEqual( 200, client.post(self.URL + '/api/commits', data=dict(repository_id='webkit', id='6')).status_code) response = client.get(self.URL + '/api/commits?repository_id=webkit') self.assertEqual(200, response.status_code) self.assertEqual( Commit.from_json(response.json()[0]).message, '6th commit', ) self.assertEqual( 404, client.post(self.URL + '/api/commits', data=dict(repository_id='webkit', id='1234')).status_code)
def test_find_range_timestamp(self, client, **kwargs): self.register_all_commits(client) response = client.get( self.URL + '/api/commits?after_timestamp=1601637900&before_timestamp=1601639900' ) self.assertEqual(200, response.status_code) self.assertEqual( [ Commit.from_json(element).revision for element in response.json() ], [4, 6], )
def test_find_range_timestamp(self, client, **kwargs): self.register_all_commits(client) response = client.get( self.URL + '/api/commits?after_timestamp=1538041792.3&before_timestamp=1538049108' ) self.assertEqual(200, response.status_code) self.assertEqual( [Commit.from_json(element) for element in response.json()], [ MockSVNRepository.webkit().commit_for_id(id=236541), MockSVNRepository.webkit().commit_for_id(id=236542) ], )
def test_siblings(self, client, **kwargs): self.register_all_commits(client) response = client.get( self.URL + '/api/commits/siblings?repository_id=webkit&id=236542') self.assertEqual(200, response.status_code) commits = { key: [Commit.from_json(element) for element in values] for key, values in response.json().items() } self.assertEqual( commits, { 'safari': [ MockStashRepository.safari().commit_for_id( id='bb6bda5f44dd24') ] }) response = client.get( self.URL + '/api/commits/siblings?repository_id=safari&id=bb6bda5f44dd24') self.assertEqual(200, response.status_code) commits = { key: [Commit.from_json(element) for element in values] for key, values in response.json().items() } self.assertEqual( commits, { 'webkit': [ MockSVNRepository.webkit().commit_for_id(id=236544), MockSVNRepository.webkit().commit_for_id(id=236543), MockSVNRepository.webkit().commit_for_id(id=236542), MockSVNRepository.webkit().commit_for_id(id=236541), MockSVNRepository.webkit().commit_for_id(id=236540), ] })
def add_commit(self, commit): copied_commit = Commit.from_json(commit.to_json()) copied_commit.repository_id = self.name self.commits[copied_commit.branch].append(copied_commit) self.commits[copied_commit.branch] = sorted(self.commits[copied_commit.branch])