Skip to content

Commit cf1b5d6

Browse files
mostroverkhovsmaldini
authored andcommitted
Setup payload: distinguish missing and empty metadata
Signed-off-by: Maksym Ostroverkhov <[email protected]>
1 parent 27feee6 commit cf1b5d6

File tree

8 files changed

+110
-34
lines changed

8 files changed

+110
-34
lines changed

rsocket-core/src/main/java/io/rsocket/RSocketFactory.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -355,8 +355,7 @@ public Mono<RSocket> start() {
355355
resumeToken,
356356
metadataMimeType,
357357
dataMimeType,
358-
setupPayload.sliceMetadata(),
359-
setupPayload.sliceData());
358+
setupPayload);
360359

361360
RSocket wrappedRSocketRequester = plugins.applyRequester(rSocketRequester);
362361

rsocket-core/src/main/java/io/rsocket/frame/SetupFrameFlyweight.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.netty.buffer.ByteBufAllocator;
55
import io.netty.buffer.ByteBufUtil;
66
import io.netty.buffer.Unpooled;
7+
import io.rsocket.Payload;
78
import java.nio.charset.StandardCharsets;
89

910
public class SetupFrameFlyweight {
@@ -27,13 +28,12 @@ public class SetupFrameFlyweight {
2728

2829
public static ByteBuf encode(
2930
final ByteBufAllocator allocator,
30-
boolean lease,
31+
final boolean lease,
3132
final int keepaliveInterval,
3233
final int maxLifetime,
3334
final String metadataMimeType,
3435
final String dataMimeType,
35-
final ByteBuf metadata,
36-
final ByteBuf data) {
36+
final Payload setupPayload) {
3737
return encode(
3838
allocator,
3939
lease,
@@ -42,20 +42,21 @@ public static ByteBuf encode(
4242
Unpooled.EMPTY_BUFFER,
4343
metadataMimeType,
4444
dataMimeType,
45-
metadata,
46-
data);
45+
setupPayload);
4746
}
4847

4948
public static ByteBuf encode(
5049
final ByteBufAllocator allocator,
51-
boolean lease,
50+
final boolean lease,
5251
final int keepaliveInterval,
5352
final int maxLifetime,
5453
final ByteBuf resumeToken,
5554
final String metadataMimeType,
5655
final String dataMimeType,
57-
final ByteBuf metadata,
58-
final ByteBuf data) {
56+
final Payload setupPayload) {
57+
58+
ByteBuf metadata = setupPayload.hasMetadata() ? setupPayload.sliceMetadata() : null;
59+
ByteBuf data = setupPayload.sliceData();
5960

6061
int flags = 0;
6162

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package io.rsocket;
2+
3+
import static org.junit.jupiter.api.Assertions.*;
4+
import static org.junit.jupiter.api.Assertions.assertEquals;
5+
6+
import io.netty.buffer.ByteBuf;
7+
import io.netty.buffer.ByteBufAllocator;
8+
import io.netty.buffer.Unpooled;
9+
import io.rsocket.frame.SetupFrameFlyweight;
10+
import io.rsocket.util.DefaultPayload;
11+
import org.junit.jupiter.api.Test;
12+
13+
class ConnectionSetupPayloadTest {
14+
private static final int KEEP_ALIVE_INTERVAL = 5;
15+
private static final int KEEP_ALIVE_MAX_LIFETIME = 500;
16+
private static final String METADATA_TYPE = "metadata_type";
17+
private static final String DATA_TYPE = "data_type";
18+
19+
@Test
20+
void testSetupPayloadWithDataMetadata() {
21+
ByteBuf data = Unpooled.wrappedBuffer(new byte[] {5, 4, 3});
22+
ByteBuf metadata = Unpooled.wrappedBuffer(new byte[] {2, 1, 0});
23+
Payload payload = DefaultPayload.create(data, metadata);
24+
boolean leaseEnabled = true;
25+
26+
ByteBuf frame = encodeSetupFrame(leaseEnabled, payload);
27+
ConnectionSetupPayload setupPayload = ConnectionSetupPayload.create(frame);
28+
29+
assertTrue(setupPayload.willClientHonorLease());
30+
assertEquals(KEEP_ALIVE_INTERVAL, setupPayload.keepAliveInterval());
31+
assertEquals(KEEP_ALIVE_MAX_LIFETIME, setupPayload.keepAliveMaxLifetime());
32+
assertEquals(METADATA_TYPE, SetupFrameFlyweight.metadataMimeType(frame));
33+
assertEquals(DATA_TYPE, SetupFrameFlyweight.dataMimeType(frame));
34+
assertTrue(setupPayload.hasMetadata());
35+
assertNotNull(setupPayload.metadata());
36+
assertEquals(payload.metadata(), setupPayload.metadata());
37+
assertEquals(payload.data(), setupPayload.data());
38+
frame.release();
39+
}
40+
41+
@Test
42+
void testSetupPayloadWithNoMetadata() {
43+
ByteBuf data = Unpooled.wrappedBuffer(new byte[] {5, 4, 3});
44+
ByteBuf metadata = null;
45+
Payload payload = DefaultPayload.create(data, metadata);
46+
boolean leaseEnabled = false;
47+
48+
ByteBuf frame = encodeSetupFrame(leaseEnabled, payload);
49+
ConnectionSetupPayload setupPayload = ConnectionSetupPayload.create(frame);
50+
51+
assertFalse(setupPayload.willClientHonorLease());
52+
assertFalse(setupPayload.hasMetadata());
53+
assertNotNull(setupPayload.metadata());
54+
assertEquals(0, setupPayload.metadata().readableBytes());
55+
assertEquals(payload.data(), setupPayload.data());
56+
frame.release();
57+
}
58+
59+
@Test
60+
void testSetupPayloadWithEmptyMetadata() {
61+
ByteBuf data = Unpooled.wrappedBuffer(new byte[] {5, 4, 3});
62+
ByteBuf metadata = Unpooled.EMPTY_BUFFER;
63+
Payload payload = DefaultPayload.create(data, metadata);
64+
boolean leaseEnabled = false;
65+
66+
ByteBuf frame = encodeSetupFrame(leaseEnabled, payload);
67+
ConnectionSetupPayload setupPayload = ConnectionSetupPayload.create(frame);
68+
69+
assertFalse(setupPayload.willClientHonorLease());
70+
assertTrue(setupPayload.hasMetadata());
71+
assertNotNull(setupPayload.metadata());
72+
assertEquals(0, setupPayload.metadata().readableBytes());
73+
assertEquals(payload.data(), setupPayload.data());
74+
frame.release();
75+
}
76+
77+
private static ByteBuf encodeSetupFrame(boolean leaseEnabled, Payload setupPayload) {
78+
return SetupFrameFlyweight.encode(
79+
ByteBufAllocator.DEFAULT,
80+
leaseEnabled,
81+
KEEP_ALIVE_INTERVAL,
82+
KEEP_ALIVE_MAX_LIFETIME,
83+
null,
84+
METADATA_TYPE,
85+
DATA_TYPE,
86+
setupPayload);
87+
}
88+
}

rsocket-core/src/test/java/io/rsocket/RSocketLeaseTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,7 @@ public void serverRSocketFactoryRejectsUnsupportedLease() {
124124
30_000,
125125
"application/octet-stream",
126126
"application/octet-stream",
127-
payload.sliceMetadata(),
128-
payload.sliceData());
127+
payload);
129128

130129
TestServerTransport transport = new TestServerTransport();
131130
Closeable server =

rsocket-core/src/test/java/io/rsocket/SetupRejectionTest.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -149,14 +149,7 @@ public void connect() {
149149
Payload payload = DefaultPayload.create(DefaultPayload.EMPTY_BUFFER);
150150
ByteBuf setup =
151151
SetupFrameFlyweight.encode(
152-
ByteBufAllocator.DEFAULT,
153-
false,
154-
0,
155-
42,
156-
"mdMime",
157-
"dMime",
158-
payload.sliceMetadata(),
159-
payload.sliceData());
152+
ByteBufAllocator.DEFAULT, false, 0, 42, "mdMime", "dMime", payload);
160153

161154
conn.addToReceivedBuffer(setup);
162155
}

rsocket-core/src/test/java/io/rsocket/frame/SetupFrameFlyweightTest.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import io.netty.buffer.ByteBuf;
66
import io.netty.buffer.ByteBufAllocator;
77
import io.netty.buffer.Unpooled;
8+
import io.rsocket.Payload;
9+
import io.rsocket.util.DefaultPayload;
810
import java.util.Arrays;
911
import org.junit.jupiter.api.Test;
1012

@@ -13,9 +15,10 @@ class SetupFrameFlyweightTest {
1315
void testEncodingNoResume() {
1416
ByteBuf metadata = Unpooled.wrappedBuffer(new byte[] {1, 2, 3, 4});
1517
ByteBuf data = Unpooled.wrappedBuffer(new byte[] {5, 4, 3});
18+
Payload payload = DefaultPayload.create(data, metadata);
1619
ByteBuf frame =
1720
SetupFrameFlyweight.encode(
18-
ByteBufAllocator.DEFAULT, false, 5, 500, "metadata_type", "data_type", metadata, data);
21+
ByteBufAllocator.DEFAULT, false, 5, 500, "metadata_type", "data_type", payload);
1922

2023
assertEquals(FrameType.SETUP, FrameHeaderFlyweight.frameType(frame));
2124
assertFalse(SetupFrameFlyweight.resumeEnabled(frame));
@@ -34,18 +37,11 @@ void testEncodingResume() {
3437
Arrays.fill(tokenBytes, (byte) 1);
3538
ByteBuf metadata = Unpooled.wrappedBuffer(new byte[] {1, 2, 3, 4});
3639
ByteBuf data = Unpooled.wrappedBuffer(new byte[] {5, 4, 3});
40+
Payload payload = DefaultPayload.create(data, metadata);
3741
ByteBuf token = Unpooled.wrappedBuffer(tokenBytes);
3842
ByteBuf frame =
3943
SetupFrameFlyweight.encode(
40-
ByteBufAllocator.DEFAULT,
41-
true,
42-
5,
43-
500,
44-
token,
45-
"metadata_type",
46-
"data_type",
47-
metadata,
48-
data);
44+
ByteBufAllocator.DEFAULT, true, 5, 500, token, "metadata_type", "data_type", payload);
4945

5046
assertEquals(FrameType.SETUP, FrameHeaderFlyweight.frameType(frame));
5147
assertTrue(SetupFrameFlyweight.honorLease(frame));

rsocket-core/src/test/java/io/rsocket/internal/ClientServerInputMultiplexerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import io.rsocket.frame.*;
2525
import io.rsocket.plugins.PluginRegistry;
2626
import io.rsocket.test.util.TestDuplexConnection;
27+
import io.rsocket.util.DefaultPayload;
2728
import java.util.concurrent.atomic.AtomicInteger;
2829
import org.junit.Before;
2930
import org.junit.Test;
@@ -199,8 +200,7 @@ private ByteBuf setupFrame() {
199200
42,
200201
"application/octet-stream",
201202
"application/octet-stream",
202-
Unpooled.EMPTY_BUFFER,
203-
Unpooled.EMPTY_BUFFER);
203+
DefaultPayload.create(Unpooled.EMPTY_BUFFER, Unpooled.EMPTY_BUFFER));
204204
}
205205

206206
private ByteBuf leaseFrame() {

rsocket-test/src/main/java/io/rsocket/test/TestFrames.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.rsocket.Payload;
2323
import io.rsocket.frame.*;
2424
import io.rsocket.util.DefaultPayload;
25+
import io.rsocket.util.EmptyPayload;
2526

2627
/** Test instances of all frame types. */
2728
public final class TestFrames {
@@ -104,7 +105,6 @@ public static ByteBuf createTestSetupFrame() {
104105
Unpooled.EMPTY_BUFFER,
105106
"metadataType",
106107
"dataType",
107-
null,
108-
Unpooled.EMPTY_BUFFER);
108+
EmptyPayload.INSTANCE);
109109
}
110110
}

0 commit comments

Comments
 (0)