public Optional<Result> execute( List<RowMetaAndData> rows ) throws KettleException { if ( rows.isEmpty() || stopped ) { return Optional.empty(); } Trans subtrans = this.createSubtrans(); running.add( subtrans ); parentTrans.addActiveSubTransformation( subTransName, subtrans ); // Pass parameter values passParametersToTrans( subtrans, rows.get( 0 ) ); Result result = new Result(); result.setRows( rows ); subtrans.setPreviousResult( result ); subtrans.prepareExecution( this.parentTrans.getArguments() ); List<RowMetaAndData> rowMetaAndData = new ArrayList<>(); subtrans.getSteps().stream() .filter( c -> c.step.getStepname().equalsIgnoreCase( subStep ) ) .findFirst() .ifPresent( c -> c.step.addRowListener( new RowAdapter() { @Override public void rowWrittenEvent( RowMetaInterface rowMeta, Object[] row ) { rowMetaAndData.add( new RowMetaAndData( rowMeta, row ) ); } } ) ); subtrans.startThreads(); subtrans.waitUntilFinished(); updateStatuses( subtrans ); running.remove( subtrans ); Result subtransResult = subtrans.getResult(); subtransResult.setRows( rowMetaAndData ); return Optional.of( subtransResult ); }
private void createSubTransformations( Trans trans ) { for ( int i = 0; i < INITIAL_NUMBER_OF_TRANS; i++ ) { trans.addActiveSubTransformation( createTransName( i ), new Trans() ); } }
@Override Object doCall() throws Exception { for ( int i = 0; i < NUMBER_OF_CREATE_CYCLES; i++ ) { synchronized ( lock ) { String transName = createTransName( randomInt( INITIAL_NUMBER_OF_TRANS, Integer.MAX_VALUE ) ); trans.addActiveSubTransformation( transName, new Trans() ); } } return null; }
@Test public void testStepShouldProcessError_WhenMappingTransHasError() throws KettleException { // Set Up TransMock to return the error int errorCount = 1; when( stepMockHelper.trans.getErrors() ).thenReturn( errorCount ); // The step has been already finished when( stepMockHelper.trans.isFinished() ).thenReturn( Boolean.TRUE ); // The step was started simpleMpData.wasStarted = true; smp = new SimpleMapping( stepMockHelper.stepMeta, stepMockHelper.stepDataInterface, 0, stepMockHelper.transMeta, stepMockHelper.trans ); smp.init( stepMockHelper.initStepMetaInterface, simpleMpData ); smp.dispose( stepMockHelper.processRowsStepMetaInterface, simpleMpData ); verify( stepMockHelper.trans, times( 1 ) ).isFinished(); verify( stepMockHelper.trans, never() ).waitUntilFinished(); verify( stepMockHelper.trans, never() ).addActiveSubTransformation( anyString(), any( Trans.class ) ); verify( stepMockHelper.trans, times( 1 ) ).removeActiveSubTransformation( anyString() ); verify( stepMockHelper.trans, never() ).getActiveSubTransformation( anyString() ); verify( stepMockHelper.trans, times( 1 ) ).getErrors(); assertTrue( "The step contains the errors", smp.getErrors() == errorCount ); }
verify( parentTrans, atLeastOnce() ).addActiveSubTransformation( eq( "subtransname" ), any( Trans.class ) );
getTrans().addActiveSubTransformation( getStepname(), injectTrans );
getTrans().addActiveSubTransformation( getStepname(), executorTrans );
getTrans().addActiveSubTransformation( getStepname(), simpleMappingData.mappingTrans );
getTrans().addActiveSubTransformation( getStepname(), singleThreaderData.mappingTrans );
getTrans().addActiveSubTransformation( getStepname(), getData().getMappingTrans() );