示例#1
0
    def test_group_exceed_max_testcases(self):
        """Test that group auto-shrinks when it exceeds maximum number of
    testcases."""
        for i in range(1, 31):
            testcase = test_utils.create_generic_testcase()
            testcase.crash_type = 'Heap-buffer-overflow'
            testcase.crash_state = 'abcdefgh' + str(i)
            testcase.project_name = 'project'
            testcase.one_time_crasher_flag = False

            # Attach actual issues to some testcases.
            if i in [3, 4, 5]:
                testcase.bug_information = '123'

            # Make some testcases unreproducible.
            if i in [1, 2, 3]:
                testcase.one_time_crasher_flag = True

            testcase.put()

        unrelated_testcase = test_utils.create_generic_testcase()

        grouper.group_testcases()

        testcase_ids = list(data_handler.get_open_testcase_id_iterator())

        # [1, 2] get removed since they are unreproducible testcases.
        # [3] is not removed since it has bug attached (even though unreproducible).
        # [6, 7, 8] are removed to account for max group size. Even though they
        # are reproducible, they are the ones with least weight.
        expected_testcase_ids = [3, 4, 5] + list(range(
            9, 31)) + [unrelated_testcase.key.id()]
        self.assertEqual(expected_testcase_ids, testcase_ids)
示例#2
0
    def test_group_of_one(self):
        """Test that a group id with just one testcase gets removed."""
        self.testcases[0].group_id = 1
        self.testcases[0].put()
        self.testcases[1].key.delete()

        grouper.group_testcases()

        testcase = data_handler.get_testcase_by_id(self.testcases[0].key.id())
        self.assertEqual(testcase.group_id, 0)
        self.assertTrue(testcase.is_leader)
示例#3
0
    def test_different_crash_same_security(self):
        """Test that crashes with different crash states and same security flags
      don't get grouped together."""
        self.testcases[0].security_flag = True
        self.testcases[0].crash_state = 'abc\ndef'
        self.testcases[1].security_flag = True
        self.testcases[1].crash_state = 'uvw\nxyz'

        for t in self.testcases:
            t.put()

        grouper.group_testcases()

        for index, t in enumerate(self.testcases):
            self.testcases[index] = data_handler.get_testcase_by_id(t.key.id())
            self.assertEqual(self.testcases[index].group_id, 0)
            self.assertTrue(self.testcases[index].is_leader)
示例#4
0
    def test_same_crash_different_security(self):
        """Test that crashes with same crash states, but different security
      flags."""
        self.testcases[0].security_flag = False
        self.testcases[0].crash_state = 'abc\ndef'
        self.testcases[1].security_flag = True
        self.testcases[1].crash_state = 'abc\ndef'

        for t in self.testcases:
            t.put()

        grouper.group_testcases()

        for index, t in enumerate(self.testcases):
            self.testcases[index] = data_handler.get_testcase_by_id(t.key.id())
            self.assertEqual(self.testcases[index].group_id, 0)
            self.assertTrue(self.testcases[index].is_leader)
示例#5
0
    def test_same_crash_same_security(self):
        """Test that crashes with same crash states and same security flags get
    de-duplicated with one of them removed."""
        for index, t in enumerate(self.testcases):
            t.security_flag = True
            t.crash_state = 'abc\ndef'
            t.timestamp = datetime.datetime.utcfromtimestamp(index)
            t.put()

        grouper.group_testcases()

        testcases = []
        for testcase_id in data_handler.get_open_testcase_id_iterator():
            testcases.append(data_handler.get_testcase_by_id(testcase_id))

        self.assertEqual(len(testcases), 1)
        self.assertEqual(testcases[0].group_id, 0)
        self.assertTrue(testcases[0].is_leader)
示例#6
0
    def test_different_crash_type_with_similar_state(self):
        """Test that the crashes with different crash types (one of them unique) and
    similar crash state don't get grouped together."""
        self.testcases[0].security_flag = False
        self.testcases[0].crash_type = 'Timeout'
        self.testcases[0].crash_state = 'abcdef'
        self.testcases[1].security_flag = False
        self.testcases[1].crash_type = 'TimeoutX'
        self.testcases[1].crash_state = 'abcde'

        for t in self.testcases:
            t.put()

        grouper.group_testcases()

        for index, t in enumerate(self.testcases):
            self.testcases[index] = data_handler.get_testcase_by_id(t.key.id())
            self.assertEqual(self.testcases[index].group_id, 0)
            self.assertTrue(self.testcases[index].is_leader)
示例#7
0
    def test_different_unique_crash_type_with_same_state(self):
        """Test that the crashes with different unique crash type but same state
    don't get grouped together."""
        self.testcases[0].security_flag = False
        self.testcases[0].crash_type = 'Timeout'
        self.testcases[0].crash_state = 'abcde'
        self.testcases[1].security_flag = False
        self.testcases[1].crash_type = 'Out-of-memory'
        self.testcases[1].crash_state = 'abcde'

        for t in self.testcases:
            t.put()

        grouper.group_testcases()

        for index, t in enumerate(self.testcases):
            self.testcases[index] = data_handler.get_testcase_by_id(t.key.id())
            self.assertEqual(self.testcases[index].group_id, 0)
            self.assertTrue(self.testcases[index].is_leader)
示例#8
0
    def test_different_project_name_with_similar_state(self):
        """Test that the crashes with different project names and similar crash
    state don't get grouped together."""
        self.testcases[0].security_flag = False
        self.testcases[0].crash_type = 'Heap-buffer-overflow'
        self.testcases[0].crash_state = 'abcdef'
        self.testcases[0].project_name = 'project1'
        self.testcases[1].security_flag = False
        self.testcases[1].crash_type = 'Heap-buffer-overflow'
        self.testcases[1].crash_state = 'abcde'
        self.testcases[1].project_name = 'project2'

        for t in self.testcases:
            t.put()

        grouper.group_testcases()

        for index, t in enumerate(self.testcases):
            self.testcases[index] = data_handler.get_testcase_by_id(t.key.id())
            self.assertEqual(self.testcases[index].group_id, 0)
            self.assertTrue(self.testcases[index].is_leader)
示例#9
0
    def test_unminimized(self):
        """Test that unminimized testcase is not processed for grouping."""
        self.testcases[0].security_flag = True
        self.testcases[0].crash_state = 'abc\ndef'
        self.testcases[0].crash_type = 'Heap-buffer-overflow\nREAD {*}'
        self.testcases[0].minimized_keys = None
        self.testcases[1].security_flag = True
        self.testcases[1].crash_state = 'abc\ndef'
        self.testcases[1].crash_type = 'Heap-buffer-overflow\nREAD 3'

        for t in self.testcases:
            t.put()

        grouper.group_testcases()

        testcases = []
        for testcase_id in data_handler.get_open_testcase_id_iterator():
            testcases.append(data_handler.get_testcase_by_id(testcase_id))

        self.assertEqual(len(testcases), 2)
        self.assertEqual(testcases[0].group_id, 0)
        self.assertFalse(testcases[0].is_leader)
        self.assertEqual(testcases[1].group_id, 0)
        self.assertTrue(testcases[1].is_leader)
示例#10
0
    def test_same_unique_crash_type_with_same_state(self):
        """Test that the crashes with same unique crash type and same state get
    de-duplicated with one of them removed.."""
        self.testcases[0].security_flag = False
        self.testcases[0].crash_type = 'Timeout'
        self.testcases[0].crash_state = 'abcde'
        self.testcases[0].timestamp = datetime.datetime.utcfromtimestamp(0)
        self.testcases[1].security_flag = False
        self.testcases[1].crash_type = 'Timeout'
        self.testcases[1].crash_state = 'abcde'
        self.testcases[1].timestamp = datetime.datetime.utcfromtimestamp(1)

        for t in self.testcases:
            t.put()

        grouper.group_testcases()

        testcases = []
        for testcase_id in data_handler.get_open_testcase_id_iterator():
            testcases.append(data_handler.get_testcase_by_id(testcase_id))

        self.assertEqual(len(testcases), 1)
        self.assertEqual(testcases[0].group_id, 0)
        self.assertTrue(testcases[0].is_leader)