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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 }