1 package com.atlassian.sal.core.net;
2
3 import org.junit.Test;
4
5 import javax.net.ssl.SSLContext;
6
7 import java.security.NoSuchAlgorithmException;
8 import java.util.Arrays;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertArrayEquals;
13 import static org.junit.Assert.assertTrue;
14 import static org.junit.Assert.assertThat;
15 import static org.hamcrest.CoreMatchers.not;
16 import static org.hamcrest.Matchers.arrayContaining;
17
18 public class TestCustomSSLProtocolSocketFactory
19 {
20 @Test
21 public void testCheckDefaultProtocols() throws NoSuchAlgorithmException
22 {
23 CustomSSLProtocolSocketFactory sslProtocolSocketFactory = new CustomSSLProtocolSocketFactory(null);
24 String [] protocols = SSLContext.getDefault()
25 .getSupportedSSLParameters().getProtocols();
26 int startAt = Arrays.asList(protocols).indexOf("TLSv1");
27 protocols = Arrays.copyOfRange(protocols, startAt, protocols.length);
28 assertArrayEquals(protocols, sslProtocolSocketFactory.getProtocols());
29 assertTrue(Arrays.asList(sslProtocolSocketFactory.getProtocols())
30 .containsAll(Arrays.asList("TLSv1")));
31 }
32
33 @Test
34 public void testCheckDefaultProtocolsDoesNotContainSSLv2Hello()
35 {
36 CustomSSLProtocolSocketFactory sslProtocolSocketFactory =
37 new CustomSSLProtocolSocketFactory(null);
38 assertFalse(Arrays.asList(sslProtocolSocketFactory.getProtocols())
39 .contains("SSLv2Hello"));
40 }
41
42 @Test
43 public void testCheckDefaultProtocolsDoesNotContainSSLv3()
44 {
45 CustomSSLProtocolSocketFactory sslProtocolSocketFactory =
46 new CustomSSLProtocolSocketFactory(null);
47 assertThat(sslProtocolSocketFactory.getProtocols(), not(arrayContaining("SSLv3")));
48 }
49
50 @Test
51 public void testCheckDefaultProtocolsDoesNotEndWithAComma()
52 {
53 assertFalse(CustomSSLProtocolSocketFactory.getSupportedTLSProtocols()
54 .endsWith(","));
55 }
56
57 @Test
58 public void testUseProtocolParameter()
59 {
60 CustomSSLProtocolSocketFactory sslProtocolSocketFactory = new CustomSSLProtocolSocketFactory("TLSv1");
61
62 assertEquals(1, sslProtocolSocketFactory.getProtocols().length);
63 assertEquals("TLSv1", sslProtocolSocketFactory.getProtocols()[0]);
64 }
65
66 @Test
67 public void testProtocolsSystemPropertyOverridesParameter()
68 {
69 try
70 {
71 System.setProperty("https.protocols", "TLSv1");
72 CustomSSLProtocolSocketFactory sslProtocolSocketFactory = new CustomSSLProtocolSocketFactory("SSLv3");
73
74 assertEquals(1, sslProtocolSocketFactory.getProtocols().length);
75 assertEquals("TLSv1", sslProtocolSocketFactory.getProtocols()[0]);
76 }
77 finally
78 {
79 System.clearProperty("https.protocols");
80 }
81
82 }
83 }