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