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.Callback; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.callback.CallbackHandler; 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.callback.NameCallback; 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.callback.PasswordCallback; 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.callback.TextOutputCallback; 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.auth.callback.UnsupportedCallbackException; 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.sasl.Sasl; 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.sasl.SaslClient; 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.sasl.SaslClientFactory; 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.sasl.SaslException; 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.auth.tests.support.SpiEngUtils; 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test for Sasl class 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class Sasl3Test extends TestCase { 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final String CLNTSRV = "SaslClientFactory."; 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final String fClientClass = mySaslClientFactory.class.getName();; 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private Provider [] provs; 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private boolean initProvs; 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void setUp() throws Exception { 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.setUp(); 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (!initProvs) { 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes provs = Security.getProviders(); 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes initProvs = true; 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (provs != null) { 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Provider element : provs) { 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.removeProvider(element.getName()); 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected Provider[] mProv; 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private void addProviders() { 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Provider element : mProv) { 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.insertProviderAt(element, 1); 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @see TestCase#tearDown() 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void tearDown() throws Exception { 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.tearDown(); 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (mProv != null) { 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Provider element : mProv) { 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.removeProvider(element.getName()); 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (provs != null) { 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < provs.length; i++) { 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Security.insertProviderAt(provs[i], (i+1)); 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test for <code>createSaslClient(String[] mechanisms, 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * String authanticationID, String protocol, String serverName, 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Map prop, CallbackHandler cbh))</code> 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * method Assertions: throws NullPointerException when mechanisms is null; 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * throws SaslException when parameters (protocol, cbh, mechanisms) are 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * wrong. 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * All providers are previously removed and 2 new providers were added. 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCreateClient01() throws SaslException { 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes mProv = new Provider[] { 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (new SpiEngUtils()).new MyProvider("MySaslClientProvider1", 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing provider SaslClientFactory - 1", CLNTSRV 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .concat("NAME-1"), fClientClass), 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (new SpiEngUtils()).new MyProvider("MySaslClientProvider2", 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing provider SaslClientFactory - 2", CLNTSRV 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .concat("NAME-2"), fClientClass) }; 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes addProviders(); 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CallbackHandler cbH = new cbHand(); 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Sasl.createSaslClient(null, null, null, null, null, cbH); 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("NullPointerException should be thrown when mechanisms is null"); 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Sasl.createSaslClient(new String[] { "NAME-2" }, null, "protocol", 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes null, null, cbH); 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("SaslException should be thrown when CallbackHandler is wrong"); 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SaslException e) { 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes cbH = new cbHandN(); 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Sasl.createSaslClient(new String[] { "NAME-1" }, null, "protocol", 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes null, null, cbH); 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("SaslException should be thrown when mechanisms is wrong"); 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SaslException e) { 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Sasl.createSaslClient(new String[] { "NAME-2" }, null, null, null, 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes null, cbH); 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("SaslException should be thrown when protocol is null"); 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SaslException e) { 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test for <code>createSaslClient(String[] mechanisms, 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * String authanticationID, String protocol, String serverName, 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Map prop, CallbackHandler cbh))</code> 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * method Assertions: throws NullPointerException when mechanisms is null; 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * returns null SaslClient. 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * All providers are previously removed. 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCreateClient02() throws SaslException { 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Sasl.createSaslClient(null, null, null, null, null, null); 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("NullPointerException should be thrown when mechanisms is null"); 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Not null result", Sasl.createSaslClient( 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new String[] { "NAME-999" }, null, null, null, null, null)); 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test for <code>createSaslClient(String[] mechanisms, 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * String authanticationID, String protocol, String serverName, 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Map prop, CallbackHandler cbh))</code> 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * method 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Assertions: returns SaslClient; throws SaslClient for NAME-1 mechanism 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * All providers are previously removed and 2 new providers were added. 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCreateClient03() throws SaslException { 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes mProv = new Provider[] { 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (new SpiEngUtils()).new MyProvider("MySaslClientProvider1", 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing provider SaslClientFactory - 1", CLNTSRV 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .concat("NAME-1"), fClientClass), 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (new SpiEngUtils()).new MyProvider("MySaslClientProvider2", 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing provider SaslClientFactory - 2", CLNTSRV 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .concat("NAME-2"), fClientClass) }; 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes addProviders(); 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CallbackHandler cbH = new cbHandN(); 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SaslClient saslC = Sasl.createSaslClient(new String[] { "NAME-2" }, 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes null, "protocol", null, null, cbH); 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Null result", saslC); 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes saslC.unwrap(null, 1, 1); 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("SaslException sould be thrown"); 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SaslException e) { 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Incorrect isComplete() result", saslC.isComplete()); 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // try to create client for wrong mechanism 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes saslC = Sasl.createSaslClient(new String[] { "NAME-1" }, null, 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "protocol", null, null, cbH); 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("SaslException sould be thrown"); 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SaslException e) { 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test for <code>createSaslClient(String[] mechanisms, 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * String authanticationID, String protocol, String serverName, 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Map prop, CallbackHandler cbh))</code> 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * method 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Assertions: returns SaslClient; throws SaslClient for NAME-1 mechanism 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * All providers are previously removed and 1 new provider was added. 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCreateClient04() throws SaslException { 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes mProv = new Provider[] { (new SpiEngUtils()).new MyProvider( 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "MySaslClientProvider1", 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing provider SaslClientFactory - 1", CLNTSRV 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .concat("NAME-1"), fClientClass) }; 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes mProv[0].put(CLNTSRV.concat("NAME-2"), fClientClass); 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes addProviders(); 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CallbackHandler cbH = new cbHandN(); 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SaslClient saslC = Sasl.createSaslClient(new String[] { "NAME-2" }, 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes null, "protocol", null, null, cbH); 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Null result for NAME-2", saslC); 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Incorrect isComplete() result", saslC.isComplete()); 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // try to create client for wrong mechanism 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes saslC = Sasl.createSaslClient(new String[] { "NAME-1" }, null, 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "protocol", null, null, cbH); 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("SaslException sould be thrown"); 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SaslException e) { 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test for <code>createSaslClient(String[] mechanisms, 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * String authanticationID, String protocol, String serverName, 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Map prop, CallbackHandler cbh))</code> 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * method 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Assertions: return null client when there is no provider supported some 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * mechanism returns SaslClient when incorrect mechanism is used 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * All providers are previously removed and 2 new providers were added. 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testCreateClient05() throws SaslException { 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes mProv = new Provider[] { 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (new SpiEngUtils()).new MyProvider("MySaslClientProvider1", 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing provider SaslClientFactory - 1", CLNTSRV 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .concat("NAME-2"), fClientClass.concat("Ext")), 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (new SpiEngUtils()).new MyProvider("MySaslClientProvider2", 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing provider SaslClientFactory - 2", CLNTSRV 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .concat("NAME-1"), fClientClass), 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (new SpiEngUtils()).new MyProvider("MySaslClientProvider3", 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing provider SaslClientFactory - 3", CLNTSRV 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .concat("NAME-6"), fClientClass) }; 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes addProviders(); 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CallbackHandler cbH = new cbHandN(); 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SaslClient saslC; 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // try to create SaslClient for wrong mechanism 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // there is no provider supported NAME-77, NAME-66 mechanisms 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Not null object was created for wrong mechanism", Sasl 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .createSaslClient(new String[] { "NAME-77", "NAME-66" }, null, 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "protocol", null, null, cbH)); 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes saslC = Sasl.createSaslClient(new String[] { "NAME-2" }, null, 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "protocol", null, null, cbH); 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Null result for NAME-2", saslC); 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes saslC.unwrap(null, 1, 1); 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("SaslException sould be thrown"); 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SaslException e) { 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Incorrect isComplete() result", saslC.isComplete()); 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // NAME-1 was defined in some provider but it is supported in 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // another provider 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Sasl.createSaslClient(new String[] { "NAME-1" }, null, "protocol", 278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes null, null, cbH); 279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("SaslException sould be thrown"); 280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SaslException e) { 281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // NAME-6 and NAME-5 were defined in one provider but they are 283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // supported 284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // in another provider 285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes saslC = Sasl.createSaslClient(new String[] { "NAME-6", "NAME-5" }, 286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes null, "protocol", null, null, cbH); 287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Null result for NAME-6 and NAME-5", saslC); 288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Additional classes for creating SaslClient and SaslServer objects 292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class mySaslClientFactory implements SaslClientFactory { 295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public mySaslClientFactory() { 296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(); 297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String[] getMechanismNames(Map<String, ?> prop) { 300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new String[] { "NAME-1", "NAME-2", "NAME-3", "NAME-4" }; 301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public SaslClient createSaslClient(String[] mech, String id, 304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String protocol, String srvName, Map<String, ?> prop, CallbackHandler hnd) 305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws SaslException { 306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (mech == null) { 307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new SaslException(); 308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if ("NAME-1".equals(mech[0])) { 310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new SaslException("Incorrect mechanisms"); 311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (protocol == null) { 313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new SaslException("Protocol is null"); 314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes TextOutputCallback[] cb = { new TextOutputCallback( 316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes TextOutputCallback.INFORMATION, "Information") }; 317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes hnd.handle(cb); 319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (UnsupportedCallbackException e) { 320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new SaslException("Incorrect callback handlere", e); 321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new SaslException("Incorrect callback handlere", e); 323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new mySaslClient(); 325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public class mySaslClient implements SaslClient { 328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public mySaslClient() { 329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(); 330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object getNegotiatedProperty(String s) { 333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return ""; 334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String getMechanismName() { 337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return "Proba"; 338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean isComplete() { 341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return false; 342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean hasInitialResponse() { 345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return false; 346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void dispose() throws SaslException { 349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public byte[] evaluateChallenge(byte[] challenge) throws SaslException { 352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new byte[0]; 353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public byte[] unwrap(byte[] incoming, int offset, int len) 356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws SaslException { 357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new SaslException(); 358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public byte[] wrap(byte[] outgoing, int offset, int len) 361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws SaslException { 362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new byte[0]; 363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class mySaslClientFactoryExt extends mySaslClientFactory { 368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String[] getMechanismNames(Map<String, ?> prop) { 370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new String[] { "NAME-5", "NAME-6" }; 371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public SaslClient createSaslClient(String[] mech, String id, 375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String protocol, String srvName, Map<String, ?> prop, CallbackHandler hnd) 376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws SaslException { 377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (mech == null) { 378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new SaslException(); 379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new mySaslClient(); 381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class cbHand implements CallbackHandler { 385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public cbHand() { 386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void handle(Callback[] callbacks) throws IOException, 389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes UnsupportedCallbackException { 390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Callback element : callbacks) { 391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (element instanceof NameCallback) { 392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes NameCallback nc = (NameCallback) element; 393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes nc.setName("Ok"); 394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else if (element instanceof PasswordCallback) { 395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes PasswordCallback pc = (PasswordCallback) element; 396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.err.print(pc.getPrompt()); 397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.err.flush(); 398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes pc.setPassword(new char[] { 'O', 'k' }); 399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else { 400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new UnsupportedCallbackException(element, 401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Callback should be NamCallback or PasswordCallback"); 402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class cbHandN implements CallbackHandler { 408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public cbHandN() { 409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void handle(Callback[] callbacks) throws IOException, 412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes UnsupportedCallbackException { 413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Callback element : callbacks) { 414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (element instanceof TextOutputCallback) { 415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes TextOutputCallback toc = (TextOutputCallback) element; 416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (toc.getMessageType() != TextOutputCallback.INFORMATION) { 417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new IOException("Unsupported message type: " 418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + toc.getMessageType()); 419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else { 421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new UnsupportedCallbackException(element, 422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Callback should be TextOutputCallback"); 423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 428