KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > geronimo > security > AbstractTest


1 /**
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */

17
18 package org.apache.geronimo.security;
19
20 import org.apache.geronimo.testsupport.TestSupport;
21
22 import org.apache.geronimo.gbean.AbstractName;
23 import org.apache.geronimo.gbean.GBeanData;
24 import org.apache.geronimo.gbean.GBeanInfo;
25 import org.apache.geronimo.gbean.AbstractNameQuery;
26 import org.apache.geronimo.kernel.Kernel;
27 import org.apache.geronimo.kernel.KernelFactory;
28 import org.apache.geronimo.kernel.repository.Artifact;
29 import org.apache.geronimo.security.jaas.JaasLoginModuleUse;
30 import org.apache.geronimo.security.jaas.LoginModuleGBean;
31 import org.apache.geronimo.security.jaas.GeronimoLoginConfiguration;
32 import org.apache.geronimo.security.jaas.ConfigurationEntryFactory;
33 import org.apache.geronimo.security.jaas.server.JaasLoginService;
34 import org.apache.geronimo.security.realm.GenericSecurityRealm;
35 import org.apache.geronimo.security.realm.SecurityRealm;
36 import org.apache.geronimo.security.remoting.jmx.JaasLoginServiceRemotingServer;
37 import org.apache.geronimo.system.serverinfo.BasicServerInfo;
38 import org.apache.geronimo.system.serverinfo.ServerInfo;
39
40 import javax.management.MalformedObjectNameException JavaDoc;
41 import javax.management.ObjectName JavaDoc;
42 import javax.security.auth.callback.Callback JavaDoc;
43 import javax.security.auth.callback.CallbackHandler JavaDoc;
44 import javax.security.auth.callback.NameCallback JavaDoc;
45 import javax.security.auth.callback.PasswordCallback JavaDoc;
46 import javax.security.auth.callback.UnsupportedCallbackException JavaDoc;
47 import java.io.IOException JavaDoc;
48 import java.util.HashMap JavaDoc;
49 import java.util.Map JavaDoc;
50
51
52 /**
53  * @version $Rev: 476049 $ $Date: 2006-11-16 23:35:17 -0500 (Thu, 16 Nov 2006) $
54  */

55 public abstract class AbstractTest extends TestSupport {
56     protected Kernel kernel;
57     protected AbstractName serverInfo;
58     protected AbstractName loginService;
59     protected AbstractName testLoginModule;
60     protected AbstractName testRealm;
61     protected AbstractName serverStub;
62     private static final String JavaDoc REALM_NAME = "test-realm";
63     protected boolean timeoutTest = false;
64     protected boolean needServerInfo = false;
65     protected AbstractName loginConfiguration;
66     protected boolean needLoginConfiguration;
67
68     protected void setUp() throws Exception JavaDoc {
69         kernel = KernelFactory.newInstance().createKernel("test.kernel");
70         kernel.boot();
71
72         GBeanData gbean;
73
74         // Create all the parts
75
if (needServerInfo) {
76             gbean = buildGBeanData("name", "ServerInfo", BasicServerInfo.GBEAN_INFO);
77             serverInfo = gbean.getAbstractName();
78             gbean.setAttribute("baseDirectory", ".");
79             kernel.loadGBean(gbean, ServerInfo.class.getClassLoader());
80             kernel.startGBean(serverInfo);
81         }
82         if (needLoginConfiguration) {
83             gbean = buildGBeanData("new", "LoginConfiguration", GeronimoLoginConfiguration.getGBeanInfo());
84             loginConfiguration = gbean.getAbstractName();
85             gbean.setReferencePattern("Configurations", new AbstractNameQuery(ConfigurationEntryFactory.class.getName()));
86             kernel.loadGBean(gbean, GeronimoLoginConfiguration.class.getClassLoader());
87         }
88
89         gbean = buildGBeanData("name", "TestLoginService", JaasLoginService.getGBeanInfo());
90         loginService = gbean.getAbstractName();
91         gbean.setReferencePattern("Realms", new AbstractNameQuery(SecurityRealm.class.getName()));
92         if (timeoutTest) {
93             gbean.setAttribute("expiredLoginScanIntervalMillis", new Integer JavaDoc(50));
94             gbean.setAttribute("maxLoginDurationMillis", new Integer JavaDoc(5000));
95         }
96         gbean.setAttribute("algorithm", "HmacSHA1");
97         gbean.setAttribute("password", "secret");
98         kernel.loadGBean(gbean, JaasLoginService.class.getClassLoader());
99
100         gbean = buildGBeanData("name", "TestLoginModule", LoginModuleGBean.getGBeanInfo());
101         testLoginModule = gbean.getAbstractName();
102         gbean.setAttribute("loginModuleClass", "org.apache.geronimo.security.bridge.TestLoginModule");
103         gbean.setAttribute("serverSide", Boolean.TRUE);
104         gbean.setAttribute("loginDomainName", "TestLoginDomain");
105         kernel.loadGBean(gbean, LoginModuleGBean.class.getClassLoader());
106
107         gbean = buildGBeanData("name", "TestLoginModuleUse", JaasLoginModuleUse.getGBeanInfo());
108         AbstractName testUseName = gbean.getAbstractName();
109         gbean.setAttribute("controlFlag", "REQUIRED");
110         gbean.setReferencePattern("LoginModule", testLoginModule);
111         kernel.loadGBean(gbean, JaasLoginModuleUse.class.getClassLoader());
112
113         gbean = buildGBeanData("name", "SecurityRealm" + REALM_NAME, GenericSecurityRealm.getGBeanInfo());
114         testRealm = gbean.getAbstractName();
115         gbean.setAttribute("realmName", REALM_NAME);
116         gbean.setReferencePattern("LoginModuleConfiguration", testUseName);
117         gbean.setReferencePattern("LoginService", loginService);
118         kernel.loadGBean(gbean, GenericSecurityRealm.class.getClassLoader());
119
120         gbean = buildGBeanData("name", "JaasLoginServiceRemotingServer", JaasLoginServiceRemotingServer.getGBeanInfo());
121         serverStub = gbean.getAbstractName();
122         gbean.setAttribute("protocol", "tcp");
123         gbean.setAttribute("host", "0.0.0.0");
124         gbean.setAttribute("port", new Integer JavaDoc(4242));
125         gbean.setReferencePattern("LoginService", loginService);
126         kernel.loadGBean(gbean, JaasLoginServiceRemotingServer.class.getClassLoader());
127
128         kernel.startGBean(loginService);
129         kernel.startGBean(testLoginModule);
130         kernel.startGBean(testUseName);
131         kernel.startGBean(testRealm);
132         kernel.startGBean(serverStub);
133     }
134
135     protected void tearDown() throws Exception JavaDoc {
136         kernel.stopGBean(serverStub);
137         kernel.stopGBean(testRealm);
138         kernel.stopGBean(loginService);
139
140         kernel.unloadGBean(loginService);
141         kernel.unloadGBean(testRealm);
142         kernel.unloadGBean(testLoginModule);
143         kernel.unloadGBean(serverStub);
144
145         kernel.shutdown();
146     }
147
148
149     protected GBeanData buildGBeanData(String JavaDoc key, String JavaDoc value, GBeanInfo info) throws MalformedObjectNameException JavaDoc {
150         AbstractName abstractName = buildAbstractName(key, value, info);
151         return new GBeanData(abstractName, info);
152     }
153
154     private AbstractName buildAbstractName(String JavaDoc key, String JavaDoc value, GBeanInfo info) throws MalformedObjectNameException JavaDoc {
155         Map JavaDoc names = new HashMap JavaDoc();
156         names.put(key, value);
157         return new AbstractName(new Artifact("test", "foo", "1", "car"), names, new ObjectName JavaDoc("test:" + key + "=" + value));
158     }
159
160     public static class UsernamePasswordCallback implements CallbackHandler JavaDoc {
161         private final String JavaDoc username;
162         private final String JavaDoc password;
163
164         public UsernamePasswordCallback(String JavaDoc username, String JavaDoc password) {
165             this.username = username;
166             this.password = password;
167         }
168
169         public void handle(Callback JavaDoc[] callbacks) throws IOException JavaDoc, UnsupportedCallbackException JavaDoc {
170             for (int i = 0; i < callbacks.length; i++) {
171                 if (callbacks[i] instanceof PasswordCallback JavaDoc) {
172                     ((PasswordCallback JavaDoc) callbacks[i]).setPassword(password.toCharArray());
173                 } else if (callbacks[i] instanceof NameCallback JavaDoc) {
174                     ((NameCallback JavaDoc) callbacks[i]).setName(username);
175                 }
176             }
177         }
178     }
179 }
180
Popular Tags