1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package nl.altindag.ssl.socket;
18
19 import org.junit.jupiter.api.Test;
20 import org.junit.jupiter.api.extension.ExtendWith;
21 import org.mockito.junit.jupiter.MockitoExtension;
22
23 import javax.net.ssl.SSLParameters;
24 import javax.net.ssl.SSLServerSocket;
25 import javax.net.ssl.SSLServerSocketFactory;
26 import java.io.IOException;
27 import java.net.InetAddress;
28 import java.net.ServerSocket;
29
30 import static org.assertj.core.api.Assertions.assertThat;
31 import static org.mockito.ArgumentMatchers.*;
32 import static org.mockito.Mockito.*;
33
34
35
36
37 @ExtendWith(MockitoExtension.class)
38 class CompositeSSLServerSocketFactoryShould {
39
40 private final SSLParameters sslParameters = spy(
41 new SSLParameters(
42 new String[] {"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"},
43 new String[] {"TLSv1.2"}
44 )
45 );
46
47 private final SSLServerSocketFactory sslServerSocketFactory = mock(SSLServerSocketFactory.class);
48
49 private final CompositeSSLServerSocketFactory victim = new CompositeSSLServerSocketFactory(sslServerSocketFactory, sslParameters);
50
51 @Test
52 void returnDefaultCipherSuites() {
53 String[] defaultCipherSuites = victim.getDefaultCipherSuites();
54
55 assertThat(defaultCipherSuites).containsExactly("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384");
56 verify(sslParameters, times(1)).getCipherSuites();
57 }
58
59 @Test
60 void returnSupportedCipherSuites() {
61 String[] supportedCipherSuites = victim.getSupportedCipherSuites();
62
63 assertThat(supportedCipherSuites).containsExactly("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384");
64 verify(sslParameters, times(1)).getCipherSuites();
65 }
66
67 @Test
68 void createServerSocket() throws IOException {
69 SSLServerSocket mockedSslServerSocket = mock(SSLServerSocket.class);
70
71 doReturn(mockedSslServerSocket).when(sslServerSocketFactory).createServerSocket();
72
73 ServerSocket serverSocket = victim.createServerSocket();
74
75 assertThat(serverSocket).isNotNull();
76 verify(sslServerSocketFactory, times(1)).createServerSocket();
77 verify(mockedSslServerSocket, times(1)).setSSLParameters(sslParameters);
78 }
79
80 @Test
81 void createServerSocketDoesNotUseSslParametersWhenInnerSslServerSocketFactoryReturnsServerSocket() throws IOException {
82 ServerSocket mockedServerSocket = mock(ServerSocket.class);
83
84 doReturn(mockedServerSocket).when(sslServerSocketFactory).createServerSocket();
85
86 ServerSocket serverSocket = victim.createServerSocket();
87
88 assertThat(serverSocket).isNotNull();
89 verify(sslServerSocketFactory, times(1)).createServerSocket();
90 verifyNoInteractions(mockedServerSocket);
91 }
92
93 @Test
94 void createServerSocketWithPort() throws IOException {
95 SSLServerSocket mockedSslServerSocket = mock(SSLServerSocket.class);
96
97 doReturn(mockedSslServerSocket)
98 .when(sslServerSocketFactory).createServerSocket(anyInt());
99
100 ServerSocket serverSocket = victim.createServerSocket(8443);
101
102 assertThat(serverSocket).isNotNull();
103 verify(sslServerSocketFactory, times(1)).createServerSocket(8443);
104 verify(mockedSslServerSocket, times(1)).setSSLParameters(sslParameters);
105 }
106
107 @Test
108 void createServerSocketWithPortBacklog() throws IOException {
109 SSLServerSocket mockedSslServerSocket = mock(SSLServerSocket.class);
110
111 doReturn(mockedSslServerSocket)
112 .when(sslServerSocketFactory).createServerSocket(anyInt(), anyInt());
113
114 ServerSocket serverSocket = victim.createServerSocket(8443, 50);
115
116 assertThat(serverSocket).isNotNull();
117 verify(sslServerSocketFactory, times(1)).createServerSocket(8443, 50);
118 verify(mockedSslServerSocket, times(1)).setSSLParameters(sslParameters);
119 }
120
121 @Test
122 void createServerSocketWithPortBacklogIfAddress() throws IOException {
123 SSLServerSocket mockedSslServerSocket = mock(SSLServerSocket.class);
124
125 doReturn(mockedSslServerSocket)
126 .when(sslServerSocketFactory).createServerSocket(anyInt(), anyInt(), any(InetAddress.class));
127
128 ServerSocket serverSocket = victim.createServerSocket(8443, 50, InetAddress.getLocalHost());
129
130 assertThat(serverSocket).isNotNull();
131 verify(sslServerSocketFactory, times(1)).createServerSocket(8443, 50, InetAddress.getLocalHost());
132 verify(mockedSslServerSocket, times(1)).setSSLParameters(sslParameters);
133 }
134
135 }