forked from jooby-project/jooby
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWebSocketTest.java
More file actions
87 lines (69 loc) · 2.39 KB
/
WebSocketTest.java
File metadata and controls
87 lines (69 loc) · 2.39 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
package io.jooby;
import com.fasterxml.jackson.databind.JsonNode;
import io.jooby.json.JacksonModule;
import io.jooby.junit.ServerTest;
import io.jooby.junit.ServerTestRunner;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class WebSocketTest {
@ServerTest
public void webSocket(ServerTestRunner runner) {
runner.define(app -> {
app.ws("/ws/{key}", (ctx, initializer) -> {
StringBuilder buff = new StringBuilder(ctx.path("key").value());
initializer.onConnect(ws -> {
buff.append("/connected");
});
initializer.onMessage((ws, message) -> {
ws.send(buff + "/" + message.value());
});
});
}).ready(client -> {
client.syncWebSocket("/ws/abc", ws -> {
assertEquals("abc/connected/ws", ws.send("ws"));
});
});
}
@ServerTest
public void webSocketWithHttpSession(ServerTestRunner runner) {
runner.define(app -> {
app.get("/create", ctx -> ctx.session().put("foo", "session").getId());
app.ws("/session", (ctx, initializer) -> {
StringBuilder buff = new StringBuilder(ctx.session().get("foo").value());
initializer.onConnect(ws -> {
buff.append("/connected");
});
initializer.onMessage((ws, message) -> {
ws.send(buff.append("/").append(ctx.session().get("foo").value()).append("/")
.append(message.value()).toString());
});
});
}).ready(client -> {
client.get("/create", rsp -> {
String sid = sid(rsp.header("Set-Cookie"));
client.header("Cookie", "jooby.sid=" + sid);
client.syncWebSocket("/session", ws -> {
assertEquals("session/connected/session/ws", ws.send("ws"));
});
});
});
}
@ServerTest
public void webSocketJson(ServerTestRunner runner) {
runner.define(app -> {
app.install(new JacksonModule());
app.ws("/wsjson", (ctx, initializer) -> {
initializer.onMessage((ws, message) -> {
JsonNode node = message.to(JsonNode.class);
ws.render(node);
});
});
}).ready(client -> {
client.syncWebSocket("/wsjson", ws -> {
assertEquals("{\"message\":\"Hello JSON!\"}", ws.send("{\"message\" : \"Hello JSON!\"}"));
});
});
}
private String sid(String setCookie) {
return setCookie.substring("jooby.sid=".length(), setCookie.indexOf(';'));
}
}