View Javadoc
1   package emissary.util.magic;
2   
3   import emissary.test.core.junit5.UnitTest;
4   
5   import jakarta.xml.bind.DatatypeConverter;
6   import org.junit.jupiter.api.Test;
7   
8   import static org.junit.jupiter.api.Assertions.assertFalse;
9   import static org.junit.jupiter.api.Assertions.assertTrue;
10  
11  class MagicNumberTest extends UnitTest {
12  
13      @Test
14      void testCrLf() throws ParseException {
15          MagicNumber m = MagicNumberFactory.buildMagicNumber("0 string \\r\\n\\r\\n FOO");
16          assertTrue(m.test("\r\n\r\nBadCafe".getBytes()), "NEW_LINE in string operators must match " + m);
17          assertFalse(m.test("x\r\n\r\nBadCafe".getBytes()), "NEW_LINE in string operators must not match bad data " + m);
18      }
19  
20      @Test
21      void testCrLfNotAtEnd() throws ParseException {
22          MagicNumber m = MagicNumberFactory.buildMagicNumber("0 string \\r\\n\\r\\nBad FOO");
23          assertTrue(m.test("\r\n\r\nBadCafe".getBytes()), "NEW_LINE in string operators must match " + m);
24          assertFalse(m.test("x\r\n\r\nBadCafe".getBytes()), "NEW_LINE in string operators must not match bad data " + m);
25      }
26  
27      @Test
28      void testBelong() throws ParseException {
29          // ABCD
30          MagicNumber m = MagicNumberFactory.buildMagicNumber("0 belong 0x41424344 FOO");
31          assertTrue(m.test("ABCD".getBytes()), "BELONG hex magic operator must match");
32          assertFalse(m.test("ABCC".getBytes()), "BELONG hex magic operator must not match");
33      }
34  
35      @Test
36      void testBelongDecimal() throws ParseException {
37          // ABCD
38          MagicNumber m = MagicNumberFactory.buildMagicNumber("0 belong 1094861636 FOO");
39          assertTrue(m.test("ABCD".getBytes()), "BELONG decimal magic operator must match: " + m);
40          assertFalse(m.test("ABCC".getBytes()), "BELONG decimal magic operator must not match: " + m);
41      }
42  
43      @Test
44      void testLelong() throws ParseException {
45          // ABCD
46          MagicNumber m = MagicNumberFactory.buildMagicNumber("0 lelong 0x41424344 FOO");
47          assertTrue(m.test("DCBA".getBytes()), "LELONG hex magic operator must match: " + m);
48          assertFalse(m.test("ABCC".getBytes()), "LELONG hex magic operator must not match: " + m);
49      }
50  
51      @Test
52      void testLelongDecimal() throws ParseException {
53          // ABCD
54          MagicNumber m = MagicNumberFactory.buildMagicNumber("0 lelong 1094861636 FOO");
55          assertTrue(m.test("DCBA".getBytes()), "LELONG hex magic operator must match: " + m);
56          assertFalse(m.test("ABCC".getBytes()), "LELONG hex magic operator must not match: " + m);
57      }
58  
59      @Test
60      void testGreaterThanBelong() throws ParseException {
61          // ABCD
62          MagicNumber m = MagicNumberFactory.buildMagicNumber("0 belong >0x41424344 FOO");
63          assertTrue(m.test("ABCE".getBytes()), "Greater than magic operator failed");
64          assertFalse(m.test("ABCD".getBytes()), "Greater than magic operator failed");
65          assertFalse(m.test("ABCC".getBytes()), "Greater than magic operator failed");
66      }
67  
68      @Test
69      void testGreaterEqualBelong() throws ParseException {
70          // ABCD
71          MagicNumber m = MagicNumberFactory.buildMagicNumber("0 belong >=0x41424344 FOO");
72          assertTrue(m.test("ABCE".getBytes()), "GreaterEqual magic operator failed");
73          assertTrue(m.test("ABCD".getBytes()), "GreaterEqual magic operator failed");
74          assertFalse(m.test("ABCC".getBytes()), "GreaterEqual magic operator failed");
75      }
76  
77      @Test
78      void testLessThanBelong() throws ParseException {
79          // ABCD
80          MagicNumber m = MagicNumberFactory.buildMagicNumber("0 belong <0x41424344 FOO");
81          assertTrue(m.test("ABCC".getBytes()), "Less than magic operator failed");
82          assertFalse(m.test("ABCD".getBytes()), "Less than magic operator failed");
83          assertFalse(m.test("ABCE".getBytes()), "Less than magic operator failed");
84      }
85  
86      @Test
87      void testLessEqualBelong() throws ParseException {
88          // ABCD
89          MagicNumber m = MagicNumberFactory.buildMagicNumber("0 belong <=0x41424344 FOO");
90          assertTrue(m.test("ABCC".getBytes()), "LessEqual magic operator failed");
91          assertTrue(m.test("ABCD".getBytes()), "LessEqual magic operator failed");
92          assertFalse(m.test("ABCE".getBytes()), "LessEqual magic operator failed");
93      }
94  
95      @Test
96      void testBeshort() throws ParseException {
97          // AB
98          MagicNumber m = MagicNumberFactory.buildMagicNumber("0 beshort 0x4142 FOO");
99          assertTrue(m.test("AB".getBytes()), "Greater than magic operator failed");
100         assertFalse(m.test("AC".getBytes()), "Greater than magic operator failed");
101     }
102 
103     @Test
104     void testGreaterThanBeshort() throws ParseException {
105         // AB
106         MagicNumber m = MagicNumberFactory.buildMagicNumber("0 beshort >0x4142 FOO");
107         assertTrue(m.test("AC".getBytes()), "Greater than magic operator failed");
108         assertFalse(m.test("AB".getBytes()), "Greater than magic operator failed");
109         assertFalse(m.test("AA".getBytes()), "Greater than magic operator failed");
110     }
111 
112     @Test
113     void testGreaterEqualBeshort() throws ParseException {
114         // AB
115         MagicNumber m = MagicNumberFactory.buildMagicNumber("0 beshort >=0x4142 FOO");
116         assertTrue(m.test("AB".getBytes()), "GreaterEqual magic operator failed");
117         assertTrue(m.test("AC".getBytes()), "GreaterEqual magic operator failed");
118         assertFalse(m.test("AA".getBytes()), "GreaterEqual magic operator failed");
119     }
120 
121     @Test
122     void testLessThanBeshort() throws ParseException {
123         // AB
124         MagicNumber m = MagicNumberFactory.buildMagicNumber("0 beshort <0x4142 FOO");
125         assertTrue(m.test("AA".getBytes()), "Less than magic operator failed");
126         assertFalse(m.test("AB".getBytes()), "Less than magic operator failed");
127         assertFalse(m.test("AC".getBytes()), "Less than magic operator failed");
128     }
129 
130     @Test
131     void testLessEqualBeshort() throws ParseException {
132         // AB
133         MagicNumber m = MagicNumberFactory.buildMagicNumber("0 beshort <=0x4142 FOO");
134         assertTrue(m.test("AA".getBytes()), "LessEqual magic operator failed");
135         assertTrue(m.test("AB".getBytes()), "LessEqual magic operator failed");
136         assertFalse(m.test("AC".getBytes()), "LessEqual magic operator failed");
137     }
138 
139     @Test
140     void testString() throws ParseException {
141         // ABCD
142         MagicNumber m = MagicNumberFactory.buildMagicNumber("0 string ABCD FOO");
143         assertTrue(m.test("ABCD".getBytes()), "String magic operator failed");
144         assertFalse(m.test("ABCC".getBytes()), "String magic operator failed");
145     }
146 
147     @Test
148     void testSubstring() throws ParseException {
149         // ABCD
150         MagicNumber m = MagicNumberFactory.buildMagicNumber("1 string BCD FOO");
151         assertTrue(m.test("ABCD".getBytes()), "String magic operator failed");
152         assertFalse(m.test("ABCC".getBytes()), "String magic operator failed");
153         assertFalse(m.test("BCD".getBytes()), "String magic operator failed");
154 
155         m = MagicNumberFactory.buildMagicNumber("2 string CD FOO");
156         assertTrue(m.test("ABCD".getBytes()), "String magic operator failed");
157         assertFalse(m.test("ABCC".getBytes()), "String magic operator failed");
158         assertFalse(m.test("CD".getBytes()), "String magic operator failed");
159     }
160 
161     @Test
162     void testStringWithHex() throws ParseException {
163         // ABCD
164         MagicNumber m = MagicNumberFactory.buildMagicNumber("0 string ABC\\x44 FOO");
165         assertTrue(m.test("ABCD".getBytes()), "Greater than magic operator failed");
166         assertFalse(m.test("ABCC".getBytes()), "Greater than magic operator failed");
167     }
168 
169     @Test
170     void testByte() throws ParseException {
171         MagicNumber m = MagicNumberFactory.buildMagicNumber("0 byte 0x09");
172         assertTrue(m.test(DatatypeConverter.parseHexBinary("09")), "Equal magic operator failed");
173         assertFalse(m.test(DatatypeConverter.parseHexBinary("A1")), "Equal magic operator failed");
174         assertFalse(m.test(DatatypeConverter.parseHexBinary("AB")), "Equal magic operator failed");
175 
176         m = MagicNumberFactory.buildMagicNumber("0 byte 0xF2");
177         assertTrue(m.test(DatatypeConverter.parseHexBinary("F2")), "Equal magic operator failed");
178         assertFalse(m.test(DatatypeConverter.parseHexBinary("A1")), "Equal magic operator failed");
179         assertFalse(m.test(DatatypeConverter.parseHexBinary("AB")), "Equal magic operator failed");
180     }
181 
182     @Test
183     void testGreaterThanByte() throws ParseException {
184         MagicNumber m = MagicNumberFactory.buildMagicNumber("0 byte >0x09 FOO");
185         assertTrue(m.test(DatatypeConverter.parseHexBinary("A1")), "Greater than magic operator failed");
186         assertFalse(m.test(DatatypeConverter.parseHexBinary("01")), "Greater than magic operator failed");
187         assertFalse(m.test(DatatypeConverter.parseHexBinary("09")), "Greater than magic operator failed");
188 
189         m = MagicNumberFactory.buildMagicNumber("0 byte >0xF2 FOO");
190         assertFalse(m.test(DatatypeConverter.parseHexBinary("A1")), "Greater than magic operator failed");
191         assertTrue(m.test(DatatypeConverter.parseHexBinary("F8")), "Greater than magic operator failed");
192         assertFalse(m.test(DatatypeConverter.parseHexBinary("91")), "Greater than magic operator failed");
193         assertFalse(m.test(DatatypeConverter.parseHexBinary("F2")), "Greater than magic operator failed");
194     }
195 
196     @Test
197     void testGreaterEqualByte() throws ParseException {
198         MagicNumber m = MagicNumberFactory.buildMagicNumber("0 byte >=0x09 FOO");
199         assertTrue(m.test(DatatypeConverter.parseHexBinary("A1")), "GreaterEqual than magic operator failed");
200         assertFalse(m.test(DatatypeConverter.parseHexBinary("01")), "GreaterEqual than magic operator failed");
201         assertTrue(m.test(DatatypeConverter.parseHexBinary("09")), "GreaterEqual than magic operator failed");
202 
203         m = MagicNumberFactory.buildMagicNumber("0 byte >=0xF2 FOO");
204         assertFalse(m.test(DatatypeConverter.parseHexBinary("A1")), "GreaterEqual than magic operator failed");
205         assertTrue(m.test(DatatypeConverter.parseHexBinary("F8")), "GreaterEqual than magic operator failed");
206         assertFalse(m.test(DatatypeConverter.parseHexBinary("91")), "GreaterEqual than magic operator failed");
207         assertTrue(m.test(DatatypeConverter.parseHexBinary("F2")), "GreaterEqual than magic operator failed");
208     }
209 
210     @Test
211     void testLessThanByte() throws ParseException {
212         MagicNumber m = MagicNumberFactory.buildMagicNumber("0 byte <0x09 FOO");
213         assertFalse(m.test(DatatypeConverter.parseHexBinary("A1")), "Less than magic operator failed");
214         assertTrue(m.test(DatatypeConverter.parseHexBinary("01")), "Less than magic operator failed");
215         assertFalse(m.test(DatatypeConverter.parseHexBinary("09")), "Less than magic operator failed");
216 
217         m = MagicNumberFactory.buildMagicNumber("0 byte <0xF2 FOO");
218         assertTrue(m.test(DatatypeConverter.parseHexBinary("A1")), "Less than magic operator failed");
219         assertFalse(m.test(DatatypeConverter.parseHexBinary("F8")), "Less than magic operator failed");
220         assertTrue(m.test(DatatypeConverter.parseHexBinary("91")), "Less than magic operator failed");
221         assertFalse(m.test(DatatypeConverter.parseHexBinary("F2")), "Less than magic operator failed");
222     }
223 
224     @Test
225     void testLessEqualByte() throws ParseException {
226         MagicNumber m = MagicNumberFactory.buildMagicNumber("0 byte <=0x09 FOO");
227         assertFalse(m.test(DatatypeConverter.parseHexBinary("A1")), "LessEqual than magic operator failed");
228         assertTrue(m.test(DatatypeConverter.parseHexBinary("01")), "LessEqual than magic operator failed");
229         assertTrue(m.test(DatatypeConverter.parseHexBinary("09")), "LessEqual than magic operator failed");
230 
231         m = MagicNumberFactory.buildMagicNumber("0 byte <=0xF2 FOO");
232         assertTrue(m.test(DatatypeConverter.parseHexBinary("A1")), "LessEqual than magic operator failed");
233         assertFalse(m.test(DatatypeConverter.parseHexBinary("F8")), "LessEqual than magic operator failed");
234         assertTrue(m.test(DatatypeConverter.parseHexBinary("91")), "LessEqual than magic operator failed");
235         assertTrue(m.test(DatatypeConverter.parseHexBinary("F2")), "LessEqual than magic operator failed");
236     }
237 
238 }