package org.pentaho.di.shared;
/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2013 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.
*
******************************************************************************/
import junit.framework.TestCase;
import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.metastore.api.IMetaStoreElement;
import org.pentaho.metastore.api.IMetaStoreElementType;
import org.pentaho.metastore.util.PentahoDefaults;
import java.io.File;
import java.util.List;
public class TestSharedObjectsMetaStore extends TestCase {
private static String databaseMetaXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ "<connection>" + "<name>db</name>" + "<server>127.0.0.1</server>" + "<type>H2</type>"
+ "<access>Native</access>" + "<database>mem:db</database>" + "<port>${PORT_NUMBER_STRING}</port>"
+ "<username>sa</username>" + "<password></password>" + "</connection>";
private static String namespace = PentahoDefaults.NAMESPACE;
public void testSharedObjectsMetaStore() throws Exception {
KettleEnvironment.init();
File sharedObjectsFile = File.createTempFile( "shared-objects", ".xml" );
String sharedObjectsFilename = sharedObjectsFile.toString();
sharedObjectsFile.delete();
SharedObjects sharedObjects = new SharedObjects( sharedObjectsFilename );
SharedObjectsMetaStore metaStore = new SharedObjectsMetaStore( sharedObjects );
List<IMetaStoreElementType> elementTypes = metaStore.getElementTypes( namespace );
assertEquals( 1, elementTypes.size() );
IMetaStoreElementType databaseElementType =
metaStore.getElementType( namespace, PentahoDefaults.DATABASE_CONNECTION_ELEMENT_TYPE_NAME );
assertNotNull( databaseElementType );
List<IMetaStoreElement> elements = metaStore.getElements( namespace, databaseElementType );
assertEquals( 0, elements.size() );
DatabaseMeta databaseMeta = new DatabaseMeta( databaseMetaXml );
// add it to shared objects, see if we find the element (SharedObjects --> MetaStore)
//
sharedObjects.storeObject( databaseMeta );
elements = metaStore.getElements( namespace, databaseElementType );
assertEquals( 1, elements.size() );
IMetaStoreElement databaseElement = elements.get( 0 );
// Remove it again...
sharedObjects.removeObject( databaseMeta );
elements = metaStore.getElements( namespace, databaseElementType );
assertEquals( 0, elements.size() );
// Add it to the meta store, see if it shows in the shared objects (MetaStore --> SharedObjects)
//
metaStore.createElement( namespace, databaseElementType, databaseElement );
elements = metaStore.getElements( namespace, databaseElementType );
assertEquals( 1, elements.size() );
assertNotNull( sharedObjects.getSharedDatabase( databaseMeta.getName() ) );
}
}