Skip to content

Commit

Permalink
Migrate to Java: SocketPairFactory
Browse files Browse the repository at this point in the history
  • Loading branch information
marianobarrios committed May 9, 2024
1 parent e44082a commit 90ebd6d
Show file tree
Hide file tree
Showing 18 changed files with 551 additions and 538 deletions.
11 changes: 4 additions & 7 deletions src/test/scala/tlschannel/AllocationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import scala.Option;
import java.util.Optional;
import tlschannel.helpers.Loops;
import tlschannel.helpers.SocketGroups.SocketPair;
import tlschannel.helpers.SocketPairFactory;
Expand All @@ -24,12 +24,9 @@ public static void main(String[] args) {

MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();

SocketPair socketPair1 =
factory.nioNio(Option.apply(null), Option.apply(null), true, false, Option.apply(null));
SocketPair socketPair2 =
factory.nioNio(Option.apply(null), Option.apply(null), true, false, Option.apply(null));
SocketPair socketPair3 =
factory.nioNio(Option.apply(null), Option.apply(null), true, false, Option.apply(null));
SocketPair socketPair1 = factory.nioNio(Optional.empty(), Optional.empty(), true, false, Optional.empty());
SocketPair socketPair2 = factory.nioNio(Optional.empty(), Optional.empty(), true, false, Optional.empty());
SocketPair socketPair3 = factory.nioNio(Optional.empty(), Optional.empty(), true, false, Optional.empty());

// do a "warm-up" loop, in order to not count anything statically allocated
Loops.halfDuplex(socketPair1, 10000, false, false);
Expand Down
13 changes: 6 additions & 7 deletions src/test/scala/tlschannel/BlockingTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import scala.Option;
import tlschannel.helpers.Loops;
import tlschannel.helpers.SocketGroups.SocketPair;
import tlschannel.helpers.SocketPairFactory;
Expand Down Expand Up @@ -37,13 +36,13 @@ public Collection<DynamicTest> testHalfDuplexWireRenegotiations() {
ret.add(DynamicTest.dynamicTest(
String.format("testHalfDuplexWireRenegotiations() - size1=%d, size2=%d", size1, size2), () -> {
SocketPair socketPair = factory.nioNio(
Option.apply(null),
Option.apply(new ChunkSizeConfig(
Optional.empty(),
Optional.of(new ChunkSizeConfig(
new ChuckSizes(Optional.of(size1), Optional.of(size2)),
new ChuckSizes(Optional.of(size1), Optional.of(size2)))),
true,
false,
Option.apply(null));
Optional.empty());
Loops.halfDuplex(socketPair, dataSize, true, false);
System.out.printf("%5d -eng-> %5d -net-> %5d -eng-> %5d\n", size1, size2, size1, size2);
}));
Expand All @@ -65,13 +64,13 @@ public Collection<DynamicTest> testFullDuplex() {
ret.add(DynamicTest.dynamicTest(
String.format("testFullDuplex() - size1=%d, size2=%d", size1, size2), () -> {
SocketPair socketPair = factory.nioNio(
Option.apply(null),
Option.apply(new ChunkSizeConfig(
Optional.empty(),
Optional.of(new ChunkSizeConfig(
new ChuckSizes(Optional.of(size1), Optional.of(size2)),
new ChuckSizes(Optional.of(size1), Optional.of(size2)))),
true,
false,
Option.apply(null));
Optional.empty());
Loops.fullDuplex(socketPair, dataSize);
System.out.printf("%5d -eng-> %5d -net-> %5d -eng-> %5d\n", size1, size2, size1, size2);
}));
Expand Down
11 changes: 3 additions & 8 deletions src/test/scala/tlschannel/CipherTest.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,13 @@
package tlschannel;

import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
import javax.net.ssl.SSLContext;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import scala.Option;
import scala.Some;
import tlschannel.helpers.Loops;
import tlschannel.helpers.SocketGroups.SocketPair;
import tlschannel.helpers.SocketPairFactory;
Expand Down Expand Up @@ -49,7 +44,7 @@ public Collection<DynamicTest> testHalfDuplexWithRenegotiation() {
() -> {
SocketPairFactory socketFactory = new SocketPairFactory(ctxFactory.defaultContext());
SocketPair socketPair = socketFactory.nioNio(
Some.apply(cipher), Option.apply(null), true, false, Option.apply(null));
Optional.of(cipher), Optional.empty(), true, false, Optional.empty());
Loops.halfDuplex(socketPair, dataSize, protocol.compareTo("TLSv1.2") < 0, false);
String actualProtocol = socketPair
.client
Expand All @@ -76,7 +71,7 @@ public Collection<DynamicTest> testFullDuplex() {
String.format("testFullDuplex() - protocol: %s, cipher: %s", protocol, cipher), () -> {
SocketPairFactory socketFactory = new SocketPairFactory(ctxFactory.defaultContext());
SocketPair socketPair = socketFactory.nioNio(
Some.apply(cipher), Option.apply(null), true, false, Option.apply(null));
Optional.of(cipher), Optional.empty(), true, false, Optional.empty());
Loops.fullDuplex(socketPair, dataSize);
String actualProtocol = socketPair
.client
Expand Down
50 changes: 24 additions & 26 deletions src/test/scala/tlschannel/CloseTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import scala.Option;
import scala.Some;
import tlschannel.helpers.*;
import tlschannel.helpers.SocketPairFactory.ChuckSizes;
import tlschannel.helpers.SocketPairFactory.ChunkSizeConfig;
Expand All @@ -36,13 +34,13 @@ public class CloseTest {
@Test
void testTcpImmediateClose() throws InterruptedException, IOException {
SocketGroups.SocketPair socketPair = factory.nioNio(
Option.apply(null),
Some.apply(new ChunkSizeConfig(
Optional.empty(),
Optional.of(new ChunkSizeConfig(
new ChuckSizes(internalBufferSize, Optional.empty()),
new ChuckSizes(internalBufferSize, Optional.empty()))),
true,
false,
Option.apply(null));
Optional.empty());
SocketGroups.SocketGroup clientGroup = socketPair.client;
SocketGroups.SocketGroup serverGroup = socketPair.server;
ByteChannel client = clientGroup.external;
Expand Down Expand Up @@ -75,13 +73,13 @@ void testTcpImmediateClose() throws InterruptedException, IOException {
@Test
void testTcpClose() throws InterruptedException, IOException {
SocketGroups.SocketPair socketPair = factory.nioNio(
Option.apply(null),
Some.apply(new ChunkSizeConfig(
Optional.empty(),
Optional.of(new ChunkSizeConfig(
new ChuckSizes(internalBufferSize, Optional.empty()),
new ChuckSizes(internalBufferSize, Optional.empty()))),
true,
false,
Option.apply(null));
Optional.empty());
SocketGroups.SocketGroup clientGroup = socketPair.client;
SocketGroups.SocketGroup serverGroup = socketPair.server;
ByteChannel client = clientGroup.external;
Expand Down Expand Up @@ -119,13 +117,13 @@ void testTcpClose() throws InterruptedException, IOException {
@Test
void testClose() throws InterruptedException {
SocketGroups.SocketPair socketPair = factory.nioNio(
Option.apply(null),
Some.apply(new ChunkSizeConfig(
Optional.empty(),
Optional.of(new ChunkSizeConfig(
new ChuckSizes(internalBufferSize, Optional.empty()),
new ChuckSizes(internalBufferSize, Optional.empty()))),
true,
false,
Option.apply(null));
Optional.empty());
SocketGroups.SocketGroup clientGroup = socketPair.client;
SocketGroups.SocketGroup serverGroup = socketPair.server;
ByteChannel client = clientGroup.external;
Expand Down Expand Up @@ -163,13 +161,13 @@ void testClose() throws InterruptedException {
@Test
void testCloseAndWait() throws InterruptedException {
SocketGroups.SocketPair socketPair = factory.nioNio(
Option.apply(null),
Some.apply(new ChunkSizeConfig(
Optional.empty(),
Optional.of(new ChunkSizeConfig(
new ChuckSizes(internalBufferSize, Optional.empty()),
new ChuckSizes(internalBufferSize, Optional.empty()))),
true,
true,
Option.apply(null));
Optional.empty());
SocketGroups.SocketGroup clientGroup = socketPair.client;
SocketGroups.SocketGroup serverGroup = socketPair.server;
ByteChannel client = clientGroup.external;
Expand Down Expand Up @@ -207,13 +205,13 @@ void testCloseAndWait() throws InterruptedException {
@Test
void testCloseAndWaitForever() throws IOException, InterruptedException {
SocketGroups.SocketPair socketPair = factory.nioNio(
Option.apply(null),
Some.apply(new ChunkSizeConfig(
Optional.empty(),
Optional.of(new ChunkSizeConfig(
new ChuckSizes(internalBufferSize, Optional.empty()),
new ChuckSizes(internalBufferSize, Optional.empty()))),
true,
true,
Option.apply(null));
Optional.empty());
SocketGroups.SocketGroup clientGroup = socketPair.client;
SocketGroups.SocketGroup serverGroup = socketPair.server;
ByteChannel client = clientGroup.external;
Expand Down Expand Up @@ -249,13 +247,13 @@ void testCloseAndWaitForever() throws IOException, InterruptedException {
@Test
void testShutdownAndForget() throws InterruptedException, IOException {
SocketGroups.SocketPair socketPair = factory.nioNio(
Option.apply(null),
Some.apply(new ChunkSizeConfig(
Optional.empty(),
Optional.of(new ChunkSizeConfig(
new ChuckSizes(internalBufferSize, Optional.empty()),
new ChuckSizes(internalBufferSize, Optional.empty()))),
true,
false,
Option.apply(null));
Optional.empty());
SocketGroups.SocketGroup clientGroup = socketPair.client;
SocketGroups.SocketGroup serverGroup = socketPair.server;
ByteChannel client = clientGroup.external;
Expand Down Expand Up @@ -291,13 +289,13 @@ void testShutdownAndForget() throws InterruptedException, IOException {
@Test
void testShutdownAndWait() throws IOException, InterruptedException {
SocketGroups.SocketPair socketPair = factory.nioNio(
Option.apply(null),
Some.apply(new ChunkSizeConfig(
Optional.empty(),
Optional.of(new ChunkSizeConfig(
new ChuckSizes(internalBufferSize, Optional.empty()),
new ChuckSizes(internalBufferSize, Optional.empty()))),
true,
false,
Option.apply(null));
Optional.empty());
SocketGroups.SocketGroup clientGroup = socketPair.client;
SocketGroups.SocketGroup serverGroup = socketPair.server;
ByteChannel client = clientGroup.external;
Expand Down Expand Up @@ -343,13 +341,13 @@ void testShutdownAndWait() throws IOException, InterruptedException {
@Test
void testShutdownAndWaitForever() throws InterruptedException, IOException {
SocketGroups.SocketPair socketPair = factory.nioNio(
Option.apply(null),
Some.apply(new ChunkSizeConfig(
Optional.empty(),
Optional.of(new ChunkSizeConfig(
new ChuckSizes(internalBufferSize, Optional.empty()),
new ChuckSizes(internalBufferSize, Optional.empty()))),
true,
false,
Option.apply(null));
Optional.empty());
SocketGroups.SocketGroup clientGroup = socketPair.client;
SocketGroups.SocketGroup serverGroup = socketPair.server;
ByteChannel client = clientGroup.external;
Expand Down
6 changes: 3 additions & 3 deletions src/test/scala/tlschannel/ConcurrentTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicLong;
import java.util.logging.Logger;
import java.util.stream.Stream;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import scala.Option;
import tlschannel.helpers.*;

@TestInstance(Lifecycle.PER_CLASS)
Expand All @@ -31,7 +31,7 @@ public class ConcurrentTest {
// write-side thread safety
@Test
public void testWriteSide() throws IOException {
SocketPair socketPair = factory.nioNio(Option.apply(null), Option.apply(null), true, false, Option.apply(null));
SocketPair socketPair = factory.nioNio(Optional.empty(), Optional.empty(), true, false, Optional.empty());
Thread clientWriterThread1 = new Thread(() -> writerLoop(dataSize, 'a', socketPair.client), "client-writer-1");
Thread clientWriterThread2 = new Thread(() -> writerLoop(dataSize, 'b', socketPair.client), "client-writer-2");
Thread clientWriterThread3 = new Thread(() -> writerLoop(dataSize, 'c', socketPair.client), "client-writer-3");
Expand All @@ -54,7 +54,7 @@ public void testWriteSide() throws IOException {
// read-size thread-safety
@Test
public void testReadSide() throws IOException {
SocketPair socketPair = factory.nioNio(Option.apply(null), Option.apply(null), true, false, Option.apply(null));
SocketPair socketPair = factory.nioNio(Optional.empty(), Optional.empty(), true, false, Optional.empty());
Thread clientWriterThread = new Thread(() -> writerLoop(dataSize, 'a', socketPair.client), "client-writer");
AtomicLong totalRead = new AtomicLong();
Thread serverReaderThread1 =
Expand Down
14 changes: 7 additions & 7 deletions src/test/scala/tlschannel/FailTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Optional;
import javax.net.ssl.SSLException;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import scala.Option;
import tlschannel.helpers.SocketPairFactory;
import tlschannel.helpers.SslContextFactory;
import tlschannel.helpers.TestJavaUtil;
Expand All @@ -26,17 +26,17 @@ public class FailTest {
@Test
public void testPlanToTls() throws IOException, InterruptedException {
ServerSocketChannel serverSocket = ServerSocketChannel.open();
serverSocket.bind(new InetSocketAddress(factory.localhost(), 0 /* find free port */));
serverSocket.bind(new InetSocketAddress(factory.localhost, 0 /* find free port */));
int chosenPort = ((InetSocketAddress) serverSocket.getLocalAddress()).getPort();
InetSocketAddress address = new InetSocketAddress(factory.localhost(), chosenPort);
InetSocketAddress address = new InetSocketAddress(factory.localhost, chosenPort);
SocketChannel clientChannel = SocketChannel.open(address);
SocketChannel rawServer = serverSocket.accept();
factory.createClientSslEngine(Option.empty(), chosenPort);
factory.createClientSslEngine(Optional.empty(), chosenPort);
ServerTlsChannel.Builder serverChannelBuilder = ServerTlsChannel.newBuilder(
rawServer,
nameOpt ->
factory.sslContextFactory(factory.clientSniHostName(), factory.sslContext(), nameOpt))
.withEngineFactory(sslContext -> factory.fixedCipherServerSslEngineFactory(Option.empty(), sslContext));
nameOpt -> factory.sslContextFactory(factory.clientSniHostName, factory.sslContext, nameOpt))
.withEngineFactory(
sslContext -> factory.fixedCipherServerSslEngineFactory(Optional.empty(), sslContext));

ServerTlsChannel serverChannel = serverChannelBuilder.build();

Expand Down
Loading

0 comments on commit 90ebd6d

Please sign in to comment.