Files
0xb00b5-packmate/src/test/java/ru/serega6531/packmate/StreamOptimizerTest.java
2020-03-10 17:13:46 +03:00

89 lines
2.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package ru.serega6531.packmate;
import org.apache.commons.lang3.ArrayUtils;
import org.junit.jupiter.api.Test;
import ru.serega6531.packmate.model.CtfService;
import ru.serega6531.packmate.model.Packet;
import ru.serega6531.packmate.service.StreamOptimizer;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
class StreamOptimizerTest {
@Test
void testUnpackGzip() {
String encoded = "H4sIAAAAAAAA/0tMTExKSgIA2KWG6gYAAAA=";
final byte[] gzipped = Base64.getDecoder().decode(encoded);
final byte[] content = ArrayUtils.addAll("HTTP/1.1 200 OK\r\nContent-Encoding: gzip\r\nContent-Length: 26\r\n\r\n".getBytes(), gzipped);
CtfService service = new CtfService();
service.setUngzipHttp(true);
Packet p = createPacket(content, false);
List<Packet> list = new ArrayList<>();
list.add(p);
new StreamOptimizer(service, list).optimizeStream();
final String processed = new String(list.get(0).getContent());
assertTrue(processed.contains("aaabbb"));
}
@Test
void testUrldecodeRequests() {
CtfService service = new CtfService();
service.setUrldecodeHttpRequests(true);
Packet p = createPacket("GET /?q=%D0%B0+%D0%B1 HTTP/1.1\r\n\r\n".getBytes(), true);
List<Packet> list = new ArrayList<>();
list.add(p);
new StreamOptimizer(service, list).optimizeStream();
final String processed = new String(list.get(0).getContent());
assertTrue(processed.contains("а б"));
}
@Test
void testMergeAdjacentPackets() {
CtfService service = new CtfService();
service.setMergeAdjacentPackets(true);
Packet p1 = createPacket(1, false);
Packet p2 = createPacket(2, true);
Packet p3 = createPacket(3, true);
Packet p4 = createPacket(4, false);
Packet p5 = createPacket(5, true);
Packet p6 = createPacket(6, true);
List<Packet> list = new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
list.add(p5);
list.add(p6);
new StreamOptimizer(service, list).optimizeStream();
assertEquals(4, list.size());
assertEquals(2, list.get(1).getContent().length);
assertEquals(1, list.get(2).getContent().length);
assertEquals(2, list.get(3).getContent().length);
}
private Packet createPacket(int content, boolean incoming) {
return createPacket(new byte[] {(byte) content}, incoming);
}
private Packet createPacket(byte[] content, boolean incoming) {
Packet p = new Packet();
p.setContent(content);
p.setIncoming(incoming);
return p;
}
}