def testUpgradeNew(self): t = graph_data.TestMetadata(has_rows=True, id='master/bot/suite/measurement/case') t.UpdateSheriff() t.put() page_state.PageState( id='test_sid', value=json.dumps({ 'charts': [ { 'seriesGroups': [ ['master/bot/suite/measurement', ['measurement']], ], }, ], })).put() response = self.testapp.get('/short_uri', { 'sid': 'test_sid', 'v2': 'true' }) expected = { 'testSuites': ['suite'], 'measurements': ['measurement'], 'bots': ['master:bot'], 'testCases': [], } actual = json.loads(response.body)['chartSections'][0]['parameters'] self.assertEqual(expected, actual) self.assertEqual(response.body, ndb.Key('PageState', 'test_sid').get().value_v2)
def testDeleteAllViaTaskqueue(self): page_state.PageState(id=1).put() page_state.PageState(id=2).put() limit_patch = mock.patch.object(delete_all_entities, 'QUERY_PAGE_LIMIT', 1) limit_patch.start() self.addCleanup(limit_patch.stop) deferred_patch = mock.patch.object(delete_all_entities, 'deferred') deferred_patch.start() self.addCleanup(deferred_patch.stop) delete_all_entities.DeleteAllEntities('PageState') self.assertEqual( 1, len(ndb.Query(kind='PageState').fetch(keys_only=True))) delete_all_entities.deferred.defer.assert_called_once_with( delete_all_entities.DeleteAllEntities, 'PageState')
def testOnlyDeleteKind(self): anomaly.Anomaly( id='anomaly', test=utils.TestMetadataKey('master/bot/suite/measurement')).put() page_state.PageState(id='page_state').put() self.assertEqual( 1, len(ndb.Query(kind='PageState').fetch(keys_only=True))) self.assertEqual(1, len(ndb.Query(kind='Anomaly').fetch(keys_only=True))) delete_all_entities.DeleteAllEntities('PageState') self.assertEqual( 0, len(ndb.Query(kind='PageState').fetch(keys_only=True))) self.assertEqual(1, len(ndb.Query(kind='Anomaly').fetch(keys_only=True)))
def post(self): """Handles saving page states and getting state id.""" state = self.request.get('page_state') if not state: self.ReportError('Missing required parameters.', status=400) return state = state.encode('utf-8') state_id = GenerateHash(state) if not ndb.Key(page_state.PageState, state_id).get(): page_state.PageState(id=state_id, value=state).put() self.response.out.write(json.dumps({'sid': state_id}))
def testPost_WithValidSidParameter(self): sheriff_key = self._AddSheriff() test_keys = self._AddTests() selected_ranges = [(400, 900), (200, 700)] selected_keys = self._AddAnomalyEntities( selected_ranges, test_keys[0], sheriff_key) json_keys = json.dumps(selected_keys) state_id = short_uri.GenerateHash(','.join(selected_keys)) page_state.PageState(id=state_id, value=json_keys).put() response = self.testapp.post('/group_report?sid=%s' % state_id) alert_list = self.GetJsonValue(response, 'alert_list') # Confirm the first N keys are the selected keys. first_keys = [alert_list[i]['key'] for i in xrange(len(selected_keys))] self.assertSetEqual(set(selected_keys), set(first_keys)) self.assertEqual(2, len(alert_list))
def testPost_WithValidSidParameter(self): sheriff_key = self._AddSheriff() test_keys = self._AddTests() selected_ranges = [(400, 900), (200, 700)] selected_keys = self._AddAnomalyEntities(selected_ranges, test_keys[0], sheriff_key) json_keys = json.dumps(selected_keys) state_id = short_uri.GenerateHash(','.join(selected_keys)) page_state.PageState(id=state_id, value=json_keys).put() response = self.testapp.post('/group_report?sid=%s' % state_id) alert_list = self.GetJsonValue(response, 'alert_list') self.assertEqual(unicode(selected_keys[1], 'utf-8'), alert_list[0].get('key')) self.assertEqual(unicode(selected_keys[0], 'utf-8'), alert_list[1].get('key')) self.assertEqual(2, len(alert_list))
def _GetQueryStringForOldUri(self): """Gets a new query string if old URI parameters are present. SID is a hash string generated from a page state dictionary which is created here from old URI request parameters. Returns: A query string if request parameters are from old URI, otherwise None. """ masters = self.request.get('masters') bots = self.request.get('bots') tests = self.request.get('tests') checked = self.request.get('checked') if not (masters and bots and tests): return None # Page state is a list of chart state. Chart state is # a list of pair of test path and selected series which is used # to generate a chart on /report page. state = _CreatePageState(masters, bots, tests, checked) # Replace default separators to remove whitespace. state_json = json.dumps(state, separators=(',', ':')) state_id = short_uri.GenerateHash(state_json) # Save page state. if not ndb.Key(page_state.PageState, state_id).get(): page_state.PageState(id=state_id, value=state_json).put() query_string = 'sid=' + state_id if self.request.get('start_rev'): query_string += '&start_rev=' + self.request.get('start_rev') if self.request.get('end_rev'): query_string += '&end_rev=' + self.request.get('end_rev') if self.request.get('rev'): query_string += '&rev=' + self.request.get('rev') return query_string
def GetOrCreatePageState(state): state = state.encode('utf-8') state_id = GenerateHash(state) if not ndb.Key(page_state.PageState, state_id).get(): page_state.PageState(id=state_id, value=state).put() return state_id