/* * JBoss, Home of Professional Open Source * Copyright 2014, JBoss Inc., and individual contributors as indicated * by the @authors tag. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.as.test.manualmode.auditlog; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ACCESS; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.AUDIT; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.AUDIT_LOG; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.CORE_SERVICE; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.FILE_HANDLER; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.FORMATTER; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.HANDLER; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.JSON_FORMATTER; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.MANAGEMENT; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OUTCOME; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PATH; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.RELATIVE_TO; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SUBSYSTEM; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SUCCESS; import java.io.File; import javax.inject.Inject; import org.jboss.as.controller.PathAddress; import org.jboss.as.controller.PathElement; import org.jboss.as.controller.client.ModelControllerClient; import org.jboss.as.controller.operations.common.Util; import org.jboss.as.domain.management.CoreManagementResourceDefinition; import org.jboss.as.domain.management.audit.AccessAuditResourceDefinition; import org.jboss.as.domain.management.audit.AuditLogLoggerResourceDefinition; import org.jboss.as.test.shared.FileUtils; import org.jboss.dmr.ModelNode; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.wildfly.core.testrunner.ManagementClient; import org.wildfly.core.testrunner.ServerControl; import org.wildfly.core.testrunner.ServerController; import org.wildfly.core.testrunner.WildflyTestRunner; import org.xnio.IoUtils; /** * @author Ondrej Lukas * * Test that attribute log-boot of audit-log in Management and * audit-log in JMX works right */ @RunWith(WildflyTestRunner.class) @ServerControl(manual = true) public class AuditLogBootingLogTestCase { private static final String JMX = "jmx"; private static final String CONFIGURATION = "configuration"; private static final String HANDLER_NAME = "file2"; @Inject private ServerController container; ManagementClient managementClient; private File auditLogFile; private PathAddress auditLogConfigAddress; private File jmxLogFile; private PathAddress jmxLogConfigAddress; private PathAddress jmxFormatterConfigAddress; @Test public void testBootIsLogged() throws Exception { if (auditLogFile.exists()) { auditLogFile.delete(); } if (jmxLogFile.exists()) { jmxLogFile.delete(); } container.start(); FileUtils.waitForFiles(auditLogFile, jmxLogFile); Assert.assertTrue("Booting logs weren't logged but log-boot is set to true", auditLogFile.exists()); Assert.assertTrue("Booting jmx logs weren't logged but log-boot is set to true", jmxLogFile.exists()); beforeTestBootIsNotLogged(); container.stop(); if (auditLogFile.exists()) { auditLogFile.delete(); } if (jmxLogFile.exists()) { jmxLogFile.delete(); } container.start(); Assert.assertFalse("Booting logs were logged but log-boot is set to false", auditLogFile.exists()); Assert.assertFalse("Booting jmx logs were logged but log-boot is set to false", jmxLogFile.exists()); } private void beforeTestBootIsNotLogged() throws Exception { final ModelControllerClient client = container.getClient().getControllerClient(); ModelNode op; ModelNode result; op = Util.getWriteAttributeOperation(auditLogConfigAddress, AuditLogLoggerResourceDefinition.LOG_BOOT.getName(), new ModelNode(false)); result = client.execute(op); Assert.assertEquals(result.get("failure-description").asString(), SUCCESS, result.get(OUTCOME).asString()); op = Util.getWriteAttributeOperation(jmxLogConfigAddress, AuditLogLoggerResourceDefinition.LOG_BOOT.getName(), new ModelNode(false)); result = client.execute(op); Assert.assertEquals(result.get("failure-description").asString(), SUCCESS, result.get(OUTCOME).asString()); } @Before public void beforeTest() throws Exception { auditLogFile = new File(System.getProperty("jboss.home")); auditLogFile = new File(auditLogFile, "standalone"); auditLogFile = new File(auditLogFile, "data"); auditLogFile = new File(auditLogFile, "audit-log.log"); if (auditLogFile.exists()) { auditLogFile.delete(); } jmxLogFile = new File(System.getProperty("jboss.home")); jmxLogFile = new File(jmxLogFile, "standalone"); jmxLogFile = new File(jmxLogFile, "data"); jmxLogFile = new File(jmxLogFile, "jmx-log.log"); if (jmxLogFile.exists()) { jmxLogFile.delete(); } // Start the server container.start(); managementClient = container.getClient(); final ModelControllerClient client = managementClient.getControllerClient(); ModelNode op; ModelNode result; auditLogConfigAddress = PathAddress.pathAddress(CoreManagementResourceDefinition.PATH_ELEMENT, AccessAuditResourceDefinition.PATH_ELEMENT, AuditLogLoggerResourceDefinition.PATH_ELEMENT); // Enable audit logging and boot operations op = Util.getWriteAttributeOperation(auditLogConfigAddress, AuditLogLoggerResourceDefinition.LOG_BOOT.getName(), new ModelNode(true)); result = client.execute(op); Assert.assertEquals(result.get("failure-description").asString(), SUCCESS, result.get(OUTCOME).asString()); op = Util.getWriteAttributeOperation(auditLogConfigAddress, AuditLogLoggerResourceDefinition.ENABLED.getName(), new ModelNode(true)); result = client.execute(op); Assert.assertEquals(result.get("failure-description").asString(), SUCCESS, result.get(OUTCOME).asString()); jmxFormatterConfigAddress = PathAddress.pathAddress(PathElement.pathElement(CORE_SERVICE, MANAGEMENT), PathElement.pathElement(ACCESS, AUDIT), PathElement.pathElement(FILE_HANDLER, HANDLER_NAME)); op = Util.createAddOperation(jmxFormatterConfigAddress); op.get(FORMATTER).set(JSON_FORMATTER); op.get(PATH).set("jmx-log.log"); op.get(RELATIVE_TO).set("jboss.server.data.dir"); result = client.execute(op); Assert.assertEquals(result.get("failure-description").asString(), SUCCESS, result.get(OUTCOME).asString()); jmxLogConfigAddress = PathAddress.pathAddress(PathElement.pathElement(SUBSYSTEM, JMX), PathElement.pathElement(CONFIGURATION, AUDIT_LOG)); op = Util.createAddOperation(jmxLogConfigAddress); result = client.execute(op); Assert.assertEquals(result.get("failure-description").asString(), SUCCESS, result.get(OUTCOME).asString()); op = Util.createAddOperation(PathAddress.pathAddress(jmxLogConfigAddress, PathElement.pathElement(HANDLER, HANDLER_NAME))); result = client.execute(op); Assert.assertEquals(result.get("failure-description").asString(), SUCCESS, result.get(OUTCOME).asString()); op = Util.getWriteAttributeOperation(jmxLogConfigAddress, AuditLogLoggerResourceDefinition.LOG_BOOT.getName(), new ModelNode(true)); result = client.execute(op); Assert.assertEquals(result.get("failure-description").asString(), SUCCESS, result.get(OUTCOME).asString()); op = Util.getWriteAttributeOperation(jmxLogConfigAddress, AuditLogLoggerResourceDefinition.ENABLED.getName(), new ModelNode(true)); result = client.execute(op); Assert.assertEquals(result.get("failure-description").asString(), SUCCESS, result.get(OUTCOME).asString()); container.stop(); } @After public void afterTest() throws Exception { final ModelControllerClient client = container.getClient().getControllerClient(); ModelNode result; ModelNode op = Util.getWriteAttributeOperation(auditLogConfigAddress, AuditLogLoggerResourceDefinition.ENABLED.getName(), new ModelNode(false)); result = client.execute(op); Assert.assertEquals(result.get("failure-description").asString(), SUCCESS, result.get(OUTCOME).asString()); op = Util.getResourceRemoveOperation(PathAddress.pathAddress(jmxLogConfigAddress, PathElement.pathElement(HANDLER, HANDLER_NAME))); result = client.execute(op); Assert.assertEquals(result.get("failure-description").asString(), SUCCESS, result.get(OUTCOME).asString()); op = Util.getResourceRemoveOperation(jmxLogConfigAddress); result = client.execute(op); Assert.assertEquals(result.get("failure-description").asString(), SUCCESS, result.get(OUTCOME).asString()); op = Util.getResourceRemoveOperation(jmxFormatterConfigAddress); result = client.execute(op); Assert.assertEquals(result.get("failure-description").asString(), SUCCESS, result.get(OUTCOME).asString()); if (auditLogFile.exists()) { auditLogFile.delete(); } if (jmxLogFile.exists()) { jmxLogFile.delete(); } try { // Stop the container container.stop(); } finally { IoUtils.safeClose(client); } } }