Skip to content

Commit e5fe667

Browse files
authored
Merge pull request #1 from manpreet333/feature/master/add-system-test
Added system test to demonstrate usage & test the complete functionality
2 parents 0fe6727 + ad191df commit e5fe667

File tree

3 files changed

+76
-0
lines changed

3 files changed

+76
-0
lines changed

sseclient/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ dependencies {
1818
testCompile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.10.2'
1919
testCompile group: 'commons-io', name: 'commons-io', version: '2.8.0'
2020
testCompile group: 'org.testng', name: 'testng', version: '7.1.0'
21+
testCompile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30'
22+
testCompile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
23+
testCompile group: 'org.projectlombok', name: 'lombok', version: '1.18.12'
24+
testAnnotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.12'
2125
}
2226

2327
jar {
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.apache.client.sse;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.apache.client.sse.utils.TestUtils;
5+
import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
6+
import org.apache.http.impl.nio.client.HttpAsyncClients;
7+
import org.testng.Assert;
8+
import org.testng.annotations.Test;
9+
10+
import java.util.concurrent.BlockingQueue;
11+
import java.util.concurrent.ExecutionException;
12+
import java.util.concurrent.Executors;
13+
import java.util.concurrent.Future;
14+
15+
@Slf4j
16+
public class SseTest {
17+
18+
private final String SSEUri = "http://abrandao.com/lab/Javascript/Javascript_SSEvents/sserver_cpu.php";
19+
private final int MAX_CONCURRENT_SSE_STREAMS = 6;
20+
private CloseableHttpAsyncClient asyncClient;
21+
private ApacheHttpSseClient sseClient;
22+
23+
@Test(groups = { "system" })
24+
public void testSSEClient() throws ExecutionException, InterruptedException {
25+
//Initialize client
26+
asyncClient = HttpAsyncClients.createDefault();
27+
asyncClient.start();
28+
sseClient = new ApacheHttpSseClient(asyncClient, Executors.newFixedThreadPool(MAX_CONCURRENT_SSE_STREAMS));
29+
30+
//Initialize request
31+
SseRequest sseRequest = new SseRequest(SSEUri);
32+
Future<SseResponse> sseResponseFuture = sseClient.execute(sseRequest);
33+
34+
//Add a 10 second delay for some events to be processed by the streaming client
35+
TestUtils.sleep(10);
36+
37+
//Validate events exists and log them
38+
SseResponse response = sseResponseFuture.get();
39+
SseEntity responseEntity = response.getEntity();
40+
Assert.assertTrue(responseEntity.hasMoreEvents(), "Expected event stream to have some events");
41+
BlockingQueue<Event> eventList = responseEntity.getEvents();
42+
for (Event eachEvent: eventList) {
43+
TestUtils.logEvent(eachEvent);
44+
}
45+
}
46+
47+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.apache.client.sse.utils;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.apache.client.sse.Event;
5+
6+
import java.util.concurrent.TimeUnit;
7+
8+
@Slf4j
9+
public class TestUtils {
10+
11+
public static void sleep(int seconds) {
12+
try {
13+
TimeUnit.SECONDS.sleep(seconds);
14+
} catch (InterruptedException excObj) {
15+
log.error("Exception occurred while waiting for " + seconds + " seconds", excObj);
16+
}
17+
}
18+
19+
public static void logEvent(Event event) {
20+
log.info("EVENT ID: " + event.getId());
21+
log.info("EVENT TYPE: " + (event.getEvent() == null ? "" : event.getEvent()));
22+
log.info("EVENT RETRY ms: " + event.getRetry());
23+
log.info("EVENT DATA: " + event.getData());
24+
}
25+
}

0 commit comments

Comments
 (0)