View Javadoc
1   /*
2    * Copyright 2019-2021 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      https://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package nl.altindag.ssl.trustmanager;
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.SSLEngine;
24  import javax.net.ssl.X509ExtendedTrustManager;
25  import java.net.Socket;
26  import java.security.cert.CertificateException;
27  import java.security.cert.X509Certificate;
28  
29  import static org.assertj.core.api.Assertions.assertThat;
30  import static org.assertj.core.api.Assertions.assertThatThrownBy;
31  import static org.mockito.Mockito.mock;
32  import static org.mockito.Mockito.times;
33  import static org.mockito.Mockito.verify;
34  import static org.mockito.Mockito.when;
35  
36  /**
37   * @author Hakan Altindag
38   */
39  @ExtendWith(MockitoExtension.class)
40  class HotSwappableX509ExtendedTrustManagerShould {
41  
42      @Test
43      void checkClientTrusted() throws CertificateException {
44          X509ExtendedTrustManager trustManager = mock(X509ExtendedTrustManager.class);
45  
46          X509ExtendedTrustManager victim = new HotSwappableX509ExtendedTrustManager(trustManager);
47          victim.checkClientTrusted(null, null);
48  
49          verify(trustManager, times(1)).checkClientTrusted(null, null);
50      }
51  
52      @Test
53      void checkClientTrustedWithSocket() throws CertificateException {
54          X509ExtendedTrustManager trustManager = mock(X509ExtendedTrustManager.class);
55  
56          X509ExtendedTrustManager victim = new HotSwappableX509ExtendedTrustManager(trustManager);
57          victim.checkClientTrusted(null, null, (Socket) null);
58  
59          verify(trustManager, times(1)).checkClientTrusted(null, null, (Socket) null);
60      }
61  
62      @Test
63      void checkClientTrustedWithSslEngine() throws CertificateException {
64          X509ExtendedTrustManager trustManager = mock(X509ExtendedTrustManager.class);
65  
66          X509ExtendedTrustManager victim = new HotSwappableX509ExtendedTrustManager(trustManager);
67          victim.checkClientTrusted(null, null, (SSLEngine) null);
68  
69          verify(trustManager, times(1)).checkClientTrusted(null, null, (SSLEngine) null);
70      }
71  
72      @Test
73      void checkServerTrusted() throws CertificateException {
74          X509ExtendedTrustManager trustManager = mock(X509ExtendedTrustManager.class);
75  
76          X509ExtendedTrustManager victim = new HotSwappableX509ExtendedTrustManager(trustManager);
77          victim.checkServerTrusted(null, null);
78  
79          verify(trustManager, times(1)).checkServerTrusted(null, null);
80      }
81  
82      @Test
83      void checkServerTrustedWithSocket() throws CertificateException {
84          X509ExtendedTrustManager trustManager = mock(X509ExtendedTrustManager.class);
85  
86          X509ExtendedTrustManager victim = new HotSwappableX509ExtendedTrustManager(trustManager);
87          victim.checkServerTrusted(null, null, (Socket) null);
88  
89          verify(trustManager, times(1)).checkServerTrusted(null, null, (Socket) null);
90      }
91  
92      @Test
93      void checkServerTrustedWithSslEngine() throws CertificateException {
94          X509ExtendedTrustManager trustManager = mock(X509ExtendedTrustManager.class);
95  
96          X509ExtendedTrustManager victim = new HotSwappableX509ExtendedTrustManager(trustManager);
97          victim.checkServerTrusted(null, null, (SSLEngine) null);
98  
99          verify(trustManager, times(1)).checkServerTrusted(null, null, (SSLEngine) null);
100     }
101 
102     @Test
103     void getAcceptedIssuers() {
104         X509ExtendedTrustManager trustManager = mock(X509ExtendedTrustManager.class);
105         when(trustManager.getAcceptedIssuers()).thenReturn(new X509Certificate[]{mock(X509Certificate.class)});
106 
107         X509ExtendedTrustManager victim = new HotSwappableX509ExtendedTrustManager(trustManager);
108         X509Certificate[] acceptedIssuers = victim.getAcceptedIssuers();
109 
110         assertThat(acceptedIssuers).hasSize(1);
111         verify(trustManager, times(1)).getAcceptedIssuers();
112     }
113 
114     @Test
115     void setTrustManager() throws CertificateException {
116         X509ExtendedTrustManager trustManager = mock(X509ExtendedTrustManager.class);
117 
118         HotSwappableX509ExtendedTrustManager victim = new HotSwappableX509ExtendedTrustManager(trustManager);
119         victim.checkServerTrusted(null, null, (SSLEngine) null);
120 
121         victim.setTrustManager(mock(X509ExtendedTrustManager.class));
122         victim.checkServerTrusted(null, null, (SSLEngine) null);
123 
124         verify(trustManager, times(1)).checkServerTrusted(null, null, (SSLEngine) null);
125     }
126 
127     @Test
128     void throwNullPointerExceptionWhenKeyManagerIsNotPresent() {
129         assertThatThrownBy(() -> new HotSwappableX509ExtendedTrustManager(null))
130                 .isInstanceOf(NullPointerException.class);
131     }
132 
133 }