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 process(self): AssertRequest.is_type(['POST']) with self.upload_context: uploads = self._find_uploads_for_query() if not uploads: abort(404, description='No uploads matching the specified criteria') response = [] for config, suite_results in uploads.items(): for suite, results in suite_results.items(): for result in results: config.sdk = result.get('sdk') processing_results = self.upload_context.process_test_results( configuration=config, commits=result['commits'], suite=suite, test_results=result['test_results'], timestamp=result['timestamp'], ) response.append(dict( configuration=Configuration.Encoder().default(config), suite=suite, commits=Commit.Encoder().default(result['commits']), timestamp=result['timestamp'], processing=processing_results, )) return jsonify(response)
def test_upload(self, client, **kwargs): upload_dict = dict( suite='layout-tests', commits=[ MockStashRepository.safari().commit_for_id('bb6bda5f'), MockSVNRepository.webkit().commit_for_id(236542) ], configuration=Configuration.Encoder().default( Configuration( platform='Mac', version='10.14.0', sdk='18A391', is_simulator=False, architecture='x86_64', style='Release', flavor='wk2', )), test_results=MockModelFactory.layout_test_results(), timestamp=int(time.time()), ) response = client.post(self.URL + '/api/upload', data=str( json.dumps(upload_dict, cls=Commit.Encoder))) self.assertEqual(response.status_code, 200) self.assertEqual(response.json()['status'], 'ok') self.assertEqual(response.json()['processing']['python-tests'], dict(status='ok')) response = client.get(self.URL + '/api/upload') self.assertEqual(response.status_code, 200) self.assertEqual(response.json()[0], Commit.Encoder().default(upload_dict))
def process_test_results(self, configuration, commits, suite, test_results, timestamp=None): timestamp = timestamp or time.time() if not self._async_processing: return self.synchronously_process_test_results(configuration, commits, suite, test_results=test_results, timestamp=timestamp) for branch in self.commit_context.branch_keys_for_commits(commits): hash_key = hash(configuration) ^ hash(branch) ^ hash(self.commit_context.uuid_for_commits(commits)) ^ hash( suite) self.redis.set( f'{self.QUEUE_NAME}:{hash_key}', json.dumps(dict(started_processing=0, attempts=0)), ex=self.PROCESS_TIMEOUT, ) self.redis.set( f'data_for_{self.QUEUE_NAME}:{hash_key}', json.dumps(dict( configuration=Configuration.Encoder().default(configuration), suite=suite, commits=Commit.Encoder().default(commits), timestamp=timestamp, test_results=test_results, )), ex=self.PROCESS_TIMEOUT, ) return {key: dict(status='Queued') for key in list(self._process_upload_callbacks[suite].keys()) + list(self._process_upload_callbacks[None].keys())}
def find(self): AssertRequest.is_type() result = self._find(**request.args.to_dict(flat=False)) if not result: abort( 404, description='No commits found matching the specified criteria') return jsonify(Commit.Encoder().default(result))
def register_all_commits(self, client): for repo in [MockStashRepository.safari(), MockSVNRepository.webkit()]: for commits in repo.commits.values(): for commit in commits: self.assertEqual( 200, client.post( self.URL + '/api/commits/register', data=Commit.Encoder().default(commit)).status_code)
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 previous(self, limit=None, **kwargs): AssertRequest.is_type() AssertRequest.query_kwargs_empty(limit=limit) with self.commit_context: commits = self._find(**kwargs) if not commits: abort(404, description='No commits found matching the specified criteria') if len(commits) > 1: abort(404, description=f'{len(commits)} commits found matching the specified criteria') commit = self.commit_context.previous_commit(commits[0]) return jsonify(Commit.Encoder().default([commit] if commit else []))
def siblings(self, limit=None, **kwargs): AssertRequest.is_type() AssertRequest.query_kwargs_empty(limit=limit) with self.commit_context: commits = self._find(**kwargs) if not commits: abort(404, description='No commits found matching the specified criteria') if len(commits) > 1: abort(404, description=f'{len(commits)} commits found matching the specified criteria') repositories = sorted(self.commit_context.repositories.keys()) repositories.remove(commits[0].repository_id) return jsonify(Commit.Encoder().default(self.commit_context.sibling_commits(commits[0], repositories)))
def commit(self, **kwargs): with self.commit_context: commit = self._single_commit() repositories = list(self.commit_context.repositories.keys()) repositories.remove(commit.repository_id) siblings = self.commit_context.sibling_commits( commit, repositories) repositories = [commit.repository_id] + sorted( [str(key) for key, lst in siblings.items() if lst]) return self.environment.get_template('commit.html').render( title=self.site_menu.title + ': ' + str(commit.id), commit=commit, repository_ids=repositories, commits=Commit.Encoder().default( [commit] + [item for lst in siblings.values() for item in lst]), **kwargs)
def download(self): AssertRequest.is_type(['GET']) with self.upload_context: uploads = self._find_uploads_for_query() response = [] for config, suite_results in uploads.items(): for suite, results in suite_results.items(): for result in results: config.sdk = result.get('sdk') response.append(dict( configuration=Configuration.Encoder().default(config), suite=suite, commits=Commit.Encoder().default(result['commits']), timestamp=result['timestamp'], test_results=result['test_results'], )) return jsonify(response)