Exemple #1
0
    def test_longest_common_prefix(self, prefix, suffix):
        prefix_fragment = MatchFragment(prefix)
        fragment = MatchFragment(prefix + suffix)

        self.assertEqual(fragment.longest_common_prefix(prefix_fragment),
                         prefix_fragment.longest_common_prefix(fragment))

        self.assertEqual(len(prefix),
                         fragment.longest_common_prefix(prefix_fragment))
Exemple #2
0
    def test_prefix_non_matching_fuzziness(self, data):
        tmpl_1, fuzz_1, tmpl_2, fuzz_2 = data
        assume(fuzz_1 != fuzz_2)

        i = 0
        while fuzz_1[i] == fuzz_2[i]:
            i += 1

        self.assertLessEqual(
            MatchFragment(tmpl_1, fuzziness=fuzz_1).longest_common_prefix(
                MatchFragment(tmpl_2, fuzziness=fuzz_2)), i)
Exemple #3
0
 def test_identity_matching(self, match):
     assume(match)
     match_frag = MatchFragment(match)
     graph = Graph()
     graph.insert(match_frag, match)
     matches = list(graph.match(match))
     note(
         f"frag: {match_frag}, target: {match}, matches: {matches}, graph: {graph}"
     )
     self.assertIn(([match], len(match), len(match)), matches)
Exemple #4
0
    def test_graph_constraints(self, data):
        graph = Graph()
        for binary in data:
            graph.insert(MatchFragment(binary), binary)

        self.assertLessEqual(len(list(graph.edges_at(0))), len(data))

        if data:
            self.assertEqual(max(len(binary) for binary in data),
                             graph._get_max_match_size(0))
Exemple #5
0
    def test_data_existence(self, data):
        graph = Graph()
        for binary in data:
            graph.insert(MatchFragment(binary), binary)

        g_data = list(itertools.chain.from_iterable(graph.data.values()))
        self.assertEqual(len(g_data), len(data))

        for binary in data:
            self.assertIn(binary, g_data)
Exemple #6
0
 def comparer(self) -> MatchFragment:
     """Create an object that can be compared to string,
     other matchers and be split at given positions"""
     return MatchFragment(self.template, self.fuzziness)
Exemple #7
0
 def test_inequality_longest_prefix(self, bin_a, bin_b):
     assume(bin_a != bin_b)
     self.assertLessEqual(
         MatchFragment(bin_a).longest_common_prefix(MatchFragment(bin_b)),
         min(len(bin_a), len(bin_b)))
Exemple #8
0
 def test_inequality(self, bin_a, bin_b):
     assume(bin_a != bin_b)
     self.assertNotEqual(MatchFragment(bin_a), bin_b)
Exemple #9
0
 def test_fuzz_all(self, testers):
     tester, tester2 = testers
     a = MatchFragment(tester, fuzziness=bytes([1] * len(tester)))
     self.assertEqual(a, tester2)
Exemple #10
0
 def test_fuzzy_inequality(self, pair):
     tmpl_1, tmpl_2 = pair
     assume(tmpl_2 != tmpl_1)
     fuzz = [a == b for a, b in zip(tmpl_1, tmpl_2)]
     a = MatchFragment(tmpl_1, fuzziness=fuzz)
     self.assertNotEqual(a, tmpl_2)
Exemple #11
0
 def test_fuzzy_equality(self, pair):
     tmpl_1, tmpl_2 = pair
     fuzz = [a != b for a, b in zip(tmpl_1, tmpl_2)]
     a = MatchFragment(tmpl_1, fuzziness=fuzz)
     self.assertEqual(a, tmpl_2)
Exemple #12
0
 def test_fuzzy_identity(self, data):
     template, fuzz = data
     a = MatchFragment(template, fuzziness=fuzz)
     self.assertEqual(a, template)
Exemple #13
0
 def test_identity(self, tester):
     a = MatchFragment(tester)
     self.assertEqual(a, tester)
Exemple #14
0
 def setUp(self):
     self.g = Graph()
     self.a = MatchFragment(b"a", bytes([1]))
     self.b = MatchFragment(b"ba", bytes([1, 1]))
     self.c = MatchFragment(b"ccc", bytes([1, 1, 1]))