package org.pentaho.platform.admin;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.pentaho.platform.api.engine.IPentahoSession;
import org.pentaho.platform.api.scheduler2.IScheduler;
import org.pentaho.platform.api.scheduler2.Job;
import org.pentaho.platform.api.scheduler2.JobTrigger;
import org.pentaho.platform.api.scheduler2.SchedulerException;
import org.pentaho.platform.engine.core.system.PentahoSystem;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
* Created by rfellows on 10/19/15.
*/
@RunWith( MockitoJUnitRunner.class )
public class GatherStatsListenerTest {
GatherStatsListener gatherStatsListener;
@Mock IPentahoSession session;
@Mock IScheduler scheduler;
@Before
public void setUp() throws Exception {
gatherStatsListener = new GatherStatsListener();
gatherStatsListener.setIntervalInSeconds( 101 );
gatherStatsListener.setTransFileName( "MyTransform.ktr" );
}
@Test
public void testStartUp() throws Exception {
PentahoSystem.registerObject( scheduler );
Job job = mock( Job.class );
when( scheduler.createJob(
eq( "Gather Stats" ),
eq( GatherStatsAction.class ),
eq( gatherStatsListener.jobMap ),
any( JobTrigger.class ) ) ).thenReturn( job );
boolean startup = gatherStatsListener.startup( session );
assertTrue( startup );
assertEquals( 1, gatherStatsListener.jobMap.size() );
assertEquals( gatherStatsListener.getTransFileName(), gatherStatsListener.jobMap.get( "transFileName" ) );
assertEquals( 101, gatherStatsListener.getIntervalInSeconds() );
verify( scheduler ).createJob(
eq( "Gather Stats" ),
eq( GatherStatsAction.class ),
eq( gatherStatsListener.jobMap ),
any( JobTrigger.class ) );
}
@Test
public void testShutdown() throws Exception {
// for the code coverage game, this method does nothing
gatherStatsListener.shutdown();
}
@Test
public void testStartup_withExceptionFromScheduleJobCall() throws Exception {
PentahoSystem.registerObject( scheduler );
when( scheduler.createJob(
eq( "Gather Stats" ),
eq( GatherStatsAction.class ),
eq( gatherStatsListener.jobMap ),
any( JobTrigger.class ) ) ).thenThrow( new SchedulerException( "error" ) );
boolean startup = gatherStatsListener.startup( session );
assertTrue( startup );
assertEquals( 1, gatherStatsListener.jobMap.size() );
assertEquals( gatherStatsListener.getTransFileName(), gatherStatsListener.jobMap.get( "transFileName" ) );
assertEquals( 101, gatherStatsListener.getIntervalInSeconds() );
verify( scheduler ).createJob(
eq( "Gather Stats" ),
eq( GatherStatsAction.class ),
eq( gatherStatsListener.jobMap ),
any( JobTrigger.class ) );
}
@After
public void cleanup() {
PentahoSystem.clearObjectFactory();
}
}