1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* 2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership. 5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with 7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License. You may obtain a copy of the License at 8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software 12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and 15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License. 16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes* @author Vera Y. Petrashkova 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes*/ 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.auth.tests.javax.security.sasl; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Provider; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Security; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Map; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.callback.CallbackHandler; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.callback.TextOutputCallback; 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.callback.UnsupportedCallbackException; 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.sasl.Sasl; 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.sasl.SaslException; 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.sasl.SaslServer; 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.sasl.SaslServerFactory; 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.auth.tests.support.SpiEngUtils; 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test for Sasl class 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class Sasl4Test extends TestCase { 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final String SRVSSRV = "SaslServerFactory."; 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final String fServerClass = mySaslServerFactory.class.getName(); 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private Provider [] provs; 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private boolean initProvs; 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void setUp() throws Exception { 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.setUp(); 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (!initProvs) { 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes provs = Security.getProviders(); 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes initProvs = true; 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (provs != null) { 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Provider element : provs) { 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.removeProvider(element.getName()); 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected Provider[] mProv; 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private void addProviders() { 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Provider element : mProv) { 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.insertProviderAt(element, 1); 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @see TestCase#tearDown() 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void tearDown() throws Exception { 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.tearDown(); 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (mProv != null) { 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Provider element : mProv) { 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.removeProvider(element.getName()); 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (provs != null) { 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < provs.length; i++) { 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.insertProviderAt(provs[i], (i+1)); 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } } 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test for <code>createSaslServer(String mechanism, 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * String protocol, String serverName, 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Map prop, CallbackHandler cbh))</code> method 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Assertions: 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * throws NullPointerException when mechanism is null; 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * throws SaslException when parameters (protocol, cbh, 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * mechanism) are wrong. 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * All providers are previously removed and 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 2 new providers were added. 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCreateServer01() throws SaslException { 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes mProv = new Provider[] { 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (new SpiEngUtils()).new MyProvider("MySaslServerProvider1", 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing provider SaslServerFactory - 1", SRVSSRV 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .concat("MECH-1"), fServerClass), 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (new SpiEngUtils()).new MyProvider("MySaslServerProvider2", 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing provider SaslServerFactory - 2", SRVSSRV 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .concat("MECH-2"), fServerClass) }; 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes addProviders(); 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CallbackHandler cbH = new Sasl3Test.cbHand(); 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Sasl.createSaslServer(null, null, null, null, cbH); 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("NullPointerException should be thrown when mechanisms is null"); 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Sasl.createSaslServer("MECH-2", "protocol", null, null, cbH); 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("SaslException should be thrown when CallbackHandler is wrong"); 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SaslException e) { 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes cbH = new Sasl3Test.cbHandN(); 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Sasl.createSaslServer("MECH-1", "protocol", null, null, cbH); 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("SaslException should be thrown when mechanisms is wrong"); 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SaslException e) { 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Sasl.createSaslServer("MECH-2", null, null, null, cbH); 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("SaslException should be thrown when protocol is null"); 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SaslException e) { 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test for <code>createSaslServer(String mechanism, 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * String protocol, String serverName, 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Map prop, CallbackHandler cbh))</code> 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * method Assertions: throws NullPointerException when mechanisms is null; 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * returns null SaslServer. 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * All providers are previously removed. 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCreateServer02() throws SaslException { 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Sasl.createSaslServer(null, null, null, null, null); 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("NullPointerException should be thrown when mechanisms is null"); 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Not null result", Sasl.createSaslServer("MECH-999", null, 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes null, null, null)); 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test for <code>createSaslServer(String mechanism, 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * String protocol, String serverName, 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Map prop, CallbackHandler cbh))</code> method 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Assertions: 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * returns SaslServer; 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * throws SaslServer for MECH-1 mechanism 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * All providers are previously removed and 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 2 new providers were added. 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCreateServer03() throws SaslException { 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes mProv = new Provider[] { 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (new SpiEngUtils()).new MyProvider("MySaslServerProvider1", 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing provider SaslServerFactory - 1", SRVSSRV 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .concat("MECH-1"), fServerClass), 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (new SpiEngUtils()).new MyProvider("MySaslServerProvider2", 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing provider SaslServerFactory - 2", SRVSSRV 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .concat("MECH-2"), fServerClass) }; 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes addProviders(); 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CallbackHandler cbH = new Sasl3Test.cbHandN(); 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SaslServer saslS = Sasl.createSaslServer("MECH-2", "protocol", null, 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes null, cbH); 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Null result", saslS); 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes saslS.unwrap(null, 1, 1); 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("SaslException sould be thrown"); 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SaslException e) { 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Incorrect isComplete() result", saslS.isComplete()); 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // try to create Server for wrong mechanism 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes saslS = Sasl 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .createSaslServer("MECH-1", "protocol", null, null, cbH); 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("SaslException sould be thrown"); 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SaslException e) { 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test for <code>createSaslServer(String mechanism, 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * String protocol, String serverName, 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Map prop, CallbackHandler cbh))</code> method 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Assertions: 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * returns SaslServer; 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * throws SaslServer for MECH-1 mechanism 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * All providers are previously removed and 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 1 new provider was added. 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCreateServer04() throws SaslException { 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes mProv = new Provider[] { (new SpiEngUtils()).new MyProvider( 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "MySaslServerProvider1", 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing provider SaslServerFactory - 1", SRVSSRV 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .concat("MECH-1"), fServerClass) }; 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes mProv[0].put(SRVSSRV.concat("MECH-2"), fServerClass); 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes addProviders(); 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CallbackHandler cbH = new Sasl3Test.cbHandN(); 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SaslServer saslS = Sasl.createSaslServer("MECH-2", "protocol", null, 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes null, cbH); 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Null result for MECH-2", saslS); 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Incorrect isComplete() result", saslS.isComplete()); 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // try to create Server for wrong mechanism 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes saslS = Sasl 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .createSaslServer("MECH-1", "protocol", null, null, cbH); 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("SaslException sould be thrown"); 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SaslException e) { 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test for <code>createSaslServer(String mechanism, 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * String protocol, String serverName, 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Map prop, CallbackHandler cbh))</code> method 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Assertions: 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * return null Server when there is no provider supported some mechanism 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * returns SaslServer when incorrect mechanism is used 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * All providers are previously removed and 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 2 new providers were added. 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCreateServer05() throws SaslException { 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes mProv = new Provider[] { 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (new SpiEngUtils()).new MyProvider("MySaslServerProvider1", 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing provider SaslServerFactory - 1", SRVSSRV 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .concat("MECH-2"), fServerClass.concat("Ext")), 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (new SpiEngUtils()).new MyProvider("MySaslServerProvider2", 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing provider SaslServerFactory - 2", SRVSSRV 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .concat("MECH-1"), fServerClass), 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (new SpiEngUtils()).new MyProvider("MySaslServerProvider3", 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing provider SaslServerFactory - 3", SRVSSRV 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .concat("MECH-6"), fServerClass) }; 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes mProv[2].put(SRVSSRV.concat("MECH-5"), fServerClass); 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes addProviders(); 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CallbackHandler cbH = new Sasl3Test.cbHandN(); 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SaslServer saslS; 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // try to create SaslServer for wrong mechanism 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // there is no provider supported MECH-77, MECH-66 mechanisms 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Not null object was created for wrong mechanism", Sasl 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .createSaslServer("MECH-77", "protocol", null, null, cbH)); 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes saslS = Sasl.createSaslServer("MECH-2", "protocol", null, null, cbH); 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Null result for MECH-2", saslS); 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes saslS.unwrap(null, 1, 1); 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("SaslException sould be thrown"); 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SaslException e) { 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Incorrect isComplete() result", saslS.isComplete()); 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // MECH-1 was defined in some provider but it is supported in another 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // provider 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Sasl.createSaslServer("MECH-1", "protocol", null, null, cbH); 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("SaslException sould be thrown"); 278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SaslException e) { 279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // MECH-6 and MECH-5 were defined in one provider but they are supported 281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // in another provider 282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes saslS = Sasl.createSaslServer("MECH-6", "protocol", null, null, cbH); 283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Null result for MECH-6", saslS); 284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes saslS = Sasl.createSaslServer("MECH-5", "protocol", null, null, cbH); 285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Null result for MECH-5", saslS); 286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Additional class for creating SaslServer object 290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class mySaslServerFactory implements SaslServerFactory { 292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public mySaslServerFactory() { 293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(); 294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String[] getMechanismNames(Map<String, ?> prop) { 297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new String[] { "MECH-1", "MECH-2", "MECH-3", "MECH-4" }; 298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public SaslServer createSaslServer(String mech, String protocol, 301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String srvName, Map<String, ?> prop, CallbackHandler hnd) throws SaslException { 302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (mech == null) { 303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new SaslException(); 304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if ("MECH-1".equals(mech)) { 306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new SaslException("Incorrect mechanisms"); 307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (protocol == null) { 309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new SaslException("Protocol is null"); 310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes TextOutputCallback[] cb = { new TextOutputCallback( 312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes TextOutputCallback.INFORMATION, "Information") }; 313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hnd.handle(cb); 315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (UnsupportedCallbackException e) { 316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new SaslException("Incorrect callback handlere", e); 317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new SaslException("Incorrect callback handlere", e); 319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new mySaslServer(); 321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public class mySaslServer implements SaslServer { 324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public mySaslServer() { 325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(); 326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void dispose() throws SaslException { 329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public byte[] evaluateResponse(byte[] challenge) throws SaslException { 332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new byte[0]; 333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String getMechanismName() { 336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return "Server Proba"; 337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object getNegotiatedProperty(String s) { 340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return ""; 341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String getAuthorizationID() { 344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return ""; 345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean isComplete() { 348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return false; 349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public byte[] unwrap(byte[] incoming, int offset, int len) 352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws SaslException { 353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new SaslException(); 354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public byte[] wrap(byte[] outgoing, int offset, int len) 357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws SaslException { 358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new byte[0]; 359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class mySaslServerFactoryExt extends mySaslServerFactory { 364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String[] getMechanismNames(Map<String, ?> prop) { 366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new String[] { "MECH-5", "MECH-6" }; 367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public SaslServer createSaslServer(String mech, String protocol, 371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String srvName, Map<String, ?> prop, CallbackHandler hnd) throws SaslException { 372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (mech == null) { 373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new SaslException(); 374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new mySaslServer(); 376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 379