diff --git a/build.gradle b/build.gradle index 170465c..999d629 100644 --- a/build.gradle +++ b/build.gradle @@ -34,4 +34,5 @@ dependencies { runtimeOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'org.postgresql:postgresql' annotationProcessor 'org.projectlombok:lombok' + testCompile 'org.junit.jupiter:junit-jupiter:5.4.2' } diff --git a/src/main/java/ru/serega6531/packmate/service/StreamOptimizer.java b/src/main/java/ru/serega6531/packmate/service/StreamOptimizer.java index 301e5fb..c805d04 100644 --- a/src/main/java/ru/serega6531/packmate/service/StreamOptimizer.java +++ b/src/main/java/ru/serega6531/packmate/service/StreamOptimizer.java @@ -21,7 +21,7 @@ import java.util.zip.ZipException; @AllArgsConstructor @Slf4j -class StreamOptimizer { +public class StreamOptimizer { private final CtfService service; private final List packets; @@ -31,7 +31,7 @@ class StreamOptimizer { /** * Вызвать для выполнения оптимизаций на переданном списке пакетов. */ - void optimizeStream() { + public void optimizeStream() { if (service.isUngzipHttp()) { unpackGzip(); } @@ -60,7 +60,7 @@ class StreamOptimizer { if (packetsInRow > 1) { compress(start, i); - i++; // продвигаем указатель на следующий после склеенного блок + i++; // продвигаем указатель на следующий после склеенного блок TODO проверить работу этого } start = i; packetsInRow = 1; @@ -109,7 +109,7 @@ class StreamOptimizer { for (Packet packet : packets) { if (packet.isIncoming()) { String content = new String(packet.getContent()); - if (content.startsWith("HTTP/")) { + if (content.contains("HTTP/")) { httpStarted = true; } diff --git a/src/test/java/ru/serega6531/packmate/StreamOptimizerTest.java b/src/test/java/ru/serega6531/packmate/StreamOptimizerTest.java new file mode 100644 index 0000000..6fa53a3 --- /dev/null +++ b/src/test/java/ru/serega6531/packmate/StreamOptimizerTest.java @@ -0,0 +1,66 @@ +package ru.serega6531.packmate; + +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.List; + +import static org.junit.jupiter.api.Assertions.*; + +class StreamOptimizerTest { + + @Test + public 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 list = new ArrayList<>(); + list.add(p); + + new StreamOptimizer(service, list).optimizeStream(); + final String processed = new String(list.get(0).getContent()); + assertTrue(processed.contains("а б")); + } + + @Test + public 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 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()); + //TODO + } + + 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; + } + +} \ No newline at end of file