forked from roastedroot/proxy-wasm-java-host
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHttpBodyChunkTest.java
More file actions
134 lines (106 loc) · 4.07 KB
/
HttpBodyChunkTest.java
File metadata and controls
134 lines (106 loc) · 4.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package io.roastedroot.proxywasm;
import static io.roastedroot.proxywasm.Helpers.bytes;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import com.dylibso.chicory.wasm.Parser;
import java.nio.file.Path;
import java.util.Map;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/**
* Java port of https://github.com/proxy-wasm/proxy-wasm-go-sdk/blob/ab4161dcf9246a828008b539a82a1556cf0f2e24/examples/http_body_chunk/main_test.go
*/
public class HttpBodyChunkTest {
private MockHandler handler;
private ProxyWasm proxyWasm;
private HttpContext host;
@BeforeEach
void setUp() throws StartException {
this.handler = new MockHandler();
ProxyWasm.Builder builder = ProxyWasm.builder();
var module = Parser.parse(Path.of("./src/test/go-examples/http_body_chunk/main.wasm"));
this.proxyWasm = builder.build(module);
this.host = proxyWasm.createHttpContext(handler);
}
@AfterEach
void tearDown() {
host.close();
proxyWasm.close();
}
@Test
public void pauseUntilEOS() {
var action = host.callOnRequestBody(false);
assertEquals(Action.PAUSE, action);
}
@Test
public void patternFound() {
var body = bytes("This is a payload with the pattern word.");
// Call OnRequestHeaders.
handler.setHttpRequestHeaders(Map.of("content-length", String.format("%d", body.length)));
var action = host.callOnRequestHeaders(false);
// Must be continued.
assertEquals(Action.CONTINUE, action);
// Call OnRequestBody.
handler.setHttpRequestBody(body);
action = host.callOnRequestBody(true);
// Must be paused
assertEquals(Action.PAUSE, action);
handler.assertLogsContain("pattern found in chunk: 1");
// Check the local response.
var response = handler.getSentHttpResponse();
assertNotNull(response);
assertEquals(403, response.statusCode);
}
@Test
public void patternFoundInMultipleChunks() {
var chunks =
new byte[][] {
bytes("chunk1..."),
bytes("chunk2..."),
bytes("chunk3..."),
bytes("chunk4 with pattern ...")
};
var chunksSize = 0;
for (byte[] chunk : chunks) {
chunksSize += chunk.length;
}
// Call OnRequestHeaders.
handler.setHttpRequestHeaders(Map.of("content-length", String.format("%d", chunksSize)));
var action = host.callOnRequestHeaders(false);
// Must be continued.
assertEquals(Action.CONTINUE, action);
// Call OnRequestBody.
for (byte[] chunk : chunks) {
handler.appendHttpRequestBody(chunk);
action = host.callOnRequestBody(false);
// Must be paused.
assertEquals(Action.PAUSE, action);
}
handler.assertLogsContain("pattern found in chunk: 4");
handler.assertLogsDoNotContain("read data does not match");
// Check the local response.
var response = handler.getSentHttpResponse();
assertNotNull(response);
assertEquals(403, response.statusCode);
}
@Test
public void patternNotFound() {
var body = bytes("This is a generic payload.");
// Call OnRequestHeaders.
handler.setHttpRequestHeaders(Map.of("content-length", String.format("%d", body.length)));
var action = host.callOnRequestHeaders(false);
// Must be continued.
assertEquals(Action.CONTINUE, action);
// Call OnRequestBody.
handler.setHttpRequestBody(body);
action = host.callOnRequestBody(false);
// Must be paused
assertEquals(Action.PAUSE, action);
// Call OnRequestBody.
action = host.callOnRequestBody(true);
// Must be paused
assertEquals(Action.CONTINUE, action);
handler.assertLogsContain("pattern not found");
}
}