Skip to content
This repository was archived by the owner on May 10, 2024. It is now read-only.

Commit dd1ab88

Browse files
committed
fixes, close off leaks, tests
all tests except file, server, and exchange
1 parent bc1fe42 commit dd1ab88

File tree

5 files changed

+273
-88
lines changed

5 files changed

+273
-88
lines changed

src/main/java/dev/katsute/simplehttpserver/HttpSessionHandler.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ private String getSetSession(final Headers headers){ // get session that will be
7777
if(headers.containsKey("Set-Cookie"))
7878
for(final String value : headers.get("Set-Cookie"))
7979
if(value.startsWith(cookie + "="))
80-
return value.substring(cookie.length() + 1, value.indexOf(";"));
80+
return value.substring(cookie.length() + 1, value.contains(";") ? value.indexOf(";") : value.length());
8181
return null;
8282
}
8383

@@ -147,7 +147,6 @@ public synchronized final void update(){
147147
};
148148

149149
final HttpCookie OUT = new HttpCookie(cookie, session.getSessionID());
150-
OUT.setPath("/");
151150
OUT.setHttpOnly(true);
152151

153152
exchange.getResponseHeaders().add("Set-Cookie", OUT.toString());

src/main/java/dev/katsute/simplehttpserver/SimpleHttpExchangeImpl.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,11 @@ private static Map<String,String> parseWwwFormEnc(final String s){
7979
getMap = rawGet == null ? new HashMap<>() : parseWwwFormEnc(rawGet);
8080

8181
String OUT;
82-
try(final Stream<String> lns = new BufferedReader(new InputStreamReader(exchange.getRequestBody(), StandardCharsets.UTF_8)).lines()){
83-
OUT = lns.collect(Collectors.joining("\n"));
84-
}catch(Throwable e){
82+
try(final InputStreamReader IN = new InputStreamReader(exchange.getRequestBody(), StandardCharsets.UTF_8)){
83+
try(final Stream<String> lns = new BufferedReader(IN).lines()){
84+
OUT = lns.collect(Collectors.joining("\n"));
85+
}
86+
}catch(final Throwable e){
8587
OUT = null;
8688
}
8789

src/test/java/dev/katsute/simplehttpserver/Requests.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package dev.katsute.simplehttpserver;
22

33
import java.io.*;
4-
import java.net.HttpURLConnection;
5-
import java.net.URL;
4+
import java.net.*;
65
import java.nio.charset.StandardCharsets;
76

87
public class Requests {
98

9+
static{
10+
CookieHandler.setDefault(new CookieManager());
11+
}
12+
1013
public static HttpURLConnection openConn(final String URL){
1114
try{
1215
final HttpURLConnection conn = (HttpURLConnection) new URL(URL).openConnection();
@@ -27,19 +30,28 @@ public static int getCode(final String URL){
2730
}
2831

2932
public static String getBody(final String URL){
30-
return getBody(openConn(URL));
33+
return getBody(openConn(URL), false);
34+
}
35+
36+
public static String getBody(final String URL, final boolean ignoreError){
37+
return getBody(openConn(URL), ignoreError);
3138
}
3239

3340
public static String getBody(final HttpURLConnection conn){
41+
return getBody(conn, false);
42+
}
43+
44+
public static String getBody(final HttpURLConnection conn, final boolean ignoreError){
45+
final StringBuilder OUT = new StringBuilder();
3446
try(final BufferedReader IN = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))){
3547
String buffer;
36-
final StringBuilder OUT = new StringBuilder();
3748
while((buffer = IN.readLine()) != null)
38-
OUT.append(buffer);
39-
return OUT.toString();
49+
OUT.append(buffer).append('\n');
4050
}catch(final IOException e){
41-
throw new UncheckedIOException(e);
51+
if(!ignoreError)
52+
throw new UncheckedIOException(e);
4253
}
54+
return OUT.toString().trim();
4355
}
4456

4557
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package dev.katsute.simplehttpserver.handler;
2+
3+
import dev.katsute.simplehttpserver.Requests;
4+
import dev.katsute.simplehttpserver.SimpleHttpServer;
5+
import org.junit.jupiter.api.*;
6+
7+
import java.io.IOException;
8+
import java.util.concurrent.atomic.AtomicReference;
9+
10+
final class SSETests {
11+
12+
private static SimpleHttpServer server;
13+
14+
@BeforeAll
15+
static void beforeAll() throws IOException{
16+
server = SimpleHttpServer.create(8080);
17+
server.start();
18+
}
19+
20+
@AfterAll
21+
static void afterAll(){
22+
server.stop();
23+
}
24+
25+
@Test
26+
final void testSSE() throws InterruptedException{
27+
final SSEHandler handler = new SSEHandler();
28+
server.createContext("sse", handler);
29+
30+
handler.push("event1");
31+
32+
final AtomicReference<String> data = new AtomicReference<>();
33+
34+
new Thread(() -> data.set(Requests.getBody("http://localhost:8080/sse", true))).start();
35+
36+
handler.push("event2");
37+
handler.push("event3");
38+
39+
Thread.sleep(6000);
40+
41+
Assertions.assertEquals("id: 2\ndata: event1\n\nid: 2\ndata: event2\n\nid: 2\ndata: event3", data.get());
42+
}
43+
44+
}

0 commit comments

Comments
 (0)