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