Skip to content

Commit

Permalink
Merge branch 'release/0.12.1-RC2'
Browse files Browse the repository at this point in the history
  • Loading branch information
robertroeser committed Feb 28, 2019
2 parents e75dda6 + aadcece commit 04b82b3
Show file tree
Hide file tree
Showing 5 changed files with 205 additions and 7 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@
# limitations under the License.
#

version=0.12.1-RC1
version=0.12.1-RC2
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ private ByteBuf assembleFrameWithMetadata(ByteBuf frame, int streamId, ByteBuf h

ByteBuf data = assembleData(frame, streamId);

return FragmentationFlyweight.encode(allocator, header, metadata, data);
return FragmentationFlyweight.encode(allocator, header, metadata.retain(), data);
}

private ByteBuf assembleData(ByteBuf frame, int streamId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@
*/
public final class WebsocketClientTransport implements ClientTransport, TransportHeaderAware {

private static final String DEFAULT_PATH = "/";

private final HttpClient client;

private String path;
Expand Down Expand Up @@ -117,7 +119,7 @@ public static WebsocketClientTransport create(URI uri) {
public static WebsocketClientTransport create(TcpClient client) {
Objects.requireNonNull(client, "client must not be null");

return create(HttpClient.from(client), "/");
return create(HttpClient.from(client), DEFAULT_PATH);
}

/**
Expand All @@ -132,6 +134,8 @@ public static WebsocketClientTransport create(HttpClient client, String path) {
Objects.requireNonNull(client, "client must not be null");
Objects.requireNonNull(path, "path must not be null");

path = path.startsWith(DEFAULT_PATH) ? path : (DEFAULT_PATH + path);

return new WebsocketClientTransport(client, path);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
/*
* Copyright 2015-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package io.rsocket.integration;

import static org.assertj.core.api.Assertions.assertThat;

import io.rsocket.AbstractRSocket;
import io.rsocket.Payload;
import io.rsocket.RSocket;
import io.rsocket.RSocketFactory;
import io.rsocket.transport.netty.client.TcpClientTransport;
import io.rsocket.transport.netty.server.CloseableChannel;
import io.rsocket.transport.netty.server.TcpServerTransport;
import io.rsocket.util.DefaultPayload;
import io.rsocket.util.RSocketProxy;
import java.util.concurrent.ThreadLocalRandom;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

public class FragmentTest {
private static final int frameSize = 128;
private AbstractRSocket handler;
private CloseableChannel server;
private String message = null;
private String metaData = null;

@BeforeEach
public void startup() {
int randomPort = ThreadLocalRandom.current().nextInt(10_000, 20_000);
StringBuilder message = new StringBuilder();
StringBuilder metaData = new StringBuilder();
for (int i = 0; i < 100; i++) {
message.append("RESPONSE ");
metaData.append("METADATA ");
}
this.message = message.toString();
this.metaData = metaData.toString();
TcpServerTransport serverTransport = TcpServerTransport.create(randomPort);
server =
RSocketFactory.receive()
.fragment(frameSize)
.acceptor((setup, sendingSocket) -> Mono.just(new RSocketProxy(handler)))
.transport(serverTransport)
.start()
.block();
}

private RSocket buildClient() {
return RSocketFactory.connect()
.fragment(frameSize)
.transport(TcpClientTransport.create(server.address()))
.start()
.block();
}

@AfterEach
public void cleanup() {
server.dispose();
}

@Test
void testFragmentNoMetaData() {
System.out.println(
"-------------------------------------------------testFragmentNoMetaData-------------------------------------------------");
handler =
new AbstractRSocket() {
@Override
public Flux<Payload> requestStream(Payload payload) {
String request = payload.getDataUtf8();
String metaData = payload.getMetadataUtf8();
System.out.println("request message: " + request);
System.out.println("request metadata: " + metaData);

return Flux.just(DefaultPayload.create(request));
}
};

RSocket client = buildClient();

System.out.println("original message: " + message);
System.out.println("original metadata: " + metaData);
Payload payload = client.requestStream(DefaultPayload.create(message)).blockLast();
System.out.println("response message: " + payload.getDataUtf8());
System.out.println("response metadata: " + payload.getMetadataUtf8());

assertThat(message).isEqualTo(payload.getDataUtf8());
}

@Test
void testFragmentRequestMetaDataOnly() {
System.out.println(
"-------------------------------------------------testFragmentRequestMetaDataOnly-------------------------------------------------");
handler =
new AbstractRSocket() {
@Override
public Flux<Payload> requestStream(Payload payload) {
String request = payload.getDataUtf8();
String metaData = payload.getMetadataUtf8();
System.out.println("request message: " + request);
System.out.println("request metadata: " + metaData);

return Flux.just(DefaultPayload.create(request));
}
};

RSocket client = buildClient();

System.out.println("original message: " + message);
System.out.println("original metadata: " + metaData);
Payload payload = client.requestStream(DefaultPayload.create(message, metaData)).blockLast();
System.out.println("response message: " + payload.getDataUtf8());
System.out.println("response metadata: " + payload.getMetadataUtf8());

assertThat(message).isEqualTo(payload.getDataUtf8());
}

@Test
void testFragmentBothMetaData() {
System.out.println(
"-------------------------------------------------testFragmentBothMetaData-------------------------------------------------");
handler =
new AbstractRSocket() {
@Override
public Flux<Payload> requestStream(Payload payload) {
String request = payload.getDataUtf8();
String metaData = payload.getMetadataUtf8();
System.out.println("request message: " + request);
System.out.println("request metadata: " + metaData);

return Flux.just(DefaultPayload.create(request, metaData));
}

@Override
public Mono<Payload> requestResponse(Payload payload) {
String request = payload.getDataUtf8();
String metaData = payload.getMetadataUtf8();
System.out.println("request message: " + request);
System.out.println("request metadata: " + metaData);

return Mono.just(DefaultPayload.create(request, metaData));
}
};

RSocket client = buildClient();

System.out.println("original message: " + message);
System.out.println("original metadata: " + metaData);
Payload payload = client.requestStream(DefaultPayload.create(message, metaData)).blockLast();
System.out.println("response message: " + payload.getDataUtf8());
System.out.println("response metadata: " + payload.getMetadataUtf8());

assertThat(message).isEqualTo(payload.getDataUtf8());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,25 @@ void connectNoServer() {
@DisplayName("creates client with BindAddress")
@Test
void createBindAddress() {
assertThat(WebsocketClientTransport.create("test-bind-address", 8000)).isNotNull();
assertThat(WebsocketClientTransport.create("test-bind-address", 8000))
.isNotNull()
.hasFieldOrPropertyWithValue("path", "/");
}

@DisplayName("creates client with HttpClient")
@Test
void createHttpClient() {
assertThat(WebsocketClientTransport.create(HttpClient.create(), "/")).isNotNull();
assertThat(WebsocketClientTransport.create(HttpClient.create(), "/"))
.isNotNull()
.hasFieldOrPropertyWithValue("path", "/");
}

@DisplayName("creates client with HttpClient and path without root")
@Test
void createHttpClientWithPathWithoutRoot() {
assertThat(WebsocketClientTransport.create(HttpClient.create(), "test"))
.isNotNull()
.hasFieldOrPropertyWithValue("path", "/test");
}

@DisplayName("creates client with InetSocketAddress")
Expand All @@ -70,7 +82,8 @@ void createInetSocketAddress() {
assertThat(
WebsocketClientTransport.create(
InetSocketAddress.createUnresolved("test-bind-address", 8000)))
.isNotNull();
.isNotNull()
.hasFieldOrPropertyWithValue("path", "/");
}

@DisplayName("create throws NullPointerException with null bindAddress")
Expand Down Expand Up @@ -122,7 +135,17 @@ void createPort() {
@DisplayName("creates client with URI")
@Test
void createUri() {
assertThat(WebsocketClientTransport.create(URI.create("ws://test-host/"))).isNotNull();
assertThat(WebsocketClientTransport.create(URI.create("ws://test-host")))
.isNotNull()
.hasFieldOrPropertyWithValue("path", "/");
}

@DisplayName("creates client with URI path")
@Test
void createUriPath() {
assertThat(WebsocketClientTransport.create(URI.create("ws://test-host/test")))
.isNotNull()
.hasFieldOrPropertyWithValue("path", "/test");
}

@DisplayName("sets transport headers")
Expand Down

0 comments on commit 04b82b3

Please sign in to comment.