/*! * Copyright 2010 - 2016 Pentaho Corporation. All rights reserved. * * 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.repository.pur; import org.junit.Test; import org.pentaho.di.cluster.ClusterSchema; import org.pentaho.di.cluster.SlaveServer; import org.pentaho.di.core.database.DatabaseMeta; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.partition.PartitionSchema; import org.pentaho.di.repository.RepositoryElementInterface; import org.pentaho.di.repository.RepositoryObjectType; import org.pentaho.di.shared.SharedObjectInterface; import java.util.Collections; import java.util.EnumMap; import java.util.List; import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; /** * @author Andrey Khayrutdinov */ public class PurRepository_SharedObjects_IT extends PurRepositoryTestBase { public PurRepository_SharedObjects_IT( Boolean lazyRepo ) { super( lazyRepo ); } @Test public void loadClusters() throws Exception { testLoadSharedObjects( cluster() ); } @Test public void loadDatabases() throws Exception { testLoadSharedObjects( database() ); } @Test public void loadSlaves() throws Exception { testLoadSharedObjects( slaveServer() ); } @Test public void loadPartitions() throws Exception { testLoadSharedObjects( partition() ); } private void testLoadSharedObjects( RepositoryElementInterface sharedObject ) throws Exception { purRepository.save( sharedObject, null, null ); Map<RepositoryObjectType, List<? extends SharedObjectInterface>> map = map(); purRepository.readSharedObjects( map, sharedObject.getRepositoryElementType() ); List<? extends SharedObjectInterface> objects = map.get( sharedObject.getRepositoryElementType() ); assertNotNull( objects ); assertEquals( 1, objects.size() ); SharedObjectInterface object = objects.get( 0 ); assertEquals( sharedObject, object ); } @Test public void clusterIsRemovedFromCacheOnDelete() throws Exception { testElementIsRemovedFromCacheOnDelete( cluster(), new Remover() { @Override public void deleteFromRepository( RepositoryElementInterface element ) throws KettleException { purRepository.deleteClusterSchema( element.getObjectId() ); } } ); } @Test public void databaseIsRemovedFromCacheOnDelete() throws Exception { testElementIsRemovedFromCacheOnDelete( database(), new Remover() { @Override public void deleteFromRepository( RepositoryElementInterface element ) throws KettleException { purRepository.deleteDatabaseMeta( element.getName() ); } } ); } @Test public void slaveIsRemovedFromCacheOnDelete() throws Exception { testElementIsRemovedFromCacheOnDelete( slaveServer(), new Remover() { @Override public void deleteFromRepository( RepositoryElementInterface element ) throws KettleException { purRepository.deleteSlave( element.getObjectId() ); } } ); } @Test public void partitionIsRemovedFromCacheOnDelete() throws Exception { testElementIsRemovedFromCacheOnDelete( partition(), new Remover() { @Override public void deleteFromRepository( RepositoryElementInterface element ) throws KettleException { purRepository.deletePartitionSchema( element.getObjectId() ); } } ); } private void testElementIsRemovedFromCacheOnDelete( RepositoryElementInterface element, Remover remover ) throws Exception { purRepository.save( element, null, null ); assertNotNull( element.getObjectId() ); List<? extends SharedObjectInterface> before = purRepository.loadAndCacheSharedObjects().get( element.getRepositoryElementType() ); assertEquals( 1, before.size() ); remover.deleteFromRepository( element ); List<? extends SharedObjectInterface> after = purRepository.loadAndCacheSharedObjects().get( element.getRepositoryElementType() ); assertTrue( after.isEmpty() ); } @Test public void loadAllShared() throws Exception { ClusterSchema cluster = cluster(); DatabaseMeta database = database(); SlaveServer slaveServer = slaveServer(); PartitionSchema partition = partition(); purRepository.save( cluster, null, null ); purRepository.save( database, null, null ); purRepository.save( slaveServer, null, null ); purRepository.save( partition, null, null ); Map<RepositoryObjectType, List<? extends SharedObjectInterface>> map = map(); purRepository.readSharedObjects( map, RepositoryObjectType.CLUSTER_SCHEMA, RepositoryObjectType.DATABASE, RepositoryObjectType.SLAVE_SERVER, RepositoryObjectType.PARTITION_SCHEMA ); RepositoryElementInterface[] saved = new RepositoryElementInterface[] { cluster, database, slaveServer, partition }; assertEquals( saved.length, map.size() ); for ( RepositoryElementInterface sharedObject : saved ) { List<? extends SharedObjectInterface> list = map.get( sharedObject.getRepositoryElementType() ); assertEquals( 1, list.size() ); assertEquals( sharedObject, list.get( 0 ) ); } } private static ClusterSchema cluster() { return new ClusterSchema( "testCluster", Collections.<SlaveServer>emptyList() ); } private static DatabaseMeta database() { DatabaseMeta db = new DatabaseMeta(); db.setName( "testDatabase" ); return db; } private static SlaveServer slaveServer() { SlaveServer server = new SlaveServer(); server.setName( "testSlaveServer" ); return server; } private static PartitionSchema partition() { PartitionSchema schema = new PartitionSchema(); schema.setName( "testPartitionSchema" ); return schema; } private static Map<RepositoryObjectType, List<? extends SharedObjectInterface>> map() { return new EnumMap<RepositoryObjectType, List<? extends SharedObjectInterface>>( RepositoryObjectType.class ); } private interface Remover { void deleteFromRepository( RepositoryElementInterface element ) throws KettleException; } }