Ejemplo n.º 1
0
  def testPost_AdminAddsAndRemovesOther_Succeeds(self):
    self.SetCurrentUser('*****@*****.**', is_admin=True)
    self._SetOwnersDict(_SAMPLE_OWNER_DICT)

    # Test adding test owner.
    self.testapp.post('/edit_test_owners', {
        'action': 'add',
        'item': 'ChromiumPerf/speedometer',
        'sub_item': '*****@*****.**',
        'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
    })
    owner_dict = layered_cache.GetExternal(test_owner._MASTER_OWNER_CACHE_KEY)
    self.assertIn('*****@*****.**', owner_dict['ChromiumPerf/speedometer'])

    # Test removing test owner.
    self.testapp.post('/edit_test_owners', {
        'action': 'remove',
        'item': 'ChromiumPerf/speedometer',
        'sub_item': '*****@*****.**',
        'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
    })
    owner_dict = layered_cache.GetExternal(test_owner._MASTER_OWNER_CACHE_KEY)
    self.assertNotIn(
        '*****@*****.**', owner_dict['ChromiumPerf/speedometer'])

    # Test removing all test owners for a test suite path.
    self.testapp.post('/edit_test_owners', {
        'action': 'remove',
        'item': 'ChromiumPerf/speedometer',
        'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
    })
    owner_dict = layered_cache.GetExternal(test_owner._MASTER_OWNER_CACHE_KEY)
    self.assertNotIn('ChromiumPerf/speedometer', owner_dict)
Ejemplo n.º 2
0
    def test_NonAdminAddsAndRemovesSelf_Succeeds(self):
        self.SetCurrentUser('*****@*****.**', is_admin=False)
        self._SetOwnersDict(_SAMPLE_OWNER_DICT)

        self.testapp.post(
            '/edit_test_owners', {
                'action': 'add',
                'item': 'ChromiumPerf/spaceport',
                'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
            })
        owner_dict = layered_cache.GetExternal(
            test_owner._MASTER_OWNER_CACHE_KEY)
        self.assertIn('ChromiumPerf/spaceport', owner_dict)
        self.assertIn('*****@*****.**',
                      owner_dict['ChromiumPerf/spaceport'])

        self.testapp.post(
            '/edit_test_owners', {
                'action': 'remove',
                'item': 'ChromiumPerf/spaceport',
                'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
            })
        owner_dict = layered_cache.GetExternal(
            test_owner._MASTER_OWNER_CACHE_KEY)
        self.assertNotIn('ChromiumPerf/spaceport', owner_dict)
Ejemplo n.º 3
0
    def testPost_AroundRevisionWithOneBot(self):
        """Tests generation of around_revision stats for only one bot."""
        self._AddMockData()
        self.SetCurrentUser('*****@*****.**')

        # Post a request to get around_revision stats.
        self.testapp.post(
            '/stats', {
                'bots': 'win7',
                'type': 'around_revision',
                'rev': '15040',
                'num_around': '10',
                'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
            })
        self.ExecuteTaskQueueTasks('/stats_around_revision', stats._QUEUE_NAME)

        containers = stats.StatContainer.query().fetch()
        self.assertEqual(1, len(containers))
        self.assertEqual('around_revision', containers[0].stat_type)
        self.assertEqual(2, containers[0].num_stats)
        self.assertEqual({
            'name': None,
            'revision': 15040,
            'num_around': 10
        }, containers[0].summary)
        individual_stats = stats.IndividualStat.query().fetch()
        self.assertEqual(2, len(individual_stats))
        self.assertEqual('ChromiumPerf/win7/moz/times/page_load_time',
                         individual_stats[0].details['test_path'])
        self.assertEqual('ChromiumPerf/win7/octane/Total/Score',
                         individual_stats[1].details['test_path'])
Ejemplo n.º 4
0
    def testEditSheriff_EditPatternsList(self):
        """Tests editing the patterns list of a Sheriff."""
        self._AddSampleTestData()
        self._AddSheriff('Sheriff', patterns=['*/*/*/*'])
        self.testapp.post(
            '/edit_sheriffs', {
                'add-edit': 'edit',
                'edit-name': 'Sheriff',
                'patterns': '*/*/*/ddd\n\n*/*/*/ccc',
                'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
            })
        sheriff_entity = sheriff.Sheriff.query().fetch()[0]
        self.assertEqual(['*/*/*/ccc', '*/*/*/ddd'], sheriff_entity.patterns)

        # After the tasks get executed, the Test entities should also be updated.
        self.ExecuteTaskQueueTasks('/put_entities_task',
                                   edit_config_handler._TASK_QUEUE_NAME)
        aaa = utils.TestKey('TheMaster/TheBot/Suite1/aaa').get()
        bbb = utils.TestKey('TheMaster/TheBot/Suite1/bbb').get()
        ccc = utils.TestKey('TheMaster/TheBot/Suite2/ccc').get()
        ddd = utils.TestKey('TheMaster/TheBot/Suite2/ddd').get()
        self.assertIsNone(aaa.sheriff)
        self.assertIsNone(bbb.sheriff)
        self.assertEqual(sheriff_entity.key, ccc.sheriff)
        self.assertEqual(sheriff_entity.key, ddd.sheriff)
Ejemplo n.º 5
0
    def testPost_EditExistingSheriff(self):
        """Tests editing the email, url, and summarize properties of a Sheriff."""
        self._AddSampleTestData()
        self._AddSheriff('Old Sheriff')
        self.testapp.post(
            '/edit_sheriffs', {
                'add-edit': 'edit',
                'edit-name': 'Old Sheriff',
                'email': '*****@*****.**',
                'url': 'http://perf.com/mysheriff',
                'internal-only': 'false',
                'summarize': 'true',
                'patterns': '*/*/Suite1/*\n',
                'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
            })
        sheriff_entity = sheriff.Sheriff.query().fetch()[0]
        self.assertEqual('*****@*****.**', sheriff_entity.email)
        self.assertEqual('http://perf.com/mysheriff', sheriff_entity.url)
        self.assertEqual(['*/*/Suite1/*'], sheriff_entity.patterns)
        self.assertTrue(sheriff_entity.summarize)

        # After the tasks get executed, the Test entities should also be updated.
        self.ExecuteTaskQueueTasks('/put_entities_task',
                                   edit_config_handler._TASK_QUEUE_NAME)
        aaa = utils.TestKey('TheMaster/TheBot/Suite1/aaa').get()
        bbb = utils.TestKey('TheMaster/TheBot/Suite1/bbb').get()
        ccc = utils.TestKey('TheMaster/TheBot/Suite2/ccc').get()
        ddd = utils.TestKey('TheMaster/TheBot/Suite2/ddd').get()
        self.assertEqual(sheriff_entity.key, aaa.sheriff)
        self.assertEqual(sheriff_entity.key, bbb.sheriff)
        self.assertIsNone(ccc.sheriff)
        self.assertIsNone(ddd.sheriff)
Ejemplo n.º 6
0
 def testPost_WithKey_UpdatesNonNamespacedValues(self):
   self.testapp.post('/edit_site_config', {
       'key': 'foo',
       'value': '[1, 2, 3]',
       'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
   })
   self.assertEqual([1, 2, 3], stored_object.Get('foo'))
Ejemplo n.º 7
0
 def testPost_NoNameGivenWhenEditingSheriff_ShowsErrorMessage(self):
     response = self.testapp.post(
         '/edit_sheriffs', {
             'add-edit': 'edit',
             'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
         })
     expected_message = 'No name given'
     self.assertIn(expected_message, response.body)
Ejemplo n.º 8
0
 def testPost_FeedbackRecorded(self):
   self.testapp.post('/bad_bisect?', {
       'try_job_id': '1234',
       'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
   })
   jobs = try_job.TryJob.query().fetch()
   self.assertEqual(1, len(jobs))
   self.assertEqual({'*****@*****.**'}, jobs[0].bad_result_emails)
Ejemplo n.º 9
0
 def testPost_LogAdded(self):
     self.testapp.post(
         '/bad_bisect?', {
             'try_job_id': '1234',
             'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
         })
     logs = quick_logger.Get('bad_bisect', 'report')
     self.assertEqual(1, len(logs))
Ejemplo n.º 10
0
 def testPost_WithInvalidAddEditParameter_ShowsErrorMessage(self):
     response = self.testapp.post(
         '/edit_sheriffs', {
             'add-edit': '',
             'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
         })
     expected_message = 'Invalid value'
     self.assertIn(expected_message, response.body)
Ejemplo n.º 11
0
 def testPost_ExternalUser_ShowsErrorMessage(self):
   self.SetCurrentUser('*****@*****.**')
   response = self.testapp.post('/edit_site_config', {
       'key': 'foo',
       'value': '[1, 2, 3]',
       'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
   })
   self.assertIn('Only internal users', response.body)
Ejemplo n.º 12
0
 def testPost_NameForExistingSheriffNotFound_ShowsErrorMessage(self):
     response = self.testapp.post(
         '/edit_sheriffs', {
             'add-edit': 'edit',
             'edit-name': 'X',
             'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
         })
     expected_message = 'does not exist'
     self.assertIn(expected_message, response.body)
Ejemplo n.º 13
0
 def testPost_InitializeWhitelist(self):
   self.SetCurrentUser('*****@*****.**', is_admin=True)
   self.testapp.post('/bot_whitelist', {
       'bot_whitelist': 'linux-release\nandroid-gn\nchromium-rel-mac6',
       'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
   })
   whitelist = ndb.Key('BotWhitelist', bot_whitelist.WHITELIST_KEY).get()
   self.assertEqual(
       ['linux-release', 'android-gn', 'chromium-rel-mac6'], whitelist.bots)
Ejemplo n.º 14
0
 def testPost_LoggedIntoValidSheriffAccount_ChangesBugID(self):
   anomaly_keys = self._AddAnomaliesToDataStore()
   self.SetCurrentUser('*****@*****.**')
   self.testapp.post('/edit_anomalies', {
       'keys': json.dumps([anomaly_keys[0].urlsafe()]),
       'bug_id': 31337,
       'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
   })
   self.assertEqual(31337, anomaly_keys[0].get().bug_id)
Ejemplo n.º 15
0
 def testPost_LoggedIntoInvalidDomain_DoesNotModifyAnomaly(self):
   anomaly_keys = self._AddAnomaliesToDataStore()
   self.SetCurrentUser('*****@*****.**')
   self.testapp.post('/edit_anomalies', {
       'keys': json.dumps([anomaly_keys[0].urlsafe()]),
       'bug_id': 31337,
       'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
   }, status=403)
   self.assertIsNone(anomaly_keys[0].get().bug_id)
Ejemplo n.º 16
0
 def testPost_WithInvalidActionParameter_ShowsErrorMessage(self):
     """If an invalid value is given for "add-edit", an error page is shown."""
     response = self.testapp.post(
         '/edit_sheriffs', {
             'add-edit': '',
             'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
         })
     expected_message = 'Invalid value'
     self.assertIn(expected_message, response.body)
Ejemplo n.º 17
0
 def testPost_WithSomeInvalidJSON_ShowsErrorAndDoesNotModify(self):
   stored_object.Set('foo', 'XXX')
   response = self.testapp.post('/edit_site_config', {
       'key': 'foo',
       'value': '[1, 2, this is not json',
       'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
   })
   self.assertIn('Invalid JSON', response.body)
   self.assertEqual('XXX', stored_object.Get('foo'))
Ejemplo n.º 18
0
 def testPost_NameForNewSheriffAlreadyUsed_ShowsErrorMessage(self):
     self._AddSheriff('X')
     response = self.testapp.post(
         '/edit_sheriffs', {
             'add-edit': 'add',
             'add-name': 'X',
             'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
         })
     expected_message = 'already exists'
     self.assertIn(expected_message, response.body)
Ejemplo n.º 19
0
 def testPost_ClearWhitelist(self):
   self.SetCurrentUser('*****@*****.**', is_admin=True)
   whitelist = bot_whitelist.BotWhitelist(id=bot_whitelist.WHITELIST_KEY,
                                          bots=['linux-release', 'android-gn'])
   self.testapp.post('/bot_whitelist', {
       'bot_whitelist': '',
       'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
   })
   whitelist = ndb.Key('BotWhitelist', bot_whitelist.WHITELIST_KEY).get()
   self.assertEqual([], whitelist.bots)
Ejemplo n.º 20
0
 def testPost_WithKey_UpdatesNamespacedValues(self):
   namespaced_stored_object.Set('foo', 'XXXinternalYYY')
   namespaced_stored_object.SetExternal('foo', 'XXXYYY')
   self.testapp.post('/edit_site_config', {
       'key': 'foo',
       'external_value': '{"x": "y"}',
       'internal_value': '{"x": "yz"}',
       'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
   })
   self.assertEqual({'x': 'yz'}, namespaced_stored_object.Get('foo'))
   self.assertEqual({'x': 'y'}, namespaced_stored_object.GetExternal('foo'))
Ejemplo n.º 21
0
 def testPost_ChangeRevisions(self):
   anomaly_keys = self._AddAnomaliesToDataStore()
   self.SetCurrentUser('*****@*****.**')
   self.testapp.post('/edit_anomalies', {
       'keys': json.dumps([anomaly_keys[0].urlsafe()]),
       'new_start_revision': '123450',
       'new_end_revision': '123455',
       'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
   })
   self.assertEqual(123450, anomaly_keys[0].get().start_revision)
   self.assertEqual(123455, anomaly_keys[0].get().end_revision)
 def testPost_NoKeysGiven_Error(self):
     anomaly_keys = self._AddAnomaliesToDataStore()
     self.SetCurrentUser('*****@*****.**')
     response = self.testapp.post(
         '/edit_anomalies', {
             'bug_id': 31337,
             'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
         })
     self.assertEqual({'error': 'No alerts specified to add bugs to.'},
                      json.loads(response.body))
     self.assertIsNone(anomaly_keys[0].get().bug_id)
Ejemplo n.º 23
0
  def testPost_NonInternalUser_ShowsErrorMessage(self):
    """Tests that the stats page is only shown when logged in."""
    self.SetCurrentUser('*****@*****.**')
    response = self.testapp.get('/stats')
    self.assertIn('Only logged-in internal users', response.body)

    # Same thing if an xsrf token is given.
    response = self.testapp.post('/stats', {
        'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
    })
    self.assertIn('Only logged-in internal users', response.body)
 def testPost_IncompleteParametersGiven_ReturnsError(self):
     anomaly_keys = self._AddAnomaliesToDataStore()
     self.SetCurrentUser('*****@*****.**')
     response = self.testapp.post(
         '/edit_anomalies', {
             'keys': json.dumps([anomaly_keys[0].urlsafe()]),
             'new_start_revision': '123',
             'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
         })
     self.assertEqual({'error': 'No bug ID or new revision specified.'},
                      json.loads(response.body))
Ejemplo n.º 25
0
 def testPost_RemoveBug(self):
   anomaly_keys = self._AddAnomaliesToDataStore()
   self.SetCurrentUser('*****@*****.**')
   a = anomaly_keys[0].get()
   a.bug_id = 12345
   a.put()
   self.testapp.post('/edit_anomalies', {
       'keys': json.dumps([anomaly_keys[0].urlsafe()]),
       'bug_id': 'REMOVE',
       'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
   })
   self.assertIsNone(anomaly_keys[0].get().bug_id)
Ejemplo n.º 26
0
    def testBugLabelPattern(self):
        """Tests adding and removing a BugLabelPattern."""
        self.testapp.post(
            '/edit_bug_labels', {
                'action': 'add_buglabel_pattern',
                'buglabel_to_add': 'Performance-1',
                'pattern': '*/*/Suite1/*',
                'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
            })

        # The list of patterns should now contain the pattern that was added.
        self.assertEqual(
            ['*/*/Suite1/*'],
            bug_label_patterns.GetBugLabelPatterns()['Performance-1'])

        # Add another pattern for the same bug label.
        self.testapp.post(
            '/edit_bug_labels', {
                'action': 'add_buglabel_pattern',
                'buglabel_to_add': 'Performance-1',
                'pattern': '*/*/Suite2/*',
                'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
            })

        # The list of patterns should now contain both patterns.
        self.assertEqual(
            ['*/*/Suite1/*', '*/*/Suite2/*'],
            bug_label_patterns.GetBugLabelPatterns()['Performance-1'])

        # Remove the BugLabelPattern entity.
        self.testapp.post(
            '/edit_bug_labels', {
                'action': 'remove_buglabel_pattern',
                'buglabel_to_remove': 'Performance-1',
                'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
            })

        # It should now be absent from the datastore.
        self.assertNotIn('Performance-1',
                         bug_label_patterns.GetBugLabelPatterns())
 def testPost_ChangeBugIDToInvalidID_ReturnsError(self):
     anomaly_keys = self._AddAnomaliesToDataStore()
     self.SetCurrentUser('*****@*****.**')
     a = anomaly_keys[0].get()
     a.bug_id = 12345
     a.put()
     response = self.testapp.post(
         '/edit_anomalies', {
             'keys': json.dumps([anomaly_keys[0].urlsafe()]),
             'bug_id': 'a',
             'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
         })
     self.assertEqual({'error': 'Invalid bug ID a'},
                      json.loads(response.body))
     self.assertEqual(12345, anomaly_keys[0].get().bug_id)
Ejemplo n.º 28
0
 def testPost_SendsNotificationEmail(self):
   self.testapp.post('/edit_site_config', {
       'key': 'foo',
       'external_value': '{"x": "y"}',
       'internal_value': '{"x": "yz"}',
       'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
   })
   messages = self.mail_stub.get_sent_messages()
   self.assertEqual(1, len(messages))
   self.assertEqual('*****@*****.**', messages[0].sender)
   self.assertEqual('*****@*****.**', messages[0].to)
   self.assertEqual(
       'Config "foo" changed by [email protected]', messages[0].subject)
   self.assertIn('{"x": "y"}', str(messages[0].body))
   self.assertIn('{"x": "yz"}', str(messages[0].body))
 def testPost_NudgeWithInvalidRevisions_ReturnsError(self):
     anomaly_keys = self._AddAnomaliesToDataStore()
     self.SetCurrentUser('*****@*****.**')
     start = anomaly_keys[0].get().start_revision
     end = anomaly_keys[0].get().end_revision
     response = self.testapp.post(
         '/edit_anomalies', {
             'keys': json.dumps([anomaly_keys[0].urlsafe()]),
             'new_start_revision': 'a',
             'new_end_revision': 'b',
             'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
         })
     self.assertEqual(start, anomaly_keys[0].get().start_revision)
     self.assertEqual(end, anomaly_keys[0].get().end_revision)
     self.assertEqual({'error': 'Invalid revisions a, b'},
                      json.loads(response.body))
Ejemplo n.º 30
0
 def testPost_AddNewSheriff(self):
     self.testapp.post(
         '/edit_sheriffs', {
             'add-edit': 'add',
             'add-name': 'New Sheriff',
             'email': '*****@*****.**',
             'internal-only': 'true',
             'summarize': 'true',
             'xsrf_token': xsrf.GenerateToken(users.get_current_user()),
         })
     sheriffs = sheriff.Sheriff.query().fetch()
     self.assertEqual(1, len(sheriffs))
     self.assertEqual('New Sheriff', sheriffs[0].key.string_id())
     self.assertEqual('*****@*****.**', sheriffs[0].email)
     self.assertEqual([], sheriffs[0].patterns)
     self.assertTrue(sheriffs[0].internal_only)
     self.assertTrue(sheriffs[0].summarize)