def test_set_duplicate_exception_delete_a_duplicate(self):
     set_duplicate(self.finding_a, self.finding_b)
     self.assertEqual(self.finding_b.original_finding.first().id,
                      self.finding_a.id)
     self.finding_a.delete()
     self.assertEqual(self.finding_a.id, None)
     self.assertEqual(self.finding_b.original_finding.first(), None)
Esempio n. 2
0
    def test_false_positive_reopen(self):
        self.finding_a.active = False
        self.finding_a.verified = False  # in the gui, a FP can not be true
        set_duplicate(self.finding_b, self.finding_a)
        self.finding_b.duplicate = True
        self.finding_b.duplicate_finding = self.finding_a

        super(Finding, self.finding_a).save()
        super(Finding, self.finding_b).save()

        fix_loop_duplicates()

        candidates = Finding.objects.filter(
            duplicate_finding__isnull=False,
            original_finding__isnull=False).count()
        self.assertEqual(candidates, 0)

        # Get latest status
        self.finding_a = Finding.objects.get(id=self.finding_a.id)
        self.finding_b = Finding.objects.get(id=self.finding_b.id)

        self.assertTrue(self.finding_a.false_p)
        self.assertTrue(self.finding_a.is_Mitigated)
        self.assertFalse(self.finding_a.active)
        self.assertFalse(self.finding_a.verified)

        self.assertFalse(self.finding_b.false_p)
        self.assertFalse(self.finding_b.is_Mitigated)
        self.assertFalse(self.finding_b.active)
        self.assertFalse(self.finding_b.verified)
Esempio n. 3
0
 def test_set_duplicate_exception_delete_2(self):
     set_duplicate(self.finding_a, self.finding_b)
     self.assertEqual(self.finding_b.original_finding.first().id, self.finding_a.id)
     self.finding_b.delete()
     with self.assertRaises(Finding.DoesNotExist):
         self.finding_a = Finding.objects.get(id=self.finding_a.id)
     self.assertEqual(self.finding_b.id, None)
    def test_out_of_scope_reopen(self):
        self.finding_c.active = False
        self.finding_c.verified = False
        set_duplicate(self.finding_d, self.finding_c)
        self.finding_d.duplicate = True
        self.finding_d.duplicate_finding = self.finding_c

        super(Finding, self.finding_c).save()
        super(Finding, self.finding_d).save()

        fix_loop_duplicates()

        candidates = Finding.objects.filter(
            duplicate_finding__isnull=False,
            original_finding__isnull=False).count()
        self.assertEqual(candidates, 0)

        # Get latest status
        self.finding_c = Finding.objects.get(id=self.finding_c.id)
        self.finding_d = Finding.objects.get(id=self.finding_d.id)

        self.assertTrue(self.finding_c.out_of_scope)
        self.assertFalse(self.finding_c.is_Mitigated)
        self.assertFalse(self.finding_c.active)
        self.assertFalse(self.finding_c.verified)

        self.assertFalse(self.finding_d.out_of_scope)
        self.assertFalse(self.finding_d.is_Mitigated)
        self.assertFalse(self.finding_d.active)
        self.assertFalse(self.finding_d.verified)
    def test_list_relations_for_three_reverse(self):
        # C -> B, B -> A
        set_duplicate(self.finding_c, self.finding_b)
        self.finding_b.duplicate = True
        self.finding_b.duplicate_finding = self.finding_a

        super(Finding, self.finding_a).save()
        super(Finding, self.finding_b).save()
        super(Finding, self.finding_c).save()

        loop_count = fix_loop_duplicates()
        self.assertEqual(loop_count, 0)

        self.finding_a = Finding.objects.get(id=self.finding_a.id)
        self.finding_b = Finding.objects.get(id=self.finding_b.id)
        self.finding_c = Finding.objects.get(id=self.finding_c.id)

        # B -> A, C -> A
        self.assertTrue(self.finding_b.duplicate)
        self.assertTrue(self.finding_c.duplicate)
        self.assertFalse(self.finding_a.duplicate)
        self.assertEqual(self.finding_b.duplicate_finding.id,
                         self.finding_a.id)
        self.assertEqual(self.finding_c.duplicate_finding.id,
                         self.finding_a.id)
        self.assertEqual(self.finding_a.duplicate_finding, None)
        self.assertEqual(self.finding_c.duplicate_finding_set().count(), 2)
        self.assertEqual(self.finding_b.duplicate_finding_set().count(), 2)
Esempio n. 6
0
    def test_loop_relations_for_two(self):

        set_duplicate(self.finding_a, self.finding_b)
        self.finding_b.duplicate = True
        self.finding_b.duplicate_finding = self.finding_a

        super(Finding, self.finding_a).save()
        super(Finding, self.finding_b).save()

        fix_loop_duplicates()

        candidates = Finding.objects.filter(duplicate_finding__isnull=False, original_finding__isnull=False).count()
        self.assertEqual(candidates, 0)

        # Get latest status
        self.finding_a = Finding.objects.get(id=self.finding_a.id)
        self.finding_b = Finding.objects.get(id=self.finding_b.id)

        if self.finding_a.duplicate_finding:
            self.assertTrue(self.finding_a.duplicate)
            self.assertEqual(self.finding_a.original_finding.count(), 0)
        else:
            self.assertFalse(self.finding_a.duplicate)
            self.assertEqual(self.finding_a.original_finding.count(), 1)

        if self.finding_b.duplicate_finding:
            self.assertTrue(self.finding_b.duplicate)
            self.assertEqual(self.finding_b.original_finding.count(), 0)
        else:
            self.assertFalse(self.finding_b.duplicate)
            self.assertEqual(self.finding_b.original_finding.count(), 1)
    def test_loop_relations_for_four(self):
        self.finding_d = Finding.objects.get(id=4)
        self.finding_d.pk = None
        self.finding_d.duplicate = False
        self.finding_d.duplicate_finding = None
        self.finding_d.save()

        # A -> B, B -> C, C -> D, D -> A
        set_duplicate(self.finding_a, self.finding_b)
        self.finding_b.duplicate = True
        self.finding_b.duplicate_finding = self.finding_c
        self.finding_c.duplicate = True
        self.finding_c.duplicate_finding = self.finding_d
        self.finding_d.duplicate = True
        self.finding_d.duplicate_finding = self.finding_a

        super(Finding, self.finding_a).save()
        super(Finding, self.finding_b).save()
        super(Finding, self.finding_c).save()
        super(Finding, self.finding_d).save()

        loop_count = fix_loop_duplicates()
        self.assertEqual(loop_count, 0)

        # Get latest status
        self.finding_a = Finding.objects.get(id=self.finding_a.id)
        self.finding_b = Finding.objects.get(id=self.finding_b.id)
        self.finding_c = Finding.objects.get(id=self.finding_c.id)
        self.finding_d = Finding.objects.get(id=self.finding_d.id)

        if self.finding_a.duplicate_finding:
            self.assertTrue(self.finding_a.duplicate)
            self.assertEqual(self.finding_a.original_finding.count(), 0)
        else:
            self.assertFalse(self.finding_a.duplicate)
            self.assertEqual(self.finding_a.original_finding.count(), 3)

        if self.finding_b.duplicate_finding:
            self.assertTrue(self.finding_b.duplicate)
            self.assertEqual(self.finding_b.original_finding.count(), 0)
        else:
            self.assertFalse(self.finding_b.duplicate)
            self.assertEqual(self.finding_b.original_finding.count(), 3)

        if self.finding_c.duplicate_finding:
            self.assertTrue(self.finding_c.duplicate)
            self.assertEqual(self.finding_c.original_finding.count(), 0)
        else:
            self.assertFalse(self.finding_c.duplicate)
            self.assertEqual(self.finding_c.original_finding.count(), 3)

        if self.finding_d.duplicate_finding:
            self.assertTrue(self.finding_d.duplicate)
            self.assertEqual(self.finding_d.original_finding.count(), 0)
        else:
            self.assertFalse(self.finding_d.duplicate)
            self.assertEqual(self.finding_d.original_finding.count(), 3)
 def test_set_duplicate_exception_delete_original_cascade(self):
     set_duplicate(self.finding_a, self.finding_b)
     self.assertEqual(self.finding_b.original_finding.first().id,
                      self.finding_a.id)
     logger.debug('going to delete finding B')
     self.finding_b.delete()
     logger.debug('deleted finding B')
     with self.assertRaises(Finding.DoesNotExist):
         self.finding_a = Finding.objects.get(id=self.finding_a.id)
     self.assertEqual(self.finding_b.id, None)
Esempio n. 9
0
    def test_set_duplicate_basic(self):
        set_duplicate(self.finding_a, self.finding_b)

        self.assertTrue(self.finding_a.duplicate)
        self.assertFalse(self.finding_b.duplicate)
        self.assertEqual(self.finding_a.duplicate_finding.id, self.finding_b.id)
        self.assertEqual(self.finding_b.duplicate_finding, None)
        self.assertEqual(self.finding_b.original_finding.first().id, self.finding_a.id)
        self.assertEqual(self.finding_a.duplicate_finding_set().count(), 1)
        self.assertEqual(self.finding_b.duplicate_finding_set().count(), 1)
        self.assertEqual(self.finding_b.duplicate_finding_set().first().id, self.finding_a.id)
Esempio n. 10
0
    def test_set_duplicate_exception_merge(self):
        set_duplicate(self.finding_a, self.finding_b)
        set_duplicate(self.finding_b, self.finding_c)

        self.finding_a = Finding.objects.get(id=self.finding_a.id)
        self.assertTrue(self.finding_b.duplicate)
        self.assertTrue(self.finding_a.duplicate)
        self.assertFalse(self.finding_c.duplicate)
        self.assertEqual(self.finding_b.duplicate_finding.id, self.finding_c.id)
        self.assertEqual(self.finding_a.duplicate_finding.id, self.finding_c.id)
        self.assertEqual(self.finding_c.duplicate_finding, None)
        self.assertEqual(self.finding_a.duplicate_finding_set().count(), 2)
        self.assertEqual(self.finding_b.duplicate_finding_set().count(), 2)
        self.assertEqual(self.finding_a.duplicate_finding.id, self.finding_c.id)
 def test_set_duplicate_exception_delete_original_1_duplicate_adapt(self):
     set_duplicate(self.finding_a, self.finding_b)
     self.assertEqual(self.finding_b.original_finding.first().id,
                      self.finding_a.id)
     logger.debug('going to delete finding B')
     b_id = self.finding_b.id
     self.finding_b.delete()
     logger.debug('deleted finding B')
     self.finding_a.refresh_from_db()
     self.assertEqual(self.finding_a.original_finding.first(), None)
     self.assertEqual(self.finding_a.duplicate_finding, None)
     self.assertEqual(self.finding_a.duplicate, False)
     self.assertEqual(self.finding_a.active, True)
     with self.assertRaises(Finding.DoesNotExist):
         self.finding_b = Finding.objects.get(id=b_id)
Esempio n. 12
0
    def test_out_of_scope_reopen(self):
        logger.debug('c: is_mitigated1: %s', self.finding_c.is_Mitigated)
        logger.debug('d: is_mitigated1: %s', self.finding_d.is_Mitigated)
        self.finding_c.active = False
        self.finding_c.verified = False

        logger.debug('set_duplicate(d,c)')
        set_duplicate(self.finding_d, self.finding_c)

        logger.debug('c: is_mitigated2: %s', self.finding_c.is_Mitigated)
        logger.debug('d: is_mitigated2: %s', self.finding_d.is_Mitigated)

        # self.finding_d.duplicate = True
        # self.finding_d.duplicate_finding = self.finding_c

        logger.debug('saving finding_c')
        super(Finding, self.finding_c).save()
        logger.debug('saving finding_d')
        super(Finding, self.finding_d).save()

        logger.debug('c: is_mitigated3: %s', self.finding_c.is_Mitigated)
        logger.debug('d: is_mitigated3: %s', self.finding_d.is_Mitigated)

        candidates = Finding.objects.filter(
            duplicate_finding__isnull=False,
            original_finding__isnull=False).count()
        self.assertEqual(candidates, 0)

        # Get latest status
        self.finding_c = Finding.objects.get(id=self.finding_c.id)
        self.finding_d = Finding.objects.get(id=self.finding_d.id)

        self.assertTrue(self.finding_c.out_of_scope)
        self.assertTrue(self.finding_c.is_Mitigated)
        self.assertFalse(self.finding_c.active)
        self.assertFalse(self.finding_c.verified)

        self.assertFalse(self.finding_d.out_of_scope)
        self.assertFalse(self.finding_d.is_Mitigated)
        self.assertFalse(self.finding_d.active)
        self.assertFalse(self.finding_d.verified)
Esempio n. 13
0
    def test_loop_relations_for_three(self):

        set_duplicate(self.finding_a, self.finding_b)
        self.finding_b.duplicate = True
        self.finding_b.duplicate_finding = self.finding_c
        self.finding_c.duplicate = True
        self.finding_c.duplicate_finding = self.finding_a

        super(Finding, self.finding_a).save()
        super(Finding, self.finding_b).save()
        super(Finding, self.finding_c).save()

        fix_loop_duplicates()

        # Get latest status
        self.finding_a = Finding.objects.get(id=self.finding_a.id)
        self.finding_b = Finding.objects.get(id=self.finding_b.id)
        self.finding_c = Finding.objects.get(id=self.finding_c.id)

        if self.finding_a.duplicate_finding:
            self.assertTrue(self.finding_a.duplicate)
            self.assertEqual(self.finding_a.original_finding.count(), 0)
        else:
            self.assertFalse(self.finding_a.duplicate)
            self.assertEqual(self.finding_a.original_finding.count(), 2)

        if self.finding_b.duplicate_finding:
            self.assertTrue(self.finding_b.duplicate)
            self.assertEqual(self.finding_b.original_finding.count(), 0)
        else:
            self.assertFalse(self.finding_b.duplicate)
            self.assertEqual(self.finding_b.original_finding.count(), 2)

        if self.finding_c.duplicate_finding:
            self.assertTrue(self.finding_c.duplicate)
            self.assertEqual(self.finding_c.original_finding.count(), 0)
        else:
            self.assertFalse(self.finding_c.duplicate)
            self.assertEqual(self.finding_c.original_finding.count(), 2)
Esempio n. 14
0
    def test_list_relations_for_three(self):

        set_duplicate(self.finding_a, self.finding_b)
        self.finding_b.duplicate = True
        self.finding_b.duplicate_finding = self.finding_c

        super(Finding, self.finding_a).save()
        super(Finding, self.finding_b).save()
        super(Finding, self.finding_c).save()

        fix_loop_duplicates()

        self.finding_a = Finding.objects.get(id=self.finding_a.id)
        self.finding_b = Finding.objects.get(id=self.finding_b.id)
        self.finding_c = Finding.objects.get(id=self.finding_c.id)

        self.assertTrue(self.finding_b.duplicate)
        self.assertTrue(self.finding_a.duplicate)
        self.assertFalse(self.finding_c.duplicate)
        self.assertEqual(self.finding_b.duplicate_finding.id, self.finding_c.id)
        self.assertEqual(self.finding_a.duplicate_finding.id, self.finding_c.id)
        self.assertEqual(self.finding_c.duplicate_finding, None)
        self.assertEqual(self.finding_a.duplicate_finding_set().count(), 2)
        self.assertEqual(self.finding_b.duplicate_finding_set().count(), 2)
 def test_set_duplicate_exception_3(self):
     set_duplicate(self.finding_a, self.finding_b)
     set_duplicate(self.finding_c, self.finding_b)
     with self.assertRaisesRegex(Exception,
                                 "Existing finding is a duplicate"):
         set_duplicate(self.finding_a, self.finding_c)
 def test_set_duplicate_exception_2(self):
     with self.assertRaisesRegex(Exception,
                                 "Can not add duplicate to itself"):
         set_duplicate(self.finding_b, self.finding_b)
 def test_set_duplicate_exception_1(self):
     self.finding_a.duplicate = True
     self.finding_a.save()
     with self.assertRaisesRegex(Exception,
                                 "Existing finding is a duplicate"):
         set_duplicate(self.finding_b, self.finding_a)