1 package emissary.kff;
2
3 import emissary.test.core.junit5.UnitTest;
4
5 import org.junit.jupiter.api.Test;
6
7 import java.util.ArrayList;
8 import java.util.Iterator;
9 import java.util.List;
10 import java.util.Set;
11
12 import static org.junit.jupiter.api.Assertions.assertEquals;
13 import static org.junit.jupiter.api.Assertions.assertFalse;
14 import static org.junit.jupiter.api.Assertions.assertNotNull;
15 import static org.junit.jupiter.api.Assertions.fail;
16
17 class KffChainTest extends UnitTest {
18
19 static final byte[] DATA = "This is a test".getBytes();
20
21 @Test
22 void testAlgorithmsUsedWithAddAlgorithm() {
23 KffChain chain = new KffChain();
24 chain.addAlgorithm("MD5");
25 chain.addAlgorithm("SHA-1");
26 chain.addAlgorithm("SHA-256");
27
28 assertEquals(3, chain.getAlgorithms().size(), "Algorithms stored in chain");
29
30 try {
31 ChecksumResults cr = chain.computeSums(DATA);
32 Set<String> algs = cr.getResultsPresent();
33 assertNotNull(algs, "Algorithm set returned");
34 assertEquals(3, algs.size(), "All results present");
35 Iterator<String> i = algs.iterator();
36 assertEquals("MD5", i.next(), "MD5 alg present");
37 assertEquals("SHA-1", i.next(), "SHA-1 alg present");
38 assertEquals("SHA-256", i.next(), "SHA-256 alg present");
39 } catch (Exception ex) {
40 fail("Could not compute results", ex);
41 }
42 }
43
44 @Test
45 void testAlgorithmsUsedWithSetAlgorithm() {
46 KffChain chain = new KffChain();
47 List<String> myAlgs = new ArrayList<>();
48 myAlgs.add("MD5");
49 myAlgs.add("SHA-1");
50 myAlgs.add("SHA-256");
51 chain.setAlgorithms(myAlgs);
52 assertEquals(3, chain.getAlgorithms().size(), "Algorithms stored in chain");
53 try {
54 ChecksumResults cr = chain.computeSums(DATA);
55 Set<String> algs = cr.getResultsPresent();
56 assertNotNull(algs, "Algorithm set returned");
57 assertEquals(3, algs.size(), "All results present");
58 Iterator<String> i = algs.iterator();
59 assertEquals("MD5", i.next(), "MD5 alg present");
60 assertEquals("SHA-1", i.next(), "SHA-1 alg present");
61 assertEquals("SHA-256", i.next(), "SHA-256 alg present");
62 } catch (Exception ex) {
63 fail("Could not compute results", ex);
64 }
65 }
66
67 @Test
68 void testComputationsOnEmptyFilterChain() {
69 KffChain chain = new KffChain();
70 List<String> myAlgs = new ArrayList<>();
71 myAlgs.add("MD5");
72 myAlgs.add("SHA-1");
73 myAlgs.add("SHA-256");
74 chain.setAlgorithms(myAlgs);
75
76 assertEquals(3, chain.getAlgorithms().size(), "Algorithms stored in chain");
77 assertEquals(0, chain.size(), "Size of chain is zero");
78 try {
79 KffResult kr = chain.check("TEST ITEM", DATA);
80 Set<String> algs = kr.getResultNames();
81 assertNotNull(algs, "Algorithm set returned");
82 assertEquals(3, algs.size(), "All results present");
83 Iterator<String> i = algs.iterator();
84 assertEquals("MD5", i.next(), "MD5 alg present");
85 assertEquals("SHA-1", i.next(), "SHA-1 alg present");
86 assertEquals("SHA-256", i.next(), "SHA-256 alg present");
87 assertEquals("TEST ITEM", kr.getItemName(), "Item name copied");
88
89
90 assertEquals(kr.getResultString("SHA-1"), kr.getShaString(), "SHA-1 convenience method");
91
92 byte[] md5c = kr.getMd5();
93 byte[] md5r = kr.getResult("MD5");
94 assertEquals(md5c.length, md5r.length, "MD5 Results match");
95 for (int j = 0; j < md5c.length; j++) {
96 assertEquals(md5r[j], md5c[j], "MD5 results match at pos " + j);
97 }
98
99 assertFalse(kr.isHit(), "Cannot have a hit on zero length chain");
100 } catch (Exception ex) {
101 fail("Could not compute results", ex);
102 }
103 }
104
105 }