/*
* 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.integration.auditlog;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLED;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PROTOCOL;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SYSTEM_PROPERTY;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.TLS;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.operations.common.Util;
import org.jboss.as.test.integration.security.common.CoreUtils;
import org.jboss.as.test.shared.TimeoutUtil;
import org.jboss.as.test.syslogserver.BlockedSyslogServerEventHandler;
import org.jboss.as.test.syslogserver.TCPSyslogServerConfig;
import org.jboss.dmr.ModelNode;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.productivity.java.syslog4j.SyslogConstants;
import org.productivity.java.syslog4j.server.SyslogServerConfigIF;
import org.productivity.java.syslog4j.server.SyslogServerEventIF;
import org.productivity.java.syslog4j.server.SyslogServerIF;
import org.wildfly.core.testrunner.ManagementClient;
import org.wildfly.core.testrunner.ServerSetup;
import org.wildfly.core.testrunner.WildflyTestRunner;
/**
* Tests that plain TCP messages are not sent when TLS syslog-handler is selected in Audit Log settings. <br>
* Regression test for WFCORE-190.
*
* @author: Josef Cacek
*/
@RunWith(WildflyTestRunner.class)
@ServerSetup(TLSAuditLogToTCPSyslogTestCase.AuditLogToTCPSyslogTestCaseSetup.class)
public class TLSAuditLogToTCPSyslogTestCase {
private static final int ADJUSTED_SECOND = TimeoutUtil.adjust(1000);
@Inject
private ManagementClient managementClient;
protected static SyslogServerIF server;
private List<Long> properties = new ArrayList<Long>();
@Test
public void testAuditLoggingToSyslog() throws Exception {
final BlockingQueue<SyslogServerEventIF> queue = BlockedSyslogServerEventHandler.getQueue();
queue.clear();
SyslogServerEventIF syslogEvent = null;
try {
setAuditlogEnabled(true);
// enabling audit-log is auditable event
syslogEvent = queue.poll(1 * ADJUSTED_SECOND, TimeUnit.MILLISECONDS);
// but we don't expect a message in TCP syslog server
Assert.assertNull("No message was expected in the syslog, because TCP syslog server is used", syslogEvent);
} finally {
setAuditlogEnabled(false);
}
for (Long property : properties) {
CoreUtils.applyUpdate(
Util.createRemoveOperation(PathAddress.pathAddress().append(SYSTEM_PROPERTY, Long.toString(property))),
managementClient.getControllerClient());
}
properties.clear();
}
/**
* Enables/disables the auditlog.
*
* @throws Exception
*/
private void setAuditlogEnabled(boolean value) throws Exception {
ModelNode op = Util.getWriteAttributeOperation(AuditLogToSyslogSetup.AUDIT_LOG_LOGGER_ADDR, ENABLED, value);
CoreUtils.applyUpdate(op, managementClient.getControllerClient());
}
/**
* {@link org.jboss.as.arquillian.api.ServerSetupTask} implementation which configures syslog server and auditlog-to-syslog
* handler for this test.
*/
static class AuditLogToTCPSyslogTestCaseSetup extends AuditLogToSyslogSetup {
@Override
protected String getSyslogProtocol() {
return SyslogConstants.TCP;
}
@Override
protected SyslogServerConfigIF getSyslogConfig() {
return new TCPSyslogServerConfig();
}
@Override
protected ModelNode addAuditlogSyslogProtocol(PathAddress syslogHandlerAddress) {
ModelNode op = Util.createAddOperation(syslogHandlerAddress.append(PROTOCOL, TLS));
op.get("message-transfer").set("OCTET_COUNTING");
return op;
}
}
}