package org.pentaho.platform.engine.core;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.when;
import org.apache.commons.lang.StringUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.pentaho.platform.api.engine.IAuditEntry;
import org.pentaho.platform.api.engine.IRuntimeContext;
import org.pentaho.platform.engine.core.audit.AuditEntry;
import org.pentaho.platform.engine.core.audit.AuditHelper;
import org.pentaho.platform.engine.core.system.PentahoSystem;
import org.pentaho.platform.engine.core.system.StandaloneSession;
import org.pentaho.platform.engine.core.system.objfac.StandaloneObjectFactory;
public class AuditHelperTest {
private static final String SESSION_NAME = "testuser";
private static final String TEST_TYPE = "testtype";
private static final String TEST_NAME = "testname";
private static final String TEST_TEXT = "testtext";
private static final float TEST_DURATION = 1.23f;
private StandaloneObjectFactory factory;
private StandaloneSession session;
@Mock
private IRuntimeContext context;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks( this );
session = new StandaloneSession( SESSION_NAME );
factory = new StandaloneObjectFactory();
PentahoSystem.registerObjectFactory( factory );
factory.defineObject( IAuditEntry.class.getSimpleName(), TestAuditEntry.class.getName(),
StandaloneObjectFactory.Scope.GLOBAL );
}
@After
public void terDown() {
session.destroy();
PentahoSystem.deregisterObjectFactory( factory );
AuditEntry.getCounts().clear();
}
@Test
public void testAuditHelper() throws Exception {
when( context.getActionName() ).thenReturn( "testActionName" );
when( context.getInstanceId() ).thenReturn( "testInstanceId" );
when( context.getCurrentComponentName() ).thenReturn( "testCurrentComponentName" );
when( context.getProcessId() ).thenReturn( "testProcessId" );
AuditHelper.audit( context, session, TEST_TYPE, TEST_NAME, TEST_TEXT, TEST_DURATION, null );
TestAuditEntry entry = (TestAuditEntry) factory.get( IAuditEntry.class, null );
assertNotNull( "AuditEntry should not be null", entry );
entry.auditAll( "testProcessId", "testInstanceId", "testActionName", "testCurrentComponentName", "testuser", null,
null, "testtext", null, 0 );
assertEquals( context.getInstanceId(), entry.instId );
assertEquals( context.getProcessId(), entry.jobId );
assertEquals( context.getActionName(), entry.objId );
assertEquals( context.getCurrentComponentName(), entry.objType );
assertEquals( SESSION_NAME, entry.actor );
assertEquals( TEST_TEXT, entry.messageTxtValue );
assertEquals( Long.valueOf( 1 ), AuditEntry.getCounts().get( TEST_TYPE ) );
}
@Test
public void testAuditHelperNotValid() throws Exception {
AuditHelper.audit( null, session, TEST_TYPE, TEST_NAME, TEST_TEXT, TEST_DURATION, null );
TestAuditEntry entry = (TestAuditEntry) factory.get( IAuditEntry.class, null );
assertNotNull( "AuditEntry should not be null", entry );
entry.auditAll( "", "", "", "", "testuser", null, null, "testtext", null, 0 );
assertEquals( StringUtils.EMPTY, entry.instId );
assertEquals( StringUtils.EMPTY, entry.jobId );
assertEquals( StringUtils.EMPTY, entry.objId );
assertEquals( StringUtils.EMPTY, entry.objType );
assertEquals( SESSION_NAME, entry.actor );
assertEquals( TEST_TEXT, entry.messageTxtValue );
assertEquals( Long.valueOf( 1 ), AuditEntry.getCounts().get( TEST_TYPE ) );
}
}