Skip to content

Commit

Permalink
Merge pull request #101 from wireapp/staging
Browse files Browse the repository at this point in the history
Jetty Websocket update for Dropwizard (#100)
  • Loading branch information
dkovacevic authored Oct 5, 2022
2 parents ca1c5fb + b9e54c1 commit 665330a
Show file tree
Hide file tree
Showing 4 changed files with 144 additions and 3 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
.env.prod
target/
data/
libs/
.idea/
*.iml
*.log
Expand Down
18 changes: 16 additions & 2 deletions backend/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
<maven.test.skip>true</maven.test.skip>

<lithium.version>3.4.2</lithium.version>
<dropwizard.version>2.1.1</dropwizard.version>
<dropwizard.version>2.1.2</dropwizard.version>
<jwt.version>0.11.5</jwt.version>
</properties>

Expand Down Expand Up @@ -83,12 +83,26 @@
<artifactId>dropwizard-redirect-bundle</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>javax-websocket-server-impl</artifactId>
<version>9.4.49.v20220914</version>
</dependency>
<dependency>
<groupId>com.liveperson</groupId>
<artifactId>dropwizard-websockets</artifactId>
<version>1.3.14</version>
<exclusions>
<exclusion>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>javax-websocket-server-impl</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-servlets</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion backend/src/main/java/com/wire/bots/roman/WebSocket.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,6 @@ public void onClose(Session session) throws IOException {

@OnError
public void onError(Session session, Throwable throwable) {
Logger.exception("%s error: %s", throwable, session.getId(), throwable.getMessage());
Logger.exception(throwable,"%s error: %s", session.getId(), throwable.getMessage());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
package com.wire.bots.roman.integrations;

import com.wire.bots.roman.Application;
import com.wire.bots.roman.DAO.ProvidersDAO;
import com.wire.bots.roman.Tools;
import com.wire.bots.roman.model.*;
import io.dropwizard.testing.ConfigOverride;
import io.dropwizard.testing.DropwizardTestSupport;
import org.jdbi.v3.core.Jdbi;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import javax.websocket.ClientEndpoint;

import javax.websocket.*;
import javax.ws.rs.client.Client;
import java.net.URI;
import java.util.UUID;

public class WebSocketTest {
URI wss = null;

@ClientEndpoint(decoders = WebSocketTest._Decoder.class)
public class WebsocketClientEndpoint {
Session session;

public WebsocketClientEndpoint() {
try {
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
session = container.connectToServer(this, wss);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

@OnOpen
public void onOpen(Session session) {
System.out.printf("Websocket open: %s\n", session.getId());
}

@OnMessage
public void onMessage(Object payload) {
}

@OnClose
public void onClose(Session closed, CloseReason reason) {
System.out.printf("Websocket closed: %s: reason: %s\n", closed.getId(), reason.getCloseCode());
}
}

private static final DropwizardTestSupport<Config> SUPPORT = new DropwizardTestSupport<>(
Application.class, "roman.yaml",
ConfigOverride.config("key", "TcZA2Kq4GaOcIbQuOvasrw34321cZAfLW4Ga54fsds43hUuOdcdm42"),
ConfigOverride.config("romanPubKeyBase64", "pubkey.PEM"));
private Client client;
private Jdbi jdbi;

@Before
public void beforeClass() throws Exception {
SUPPORT.before();
Application app = SUPPORT.getApplication();
client = app.getClient();
jdbi = app.getJdbi();
}

@After
public void afterClass() {
SUPPORT.after();
}

@Test
public void connectTest() throws Exception {
final UUID botId = UUID.randomUUID();
final UUID providerId = UUID.randomUUID();
final String serviceAuth = Tools.generateToken(botId);
final UUID serviceId = UUID.randomUUID();

final String email = String.format("%s@email.com", serviceAuth);

// Create some fake provider and service
ProvidersDAO providersDAO = jdbi.onDemand(ProvidersDAO.class);
providersDAO.insert("Test Provider", providerId, email, "hash", "password");
providersDAO.update(providerId, null, serviceAuth, serviceId, "Test Service", null);

Provider provider = providersDAO.get(providerId);

final String wssUrl = "ws://localhost:8080";
String appKey = provider.serviceAuth;

wss = client.target(wssUrl)
.path("await")
.path(appKey)
.getUri();

final WebsocketClientEndpoint clientEndPoint = new WebsocketClientEndpoint();

Thread.sleep(2000);

clientEndPoint.session.close();

Thread.sleep(2000);
}

public static class _Decoder implements Decoder.Text<Object> {
@Override
public Object decode(String s) {
return new Object();
}

@Override
public boolean willDecode(String s) {
return s.startsWith("{") && s.endsWith("}");
}

@Override
public void init(EndpointConfig config) {

}

@Override
public void destroy() {

}
}
}

0 comments on commit 665330a

Please sign in to comment.