package org.owasp.security.logging.util;
import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
import org.junit.Test;
import org.owasp.security.logging.SecurityMarkers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.sun.management.UnixOperatingSystemMXBean;
public class ExtendedIntervalLoggingTest {
private static final Logger logger = LoggerFactory.getLogger(ExtendedIntervalLoggingTest.class);
@Test
public void doExtendedTest() {
logger.info("extended test started");
IntervalLoggerController wd = SecurityLoggingFactory.getControllerInstance();
// Add support for security markers
wd.setStatusMessageView( new DefaultIntervalLoggerView() {
@Override
public void logMessage( String message ) {
logger.info( SecurityMarkers.RESTRICTED, message );
}
});
// Add a new property to the list of current properties
DefaultIntervalLoggerModel model = new DefaultIntervalLoggerModel();
model.addProperty( new DefaultIntervalProperty("OpenFiles") {
public void refresh() {
// restricted class, display open file handle count on *nix if we can.
OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean();
if(os instanceof UnixOperatingSystemMXBean)
value = Long.toString(((UnixOperatingSystemMXBean) os).getOpenFileDescriptorCount());
}
}
);
// Remove default property from middle of the list like ThreadNew
IntervalProperty[] properties = model.getProperties();
for ( IntervalProperty i : properties ) {
if( i.getName().equals("ThreadNew") )
model.removeProperty(i);
}
wd.setStatusMessageModel(model);
// Update interval to every 3 seconds
wd.start(3000);
// wait around.
long exit_time = System.currentTimeMillis() + (1000*30);
while( exit_time > System.currentTimeMillis() ) {
Thread.yield();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
wd.stop();
logger.info( "extended test finished");
}
}