/*
*
* JBoss, Home of Professional Open Source.
* Copyright 2013, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
* /
*/
package org.jboss.as.security;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.RunningMode;
import org.jboss.as.controller.operations.common.Util;
import org.jboss.as.subsystem.test.AbstractSubsystemBaseTest;
import org.jboss.as.subsystem.test.AdditionalInitialization;
import org.jboss.as.subsystem.test.KernelServices;
import org.jboss.dmr.ModelNode;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* <p>
* Security subsystem tests for the version 1.2 of the subsystem schema.
* </p>
*/
public class SecurityDomainModelv12UnitTestCase extends AbstractSubsystemBaseTest {
private static String oldConfig;
@BeforeClass
public static void beforeClass() {
try {
File target = new File(SecurityDomainModelv11UnitTestCase.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParentFile();
File config = new File(target, "config");
config.mkdir();
oldConfig = System.setProperty("jboss.server.config.dir", config.getAbsolutePath());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@AfterClass
public static void afterClass() {
if (oldConfig != null) {
System.setProperty("jboss.server.config.dir", oldConfig);
} else {
System.clearProperty("jboss.server.config.dir");
}
}
public SecurityDomainModelv12UnitTestCase() {
super(SecurityExtension.SUBSYSTEM_NAME, new SecurityExtension());
}
@Override
protected AdditionalInitialization createAdditionalInitialization() {
return new AdditionalInitialization() {
@Override
protected RunningMode getRunningMode() {
return RunningMode.NORMAL;
}
};
}
@Override
protected String getSubsystemXml() throws IOException {
return readResource("securitysubsystemv12.xml");
}
@Override
protected String getSubsystemXsdPath() throws Exception {
return "schema/jboss-as-security_1_2.xsd";
}
@Override
protected void compareXml(String configId, String original, String marshalled) throws Exception {
super.compareXml(configId, original, marshalled, true);
}
@Override
protected Properties getResolvedProperties() {
Properties properties = new Properties();
properties.put("jboss.server.config.dir", System.getProperty("java.io.tmpdir"));
return properties;
}
@Test
public void testOrder() throws Exception {
KernelServices service = createKernelServicesBuilder(createAdditionalInitialization())
.setSubsystemXmlResource("securitysubsystemv12.xml")
.build();
PathAddress address = PathAddress.pathAddress().append("subsystem", "security").append("security-domain", "ordering");
address = address.append("authentication", "classic");
ModelNode writeOp = Util.createOperation("write-attribute", address);
writeOp.get("name").set("login-modules");
for (int i = 1; i <= 6; i++) {
ModelNode module = writeOp.get("value").add();
module.get("code").set("module-" + i);
module.get("flag").set("optional");
module.get("module-options");
}
service.executeOperation(writeOp);
ModelNode readOp = Util.createOperation("read-attribute", address);
readOp.get("name").set("login-modules");
ModelNode result = service.executeForResult(readOp);
List<ModelNode> modules = result.asList();
Assert.assertEquals("There should be exactly 6 modules but there are not", 6, modules.size());
for (int i = 1; i <= 6; i++) {
ModelNode module = modules.get(i - 1);
Assert.assertEquals(module.get("code").asString(), "module-" + i);
}
}
}