1d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler/*
2d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler * Copyright (C) 2010 The Android Open Source Project
3d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler *
4d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler * Licensed under the Apache License, Version 2.0 (the "License");
5d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler * you may not use this file except in compliance with the License.
6d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler * You may obtain a copy of the License at
7d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler *
8d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler *      http://www.apache.org/licenses/LICENSE-2.0
9d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler *
10d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler * Unless required by applicable law or agreed to in writing, software
11d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler * distributed under the License is distributed on an "AS IS" BASIS,
12d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler * See the License for the specific language governing permissions and
14d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler * limitations under the License.
15d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler */
16d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
17f1abfb434c03fb4784f1f2f4025e115d6dedcb23Adam Vartanianpackage org.conscrypt.javax.net.ssl;
18d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
19d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport static org.junit.Assert.assertEquals;
20d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport static org.junit.Assert.assertFalse;
21d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport static org.junit.Assert.assertNotNull;
22d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport static org.junit.Assert.assertNotSame;
23d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport static org.junit.Assert.assertNull;
24d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport static org.junit.Assert.assertTrue;
25d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport static org.junit.Assert.fail;
26d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
27d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport java.util.ArrayList;
28d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport java.util.Arrays;
29d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport java.util.Collection;
30d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport java.util.Collections;
31d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport javax.net.ssl.SNIHostName;
32d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport javax.net.ssl.SNIMatcher;
33d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport javax.net.ssl.SNIServerName;
34d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport javax.net.ssl.SSLParameters;
35401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittlerimport org.conscrypt.TestUtils;
36d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport org.junit.Test;
37d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport org.junit.runner.RunWith;
38d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittlerimport org.junit.runners.JUnit4;
39d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
40d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler@RunWith(JUnit4.class)
41f1abfb434c03fb4784f1f2f4025e115d6dedcb23Adam Vartanianpublic class SSLParametersTest {
42d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    @Test
43d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    public void test_SSLParameters_emptyConstructor() {
44d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        SSLParameters p = new SSLParameters();
45d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNull(p.getCipherSuites());
46d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNull(p.getProtocols());
47d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertFalse(p.getWantClientAuth());
48d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertFalse(p.getNeedClientAuth());
49d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    }
50d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
51d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    @Test
52d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    public void test_SSLParameters_cipherSuitesConstructor() {
53d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        String[] cipherSuites = new String[] {"foo", null, "bar"};
54d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        SSLParameters p = new SSLParameters(cipherSuites);
55d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNotNull(p.getCipherSuites());
56d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNotSame(cipherSuites, p.getCipherSuites());
57d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertEquals(Arrays.asList(cipherSuites), Arrays.asList(p.getCipherSuites()));
58d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNull(p.getProtocols());
59d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertFalse(p.getWantClientAuth());
60d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertFalse(p.getNeedClientAuth());
61d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    }
62d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
63d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    @Test
64d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    public void test_SSLParameters_cpherSuitesProtocolsConstructor() {
65d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        String[] cipherSuites = new String[] {"foo", null, "bar"};
66d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        String[] protocols = new String[] {"baz", null, "qux"};
67d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        SSLParameters p = new SSLParameters(cipherSuites, protocols);
68d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNotNull(p.getCipherSuites());
69d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNotNull(p.getProtocols());
70d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNotSame(cipherSuites, p.getCipherSuites());
71d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNotSame(protocols, p.getProtocols());
72d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertEquals(Arrays.asList(cipherSuites), Arrays.asList(p.getCipherSuites()));
73d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertEquals(Arrays.asList(protocols), Arrays.asList(p.getProtocols()));
74d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertFalse(p.getWantClientAuth());
75d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertFalse(p.getNeedClientAuth());
76d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    }
77d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
78d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    @Test
79d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    public void test_SSLParameters_CipherSuites() {
80d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        SSLParameters p = new SSLParameters();
81d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNull(p.getCipherSuites());
82d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
83d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        // confirm clone on input
84d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        String[] cipherSuites = new String[] {"fnord"};
85d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        String[] copy = cipherSuites.clone();
86d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        p.setCipherSuites(copy);
87d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        copy[0] = null;
88d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertEquals(Arrays.asList(cipherSuites), Arrays.asList(p.getCipherSuites()));
89d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
90d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        // confirm clone on output
91d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNotSame(p.getCipherSuites(), p.getCipherSuites());
92d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    }
93d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
94d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    @Test
95d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    public void test_SSLParameters_Protocols() {
96d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        SSLParameters p = new SSLParameters();
97d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNull(p.getProtocols());
98d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
99d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        // confirm clone on input
100d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        String[] protocols = new String[] {"fnord"};
101d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        String[] copy = protocols.clone();
102d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        p.setProtocols(copy);
103d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        copy[0] = null;
104d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertEquals(Arrays.asList(protocols), Arrays.asList(p.getProtocols()));
105d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
106d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        // confirm clone on output
107d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNotSame(p.getProtocols(), p.getProtocols());
108d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    }
109d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
110d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    @Test
111d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    public void test_SSLParameters_ClientAuth() {
112d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        SSLParameters p = new SSLParameters();
113d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertFalse(p.getWantClientAuth());
114d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertFalse(p.getNeedClientAuth());
115d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
116d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        // confirm turning one on by itself
117d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        p.setWantClientAuth(true);
118d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertTrue(p.getWantClientAuth());
119d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertFalse(p.getNeedClientAuth());
120d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
121d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        // confirm turning setting on toggles the other
122d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        p.setNeedClientAuth(true);
123d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertFalse(p.getWantClientAuth());
124d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertTrue(p.getNeedClientAuth());
125d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
126d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        // confirm toggling back
127d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        p.setWantClientAuth(true);
128d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertTrue(p.getWantClientAuth());
129d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertFalse(p.getNeedClientAuth());
130d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    }
131d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
132d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    @Test
133d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    public void test_SSLParameters_setServerNames_duplicatedNameThrows() throws Exception {
134401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler        TestUtils.assumeSNIHostnameAvailable();
135401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler
136d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        SSLParameters p = new SSLParameters();
137401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler        ArrayList<SNIServerName> dupeNames = new ArrayList<SNIServerName>();
138d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        dupeNames.add(new SNIHostName("www.example.com"));
139d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        dupeNames.add(new SNIHostName("www.example.com"));
140d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        try {
141d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler            p.setServerNames(dupeNames);
142d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler            fail("Should throw IllegalArgumentException when names are duplicated");
143d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        } catch (IllegalArgumentException expected) {
144d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler            // Ignored.
145d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        }
146d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    }
147d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
148d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    @Test
149d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    public void test_SSLParameters_setServerNames_setNull_getNull() throws Exception {
150401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler        TestUtils.assumeSNIHostnameAvailable();
151d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        SSLParameters p = new SSLParameters();
152401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler        p.setServerNames(
153401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler                Collections.singletonList((SNIServerName) new SNIHostName("www.example.com")));
154d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNotNull(p.getServerNames());
155d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        p.setServerNames(null);
156d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNull(p.getServerNames());
157d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    }
158d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
159d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    @Test
160d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    public void test_SSLParameters_setServerNames_setEmpty_getEmpty() throws Exception {
161401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler        TestUtils.assumeSNIHostnameAvailable();
162d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        SSLParameters p = new SSLParameters();
163401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler        p.setServerNames(new ArrayList<SNIServerName>());
164d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        Collection<SNIServerName> actual = p.getServerNames();
165d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNotNull(actual);
166d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertEquals(0, actual.size());
167d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    }
168d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
169d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    @Test
170d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    public void test_SSLParameters_getServerNames_unmodifiable() throws Exception {
171401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler        TestUtils.assumeSNIHostnameAvailable();
172d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        SSLParameters p = new SSLParameters();
173401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler        p.setServerNames(
174401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler                Collections.singletonList((SNIServerName) new SNIHostName("www.example.com")));
175d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        Collection<SNIServerName> actual = p.getServerNames();
176d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        try {
177d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler            actual.add(new SNIHostName("www.foo.com"));
178d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler            fail("Should not allow modifications to the list");
179d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        } catch (UnsupportedOperationException expected) {
180d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler            // Ignored.
181d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        }
182d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    }
183d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
184d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    @Test
185d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    public void test_SSLParameters_setSNIMatchers_duplicatedNameThrows() throws Exception {
186401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler        TestUtils.assumeSNIHostnameAvailable();
187d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        SSLParameters p = new SSLParameters();
188401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler        ArrayList<SNIMatcher> dupeMatchers = new ArrayList<SNIMatcher>();
189d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        dupeMatchers.add(SNIHostName.createSNIMatcher("www\\.example\\.com"));
190d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        dupeMatchers.add(SNIHostName.createSNIMatcher("www\\.example\\.com"));
191d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        try {
192d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler            p.setSNIMatchers(dupeMatchers);
193d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler            fail("Should throw IllegalArgumentException when matchers are duplicated");
194d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        } catch (IllegalArgumentException expected) {
195d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler            // Ignored.
196d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        }
197d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    }
198d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
199d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    @Test
200d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    public void test_SSLParameters_setSNIMatchers_setNull_getNull() throws Exception {
201401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler        TestUtils.assumeSNIHostnameAvailable();
202d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        SSLParameters p = new SSLParameters();
203d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        p.setSNIMatchers(
204d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler                Collections.singletonList(SNIHostName.createSNIMatcher("www\\.example\\.com")));
205d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNotNull(p.getSNIMatchers());
206d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        p.setSNIMatchers(null);
207d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNull(p.getSNIMatchers());
208d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    }
209d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
210d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    @Test
211d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    public void test_SSLParameters_setSNIMatchers_setEmpty_getEmpty() throws Exception {
212401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler        TestUtils.assumeSNIHostnameAvailable();
213d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        SSLParameters p = new SSLParameters();
214d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        p.setSNIMatchers(
215d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler                Collections.singletonList(SNIHostName.createSNIMatcher("www\\.example\\.com")));
216d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertEquals(1, p.getSNIMatchers().size());
217401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler        p.setSNIMatchers(Collections.<SNIMatcher>emptyList());
218d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        Collection<SNIMatcher> actual = p.getSNIMatchers();
219d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertNotNull(actual);
220d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        assertEquals(0, actual.size());
221d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    }
222d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler
223d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    @Test
224d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    public void test_SSLParameters_getSNIMatchers_unmodifiable() throws Exception {
225401f1c4645f5ec715516ee9674c662448d115e66Nathan Mittler        TestUtils.assumeSNIHostnameAvailable();
226d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        SSLParameters p = new SSLParameters();
227d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        p.setSNIMatchers(
228d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler                Collections.singletonList(SNIHostName.createSNIMatcher("www\\.example\\.com")));
229d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        Collection<SNIMatcher> actual = p.getSNIMatchers();
230d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        try {
231d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler            actual.add(SNIHostName.createSNIMatcher("www\\.google\\.com"));
232d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler            fail("Should not allow modification of list");
233d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        } catch (UnsupportedOperationException expected) {
234d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler            // Ignored.
235d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler        }
236d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler    }
237d4d974d98b4f232abf0a03b631a69ebc4df0b50dNathan Mittler}
238