001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.test.security.test;
023:
024: import java.net.URL;
025:
026: import javax.management.Attribute;
027: import javax.management.MBeanServerConnection;
028: import javax.management.ObjectName;
029:
030: import junit.framework.Test;
031: import junit.framework.TestSuite;
032:
033: import org.jboss.test.JBossTestCase;
034: import org.jboss.test.JBossTestSetup;
035: import org.jboss.test.util.ServiceControllerUtil;
036:
037: //$Id: DynamicLoginConfigServiceUnitTestCase.java 57211 2006-09-26 12:39:46Z dimitris@jboss.org $
038:
039: /**
040: * Unit tests for the Dynamic Login Config Service
041: * @author <a href="mailto:Anil.Saldhana@jboss.org">Anil Saldhana</a>
042: * @since May 12, 2006
043: * @version $Revision: 57211 $
044: */
045: public class DynamicLoginConfigServiceUnitTestCase extends
046: JBossTestCase {
047: private String login_config = "<policy>\n<application-policy name='test-dyn'>"
048: + "<authentication>"
049: + "<login-module code='org.jboss.security.auth.spi.UsersRolesLoginModule'"
050: + " flag = 'required' /> </authentication></application-policy></policy>";
051:
052: private ServiceControllerUtil sutil = null;
053:
054: public DynamicLoginConfigServiceUnitTestCase(String name) {
055: super (name);
056: try {
057: sutil = new ServiceControllerUtil(this .getServer());
058: } catch (Exception e) {
059: fail("Exception thrown in creating util class"
060: + e.getLocalizedMessage());
061: }
062: }
063:
064: /**
065: * JBAS-3210: DynamicLoginConfig service fails absolute login-config.xml url
066: * @throws Exception
067: */
068: public void testAbsoluteLoginConfigURL() throws Exception {
069: MBeanServerConnection server = getServer();
070: ObjectName oname = new ObjectName(
071: "jboss:service=TempFileCreator");
072: URL confURL = (URL) server
073: .invoke(oname, "createTempFile", new Object[] {
074: "test-dyn", login_config }, new String[] {
075: "java.lang.String", "java.lang.String" });
076: assertNotNull(" config url != null", confURL);
077: ObjectName serviceName = new ObjectName(
078: "jboss:service=TestDynamicLoginConfig");
079: if (server.isRegistered(serviceName))
080: server.unregisterMBean(serviceName);
081: prepareTestDynamicLoginConfig(server, serviceName, confURL
082: .toExternalForm());
083: sutil.createAService(serviceName);
084: assertTrue("Created?", sutil.isCreated(serviceName));
085: sutil.startAService(serviceName);
086: assertTrue("Started?", sutil.isStarted(serviceName));
087: //Restart the service
088: sutil.stopAService(serviceName);
089: assertTrue("Stopped?", sutil.isStopped(serviceName));
090: sutil.startAService(serviceName);
091: assertTrue("Started?", sutil.isStarted(serviceName));
092:
093: String authConfig = (String) server.getAttribute(serviceName,
094: "AuthConfig");
095: assertEquals(confURL + "matches", confURL.toExternalForm(),
096: authConfig);
097: sutil.stopAService(serviceName);
098: assertTrue("Stopped?", sutil.isStopped(serviceName));
099: sutil.startAService(serviceName);
100: assertTrue("Started?", sutil.isStarted(serviceName));
101: sutil.destroyAService(serviceName);
102: assertTrue("Destroyed?", sutil.isDestroyed(serviceName));
103: if (server.isRegistered(serviceName))
104: server.unregisterMBean(serviceName);
105: }
106:
107: /**
108: * JBAS-3422: Do not allow Null AuthConfig or login-config.xml
109: * @throws Exception
110: */
111: public void testAuthConf() throws Exception {
112: MBeanServerConnection server = getServer();
113: ObjectName serviceName = new ObjectName(
114: "jboss:service=TestDynamicLoginConfig");
115: if (server.isRegistered(serviceName))
116: server.unregisterMBean(serviceName);
117: prepareTestDynamicLoginConfig(server, new ObjectName(
118: "jboss:service=TestDynamicLoginConfig"), null);
119: try {
120: sutil.createAService(serviceName);
121: assertTrue("Created?", sutil.isCreated(serviceName));
122: sutil.startAService(serviceName);
123: assertFalse("Should not Start", sutil
124: .isStarted(serviceName));
125: } catch (Exception t) {
126: fail("Exception thrown:" + t.getLocalizedMessage());
127: } finally {
128: if (sutil.isStarted(serviceName)) {
129: sutil.stopAService(serviceName);
130: assertTrue("Stopped?", sutil.isStopped(serviceName));
131: }
132: }
133:
134: try {
135: server.setAttribute(serviceName, new Attribute(
136: "AuthConfig", "login-config.xml"));
137: sutil.startAService(serviceName);
138: assertFalse("Should not Start?", sutil
139: .isStarted(serviceName));
140: } catch (Exception t) {
141: fail("Failute to set an attribute and start a service:"
142: + t.getLocalizedMessage());
143: } finally {
144: if (sutil.isStarted(serviceName)) {
145: sutil.stopAService(serviceName);
146: assertTrue("Stopped?", sutil.isStopped(serviceName));
147: }
148: sutil.destroyAService(serviceName);
149: assertTrue("Destroyed?", sutil.isDestroyed(serviceName));
150: if (server.isRegistered(serviceName))
151: server.unregisterMBean(serviceName);
152: }
153: }
154:
155: private void prepareTestDynamicLoginConfig(
156: MBeanServerConnection server, ObjectName serviceOName,
157: String confURL) throws Exception {
158: server.createMBean(
159: "org.jboss.security.auth.login.DynamicLoginConfig",
160: serviceOName);
161: if (confURL != null) {
162: Attribute attr = new Attribute("AuthConfig", confURL);
163: server.setAttribute(serviceOName, attr);
164: }
165:
166: ObjectName lcs = new ObjectName(
167: "jboss.security:service=XMLLoginConfig");
168: Attribute attrLCS = new Attribute("LoginConfigService", lcs);
169: server.setAttribute(serviceOName, attrLCS);
170: }
171:
172: public static Test suite() throws Exception {
173: TestSuite suite = new TestSuite();
174: suite.addTest(new TestSuite(
175: DynamicLoginConfigServiceUnitTestCase.class));
176: JBossTestSetup wrapper = new JBossTestSetup(suite) {
177: protected void setUp() throws Exception {
178: deploymentException = null;
179: try {
180: this .delegate.init();
181: this .deploy("tempfilecreator.jar");
182: this
183: .redeploy(getResourceURL("jmx/tempFileCreator-service.xml"));
184: } catch (Exception ex) {
185: // Throw this in testServerFound() instead.
186: deploymentException = ex;
187: }
188: }
189:
190: protected void tearDown() throws Exception {
191: this
192: .undeploy(getResourceURL("jmx/tempFileCreator-service.xml"));
193: }
194: };
195: return wrapper;
196: }
197: }
|