View Javadoc
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              // Test values on convenience methods match
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 }