/*! ****************************************************************************** * * 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.resource; import java.util.List; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.pentaho.di.core.KettleEnvironment; import org.pentaho.di.job.JobMeta; import org.pentaho.di.resource.ResourceEntry.ResourceType; import org.pentaho.di.trans.TransMeta; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; public class ResourceDependencyTest { /** * @param args */ public static void main( String[] args ) { ResourceDependencyTest test = new ResourceDependencyTest(); try { test.setUp(); test.testJobDependencyList(); test.testTransformationDependencyList(); } catch ( Exception ex ) { ex.printStackTrace(); } finally { try { test.tearDown(); } catch ( Exception ignored ) { // Ignored } } } @BeforeClass public static void setUpBeforeClass() throws Exception { KettleEnvironment.init(); } @Before public void setUp() { } @AfterClass public static void tearDownAfterClass() throws Exception { } @After public void tearDown() { } @Test public void testJobDependencyList() throws Exception { // Load the first job metadata JobMeta jobMeta = new JobMeta( "test/org/pentaho/di/resource/processchangelog.kjb", null, null ); List<ResourceReference> resourceReferences = jobMeta.getResourceDependencies(); assertEquals( 5, resourceReferences.size() ); for ( int i = 0; i < 5; i++ ) { ResourceReference genRef = resourceReferences.get( i ); ResourceHolderInterface refHolder = genRef.getReferenceHolder(); boolean checkDatabaseStuff = false; if ( i == 0 ) { assertEquals( "TABLE_EXISTS", refHolder.getTypeId() ); checkDatabaseStuff = true; } else if ( ( i == 1 ) || ( i == 4 ) ) { assertEquals( "SQL", refHolder.getTypeId() ); checkDatabaseStuff = true; } else if ( ( i == 2 ) || ( i == 3 ) ) { assertEquals( "TRANS", refHolder.getTypeId() ); checkDatabaseStuff = false; } if ( checkDatabaseStuff ) { assertEquals( 2, genRef.getEntries().size() ); for ( int j = 0; j < 2; j++ ) { ResourceEntry entry = genRef.getEntries().get( j ); if ( j == 0 ) { assertEquals( ResourceType.SERVER, entry.getResourcetype() ); assertEquals( "localhost", entry.getResource() ); } else { assertEquals( ResourceType.DATABASENAME, entry.getResourcetype() ); assertEquals( "test", entry.getResource() ); } } } else { // Check Transform Stuff assertEquals( 1, genRef.getEntries().size() ); // Only one entry per ref in this case. ResourceEntry entry = genRef.getEntries().get( 0 ); assertEquals( ResourceType.ACTIONFILE, entry.getResourcetype() ); assertTrue( entry.getResource().endsWith( ".ktr" ) ); } } } @Test public void testTransformationDependencyList() throws Exception { TransMeta transMeta = new TransMeta( "test/org/pentaho/di/resource/trans/General - Change log processing.ktr" ); List<ResourceReference> resourceReferences = transMeta.getResourceDependencies(); assertEquals( 2, resourceReferences.size() ); ResourceReference genRef = null; for ( ResourceReference look : resourceReferences ) { if ( look.getReferenceHolder().getTypeId().equals( "TextFileInput" ) ) { genRef = look; } } assertNotNull( genRef ); ResourceHolderInterface refHolder = genRef.getReferenceHolder(); assertEquals( "TextFileInput", refHolder.getTypeId() ); List<ResourceEntry> entries = genRef.getEntries(); assertEquals( 1, entries.size() ); ResourceEntry theEntry = entries.get( 0 ); assertEquals( ResourceType.FILE, theEntry.getResourcetype() ); assertTrue( theEntry.getResource().endsWith( "changelog.txt" ) ); } /** * Private method for displaying what's coming back from the dependency call. * * @param resourceReferences A list of resource reference to print out */ protected void printResourceReferences( List<ResourceReference> resourceReferences ) { for ( ResourceReference genRef : resourceReferences ) { ResourceHolderInterface refHolder = genRef.getReferenceHolder(); System.out.println( "Reference Holder Information" ); System.out.println( " Name: " + refHolder.getName() ); System.out.println( " Type Id: " + refHolder.getTypeId() ); System.out.println( " Resource Entries" ); List<ResourceEntry> entries = genRef.getEntries(); for ( ResourceEntry resEntry : entries ) { System.out.println( " Resource Entry" ); System.out.println( " Resource Type: " + resEntry.getResourcetype() ); System.out.println( " Resource: " + resEntry.getResource() ); } } } }