|
11 | 11 | HAMMING_TOLERANCE = sentinel.hamming_tolerance
|
12 | 12 | HIGH_FREQUENCY_FACTOR = sentinel.high_freq_factor
|
13 | 13 |
|
| 14 | +#: baseline hash (32-bit) |
| 15 | +HASH_BASE_32 = "01234567" |
| 16 | + |
14 | 17 | #: baseline hash (64-bit)
|
15 | 18 | HASH_BASE = "0123456789abcdef"
|
16 | 19 |
|
17 |
| -#: 2-bit baseline delta (64-bit) |
| 20 | +#: baseline hash with 2-bit delta (64-bit) |
18 | 21 | # ---X------------
|
19 | 22 | HASH_2BIT = "0120456789abcdef"
|
20 | 23 |
|
21 |
| -#: 4-bit baseline delta (64-bit) |
| 24 | +#: baseline with 4-bit delta (64-bit) |
22 | 25 | # --XX-----------X
|
23 | 26 | HASH_4BIT = "0100456789abcdee"
|
24 | 27 |
|
@@ -52,7 +55,13 @@ def test_kernel_abc():
|
52 | 55 |
|
53 | 56 |
|
54 | 57 | def test_phash_name():
|
55 |
| - assert KernelPHash.name == KERNEL_PHASH |
| 58 | + for name, factory in kernel_factory.items(): |
| 59 | + assert name == factory.name |
| 60 | + |
| 61 | + |
| 62 | +# |
| 63 | +# KernelPHash |
| 64 | +# |
56 | 65 |
|
57 | 66 |
|
58 | 67 | def test_phash_init__set():
|
@@ -85,7 +94,12 @@ def test_phash_option():
|
85 | 94 |
|
86 | 95 | @pytest.mark.parametrize(
|
87 | 96 | "baseline,equivalent,distance",
|
88 |
| - [(HASH_BASE, True, 0), (HASH_2BIT, True, 2), (HASH_4BIT, False, 4)], |
| 97 | + [ |
| 98 | + (HASH_BASE, True, 0), |
| 99 | + (HASH_2BIT, True, 2), |
| 100 | + (HASH_4BIT, False, 4), |
| 101 | + (HASH_BASE_32, False, None), |
| 102 | + ], |
89 | 103 | )
|
90 | 104 | def test_phash_equivalent(baseline, equivalent, distance):
|
91 | 105 | kernel = KernelPHash(DummyPlugin())
|
@@ -188,3 +202,42 @@ def test_phash_update_summary(summary, distance, tolerance, count):
|
188 | 202 | assert summary["hamming_distance"] == distance
|
189 | 203 | assert summary["hamming_tolerance"] == tolerance
|
190 | 204 | assert len(summary) == count
|
| 205 | + |
| 206 | + |
| 207 | +# |
| 208 | +# KernelSHA256 |
| 209 | +# |
| 210 | + |
| 211 | + |
| 212 | +@pytest.mark.parametrize( |
| 213 | + "baseline, equivalent", |
| 214 | + [(HASH_BASE, True), (HASH_2BIT, False), (HASH_4BIT, False)], |
| 215 | +) |
| 216 | +def test_sha256_equivalent(baseline, equivalent): |
| 217 | + kernel = KernelSHA256(DummyPlugin()) |
| 218 | + assert kernel.equivalent_hash(HASH_BASE, baseline) is equivalent |
| 219 | + |
| 220 | + |
| 221 | +@pytest.mark.skipif(baseline_unavailable, reason=baseline_missing) |
| 222 | +def test_sha256_generate_hash(): |
| 223 | + kernel = KernelSHA256(DummyPlugin()) |
| 224 | + fh = open(baseline_image, "rb") |
| 225 | + actual = kernel.generate_hash(fh) |
| 226 | + expected = "2dc4d32eefa5f5d11c365b10196f2fcdadc8ed604e370d595f9cf304363c13d2" |
| 227 | + assert actual == expected |
| 228 | + |
| 229 | + |
| 230 | +def test_sha256_update_status(): |
| 231 | + kernel = KernelSHA256(DummyPlugin()) |
| 232 | + message = sentinel.message |
| 233 | + result = kernel.update_status(message) |
| 234 | + assert result is message |
| 235 | + |
| 236 | + |
| 237 | +def test_sha256_update_summary(): |
| 238 | + kernel = KernelSHA256(DummyPlugin()) |
| 239 | + summary = {} |
| 240 | + kernel.update_summary(summary) |
| 241 | + assert len(summary) == 1 |
| 242 | + assert "kernel" in summary |
| 243 | + assert summary["kernel"] == KernelSHA256.name |
0 commit comments