/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2002-2016 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.platform.plugin.services.exporter;
import org.junit.Before;
import org.junit.Test;
import org.pentaho.platform.api.scheduler2.ComplexJobTrigger;
import org.pentaho.platform.api.scheduler2.CronJobTrigger;
import org.pentaho.platform.api.scheduler2.IBlockoutManager;
import org.pentaho.platform.api.scheduler2.Job;
import org.pentaho.platform.api.scheduler2.JobTrigger;
import org.pentaho.platform.api.scheduler2.SimpleJobTrigger;
import org.pentaho.platform.scheduler2.quartz.QuartzScheduler;
import org.pentaho.platform.web.http.api.resources.JobScheduleParam;
import org.pentaho.platform.web.http.api.resources.JobScheduleRequest;
import org.pentaho.platform.web.http.api.resources.RepositoryFileStreamProvider;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class ScheduleExportUtilTest {
@Before
public void setUp() throws Exception {
}
@Test( expected = IllegalArgumentException.class )
public void testCreateJobScheduleRequest_null() throws Exception {
ScheduleExportUtil.createJobScheduleRequest( null );
}
@Test( expected = IllegalArgumentException.class )
public void testCreateJobScheduleRequest_unknownTrigger() throws Exception {
String jobName = "JOB";
Job job = mock( Job.class );
JobTrigger trigger = mock( JobTrigger.class );
when( job.getJobTrigger() ).thenReturn( trigger );
JobScheduleRequest jobScheduleRequest = ScheduleExportUtil.createJobScheduleRequest( job );
}
@Test
public void testCreateJobScheduleRequest_SimpleJobTrigger() throws Exception {
String jobName = "JOB";
Job job = mock( Job.class );
SimpleJobTrigger trigger = mock( SimpleJobTrigger.class );
when( job.getJobTrigger() ).thenReturn( trigger );
when( job.getJobName() ).thenReturn( jobName );
JobScheduleRequest jobScheduleRequest = ScheduleExportUtil.createJobScheduleRequest( job );
assertNotNull( jobScheduleRequest );
assertEquals( jobName, jobScheduleRequest.getJobName() );
assertEquals( trigger, jobScheduleRequest.getSimpleJobTrigger() );
}
@Test
public void testCreateJobScheduleRequest_NoStreamProvider() throws Exception {
String jobName = "JOB";
Job job = mock( Job.class );
SimpleJobTrigger trigger = mock( SimpleJobTrigger.class );
when( job.getJobTrigger() ).thenReturn( trigger );
when( job.getJobName() ).thenReturn( jobName );
Map<String, Serializable> params = new HashMap<>();
params.put( "directory", "/home/admin" );
params.put( "transformation", "myTransform" );
HashMap<String, String> pdiParams = new HashMap<>();
pdiParams.put( "pdiParam", "pdiParamValue" );
params.put( ScheduleExportUtil.RUN_PARAMETERS_KEY, pdiParams );
when( job.getJobParams() ).thenReturn( params );
JobScheduleRequest jobScheduleRequest = ScheduleExportUtil.createJobScheduleRequest( job );
assertNotNull( jobScheduleRequest );
assertEquals( jobName, jobScheduleRequest.getJobName() );
assertEquals( trigger, jobScheduleRequest.getSimpleJobTrigger() );
assertEquals( "/home/admin/myTransform.ktr", jobScheduleRequest.getInputFile() );
assertEquals( "/home/admin/myTransform*", jobScheduleRequest.getOutputFile() );
assertEquals( "pdiParamValue", jobScheduleRequest.getPdiParameters().get( "pdiParam" ) );
}
@Test
public void testCreateJobScheduleRequest_StringStreamProvider() throws Exception {
String jobName = "JOB";
Job job = mock( Job.class );
SimpleJobTrigger trigger = mock( SimpleJobTrigger.class );
when( job.getJobTrigger() ).thenReturn( trigger );
when( job.getJobName() ).thenReturn( jobName );
Map<String, Serializable> params = new HashMap<>();
params.put( QuartzScheduler.RESERVEDMAPKEY_STREAMPROVIDER, "import file = /home/admin/myJob.kjb:output file=/home/admin/myJob*" );
when( job.getJobParams() ).thenReturn( params );
JobScheduleRequest jobScheduleRequest = ScheduleExportUtil.createJobScheduleRequest( job );
assertNotNull( jobScheduleRequest );
assertEquals( jobName, jobScheduleRequest.getJobName() );
assertEquals( trigger, jobScheduleRequest.getSimpleJobTrigger() );
assertEquals( "/home/admin/myJob.kjb", jobScheduleRequest.getInputFile() );
assertEquals( "/home/admin/myJob*", jobScheduleRequest.getOutputFile() );
}
@Test
public void testCreateJobScheduleRequest_ComplexJobTrigger() throws Exception {
String jobName = "JOB";
Date now = new Date();
Job job = mock( Job.class );
ComplexJobTrigger trigger = mock( ComplexJobTrigger.class );
when( job.getJobTrigger() ).thenReturn( trigger );
when( job.getJobName() ).thenReturn( jobName );
when( trigger.getCronString() ).thenReturn( "0 30 13 ? * 2,3,4,5,6 *" );
when( trigger.getDuration() ).thenReturn( -1L );
when( trigger.getStartTime() ).thenReturn( now );
when( trigger.getEndTime() ).thenReturn( now );
when( trigger.getUiPassParam() ).thenReturn( "uiPassParm" );
JobScheduleRequest jobScheduleRequest = ScheduleExportUtil.createJobScheduleRequest( job );
assertNotNull( jobScheduleRequest );
assertEquals( jobName, jobScheduleRequest.getJobName() );
// we should be getting back a cron trigger, not a complex trigger.
assertNull( jobScheduleRequest.getSimpleJobTrigger() );
assertNull( jobScheduleRequest.getComplexJobTrigger() );
assertNotNull( jobScheduleRequest.getCronJobTrigger() );
assertEquals( trigger.getCronString(), jobScheduleRequest.getCronJobTrigger().getCronString() );
assertEquals( trigger.getDuration(), jobScheduleRequest.getCronJobTrigger().getDuration() );
assertEquals( trigger.getEndTime(), jobScheduleRequest.getCronJobTrigger().getEndTime() );
assertEquals( trigger.getStartTime(), jobScheduleRequest.getCronJobTrigger().getStartTime() );
assertEquals( trigger.getUiPassParam(), jobScheduleRequest.getCronJobTrigger().getUiPassParam() );
}
@Test
public void testCreateJobScheduleRequest_CronJobTrigger() throws Exception {
String jobName = "JOB";
Job job = mock( Job.class );
CronJobTrigger trigger = mock( CronJobTrigger.class );
when( job.getJobTrigger() ).thenReturn( trigger );
when( job.getJobName() ).thenReturn( jobName );
JobScheduleRequest jobScheduleRequest = ScheduleExportUtil.createJobScheduleRequest( job );
assertNotNull( jobScheduleRequest );
assertEquals( jobName, jobScheduleRequest.getJobName() );
assertEquals( trigger, jobScheduleRequest.getCronJobTrigger() );
}
@Test
public void testCreateJobScheduleRequest_StreamProviderJobParam() throws Exception {
String jobName = "JOB";
String inputPath = "/input/path/to/file.ext";
String outputPath = "/output/path/location.*";
Map<String, Serializable> params = new HashMap<>();
RepositoryFileStreamProvider streamProvider = mock( RepositoryFileStreamProvider.class );
params.put( QuartzScheduler.RESERVEDMAPKEY_STREAMPROVIDER, streamProvider );
Job job = mock( Job.class );
CronJobTrigger trigger = mock( CronJobTrigger.class );
when( job.getJobTrigger() ).thenReturn( trigger );
when( job.getJobName() ).thenReturn( jobName );
when( job.getJobParams() ).thenReturn( params );
when( streamProvider.getInputFilePath() ).thenReturn( inputPath );
when( streamProvider.getOutputFilePath() ).thenReturn( outputPath );
JobScheduleRequest jobScheduleRequest = ScheduleExportUtil.createJobScheduleRequest( job );
assertEquals( inputPath, jobScheduleRequest.getInputFile() );
assertEquals( outputPath, jobScheduleRequest.getOutputFile() );
assertEquals( 0, jobScheduleRequest.getJobParameters().size() );
}
@Test
public void testCreateJobScheduleRequest_ActionClassJobParam() throws Exception {
String jobName = "JOB";
String actionClass = "com.pentaho.Action";
Map<String, Serializable> params = new HashMap<>();
params.put( QuartzScheduler.RESERVEDMAPKEY_ACTIONCLASS, actionClass );
Job job = mock( Job.class );
CronJobTrigger trigger = mock( CronJobTrigger.class );
when( job.getJobTrigger() ).thenReturn( trigger );
when( job.getJobName() ).thenReturn( jobName );
when( job.getJobParams() ).thenReturn( params );
JobScheduleRequest jobScheduleRequest = ScheduleExportUtil.createJobScheduleRequest( job );
assertEquals( actionClass, jobScheduleRequest.getActionClass() );
assertEquals( actionClass, jobScheduleRequest.getJobParameters().get( 0 ).getValue() );
}
@Test
public void testCreateJobScheduleRequest_TimeZoneJobParam() throws Exception {
String jobName = "JOB";
String timeZone = "America/New_York";
Map<String, Serializable> params = new HashMap<>();
params.put( IBlockoutManager.TIME_ZONE_PARAM, timeZone );
Job job = mock( Job.class );
CronJobTrigger trigger = mock( CronJobTrigger.class );
when( job.getJobTrigger() ).thenReturn( trigger );
when( job.getJobName() ).thenReturn( jobName );
when( job.getJobParams() ).thenReturn( params );
JobScheduleRequest jobScheduleRequest = ScheduleExportUtil.createJobScheduleRequest( job );
assertEquals( timeZone, jobScheduleRequest.getTimeZone() );
assertEquals( timeZone, jobScheduleRequest.getJobParameters().get( 0 ).getValue() );
}
@Test
public void testCreateJobScheduleRequest_MultipleTypesJobParam() throws Exception {
String jobName = "JOB";
Long l = Long.MAX_VALUE;
Date d = new Date();
Boolean b = true;
Map<String, Serializable> params = new HashMap<>();
params.put( "NumberValue", l );
params.put( "DateValue", d );
params.put( "BooleanValue", b );
Job job = mock( Job.class );
CronJobTrigger trigger = mock( CronJobTrigger.class );
when( job.getJobTrigger() ).thenReturn( trigger );
when( job.getJobName() ).thenReturn( jobName );
when( job.getJobParams() ).thenReturn( params );
JobScheduleRequest jobScheduleRequest = ScheduleExportUtil.createJobScheduleRequest( job );
for ( JobScheduleParam jobScheduleParam : jobScheduleRequest.getJobParameters() ) {
assertTrue( jobScheduleParam.getValue().equals( l )
|| jobScheduleParam.getValue().equals( d )
|| jobScheduleParam.getValue().equals( b ) );
}
}
@Test
public void testConstructor() throws Exception {
// only needed to get 100% code coverage
assertNotNull( new ScheduleExportUtil() );
}
}