/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2015 by Pentaho : http://www.pentaho.com * ******************************************************************************* * * 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.pentaho.di.ui.spoon; import org.junit.Before; import org.junit.Test; import org.pentaho.di.core.Const; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.core.logging.BaseLogTable; import org.pentaho.di.core.logging.ChannelLogTable; import org.pentaho.di.core.logging.JobEntryLogTable; import org.pentaho.di.core.logging.JobLogTable; import org.pentaho.di.core.logging.MetricsLogTable; import org.pentaho.di.core.logging.PerformanceLogTable; import org.pentaho.di.core.logging.StepLogTable; import org.pentaho.di.core.logging.TransLogTable; import org.pentaho.di.core.variables.VariableSpace; import org.pentaho.di.job.JobMeta; import org.pentaho.di.trans.HasDatabasesInterface; import org.pentaho.di.trans.TransMeta; import static junit.framework.Assert.assertEquals; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class SpoonExportXmlTest { private VariableSpace mockedVariableSpace; private HasDatabasesInterface mockedHasDbInterface; private static String PARAM_START_SYMBOL = "${"; private static String PARAM_END_SYMBOL = "}"; private static String GLOBAL_PARAM = PARAM_START_SYMBOL + Const.KETTLE_STEP_LOG_SCHEMA + PARAM_END_SYMBOL; private static String USER_PARAM = PARAM_START_SYMBOL + "param-content" + PARAM_END_SYMBOL; private static String HARDCODED_VALUE = "hardcoded"; private final Spoon spoon = mock( Spoon.class ); @Before public void setUp() throws KettleException { System.setProperty( Const.KETTLE_STEP_LOG_SCHEMA, "KETTLE_STEP_LOG_DB_VALUE" ); mockedVariableSpace = mock( VariableSpace.class ); mockedHasDbInterface = mock( HasDatabasesInterface.class ); } @Test public void savingTransToXmlNotChangesLogTables() { TransMeta transMeta = new TransMeta(); initTables( transMeta ); TransLogTable originTransLogTable = transMeta.getTransLogTable(); StepLogTable originStepLogTable = transMeta.getStepLogTable(); PerformanceLogTable originPerformanceLogTable = transMeta.getPerformanceLogTable(); ChannelLogTable originChannelLogTable = transMeta.getChannelLogTable(); MetricsLogTable originMetricsLogTable = transMeta.getMetricsLogTable(); when( spoon.getActiveTransformation() ).thenReturn( transMeta ); when( spoon.saveXMLFile( any( TransMeta.class ), anyBoolean() ) ).thenReturn( true ); when( spoon.saveXMLFile( anyBoolean() ) ).thenCallRealMethod(); spoon.saveXMLFile( true ); tablesCommonValuesEqual( originTransLogTable, transMeta.getTransLogTable() ); assertEquals( originTransLogTable.getLogInterval(), transMeta.getTransLogTable().getLogInterval() ); assertEquals( originTransLogTable.getLogSizeLimit(), transMeta.getTransLogTable().getLogSizeLimit() ); tablesCommonValuesEqual( originStepLogTable, transMeta.getStepLogTable() ); tablesCommonValuesEqual( originPerformanceLogTable, transMeta.getPerformanceLogTable() ); assertEquals( originPerformanceLogTable.getLogInterval(), transMeta.getPerformanceLogTable().getLogInterval() ); tablesCommonValuesEqual( originChannelLogTable, transMeta.getChannelLogTable() ); tablesCommonValuesEqual( originMetricsLogTable, transMeta.getMetricsLogTable() ); } @Test public void savingJobToXmlNotChangesLogTables() { JobMeta jobMeta = new JobMeta(); initTables( jobMeta ); JobLogTable originJobLogTable = jobMeta.getJobLogTable(); JobEntryLogTable originJobEntryLogTable = jobMeta.getJobEntryLogTable(); ChannelLogTable originChannelLogTable = jobMeta.getChannelLogTable(); when( spoon.getActiveTransformation() ).thenReturn( null ); when( spoon.getActiveJob() ).thenReturn( jobMeta ); when( spoon.saveXMLFile( any( JobMeta.class ), anyBoolean() ) ).thenReturn( true ); when( spoon.saveXMLFile( anyBoolean() ) ).thenCallRealMethod(); spoon.saveXMLFile( true ); tablesCommonValuesEqual( originJobLogTable, jobMeta.getJobLogTable() ); assertEquals( originJobLogTable.getLogInterval(), jobMeta.getJobLogTable().getLogInterval() ); assertEquals( originJobLogTable.getLogSizeLimit(), jobMeta.getJobLogTable().getLogSizeLimit() ); tablesCommonValuesEqual( originJobEntryLogTable, jobMeta.getJobEntryLogTable() ); tablesCommonValuesEqual( originChannelLogTable, jobMeta.getChannelLogTable() ); } public void tablesCommonValuesEqual( BaseLogTable table1, BaseLogTable table2 ) { assertEquals( table1.getConnectionName(), table2.getConnectionName() ); assertEquals( table1.getSchemaName(), table2.getSchemaName() ); assertEquals( table1.getTableName(), table2.getTableName() ); assertEquals( table1.getTimeoutInDays(), table2.getTimeoutInDays() ); } private void initTables( TransMeta transMeta ) { TransLogTable transLogTable = TransLogTable.getDefault( mockedVariableSpace, mockedHasDbInterface, null ); initTableWithSampleParams( transLogTable ); transLogTable.setLogInterval( GLOBAL_PARAM ); transLogTable.setLogSizeLimit( GLOBAL_PARAM ); transMeta.setTransLogTable( transLogTable ); StepLogTable stepLogTable = StepLogTable.getDefault( mockedVariableSpace, mockedHasDbInterface ); initTableWithSampleParams( stepLogTable ); transMeta.setStepLogTable( stepLogTable ); PerformanceLogTable performanceLogTable = PerformanceLogTable.getDefault( mockedVariableSpace, mockedHasDbInterface ); initTableWithSampleParams( performanceLogTable ); performanceLogTable.setLogInterval( GLOBAL_PARAM ); transMeta.setPerformanceLogTable( performanceLogTable ); ChannelLogTable channelLogTable = ChannelLogTable.getDefault( mockedVariableSpace, mockedHasDbInterface ); initTableWithSampleParams( channelLogTable ); transMeta.setChannelLogTable( channelLogTable ); MetricsLogTable metricsLogTable = MetricsLogTable.getDefault( mockedVariableSpace, mockedHasDbInterface ); initTableWithSampleParams( metricsLogTable ); transMeta.setMetricsLogTable( metricsLogTable ); } private void initTables( JobMeta jobMeta ) { JobLogTable jobLogTable = JobLogTable.getDefault( mockedVariableSpace, mockedHasDbInterface ); initTableWithSampleParams( jobLogTable ); jobLogTable.setLogInterval( GLOBAL_PARAM ); jobLogTable.setLogSizeLimit( GLOBAL_PARAM ); jobMeta.setJobLogTable( jobLogTable ); JobEntryLogTable jobEntryLogTable = JobEntryLogTable.getDefault( mockedVariableSpace, mockedHasDbInterface ); initTableWithSampleParams( jobEntryLogTable ); jobMeta.setJobEntryLogTable( jobEntryLogTable ); ChannelLogTable channelLogTable = ChannelLogTable.getDefault( mockedVariableSpace, mockedHasDbInterface ); initTableWithSampleParams( channelLogTable ); jobMeta.setChannelLogTable( channelLogTable ); jobMeta.setExtraLogTables( null ); } private void initTableWithSampleParams( BaseLogTable table ) { table.setTableName( GLOBAL_PARAM ); table.setSchemaName( HARDCODED_VALUE ); table.setConnectionName( HARDCODED_VALUE ); table.setTimeoutInDays( USER_PARAM ); } }