/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* 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.kie.workbench.common.screens.datasource.management.backend.integration;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import org.dashbuilder.dataset.def.SQLDataSetDef;
import org.dashbuilder.dataset.def.SQLDataSourceDef;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.screens.datasource.management.backend.core.DataSourceRuntimeManager;
import org.kie.workbench.common.screens.datasource.management.backend.core.impl.AbstractDataSource;
import org.kie.workbench.common.screens.datasource.management.model.DataSourceDefInfo;
import org.kie.workbench.common.screens.datasource.management.model.DataSourceDeploymentInfo;
import org.kie.workbench.common.screens.datasource.management.service.DataSourceDefQueryService;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith( MockitoJUnitRunner.class )
public class KieSQLDataSourceLocatorTest {
private KieSQLDataSourceLocator dataSourceLocator;
@Mock
private DataSourceDefQueryService queryService;
@Mock
private DataSourceRuntimeManager runtimeManager;
private List< DataSourceDefInfo > dataSourceDefInfos = new ArrayList<>( );
@Mock
private SQLDataSetDef dataSetDef;
@Mock
private AbstractDataSource abstractDataSource;
@Mock
private DataSource dataSource;
@Before
public void setup( ) {
dataSourceLocator = new KieSQLDataSourceLocator( queryService, runtimeManager );
// initialize the list of existing data sources
dataSourceDefInfos.add( new DataSourceDefInfo( "uuid1", "DS1", new DataSourceDeploymentInfo( ) ) );
dataSourceDefInfos.add( new DataSourceDefInfo( "uuid2", "DS2", new DataSourceDeploymentInfo( ) ) );
dataSourceDefInfos.add( new DataSourceDefInfo( "uuid3", "DS3", new DataSourceDeploymentInfo( ) ) );
}
@Test
public void testLookup( ) throws Exception {
when( dataSetDef.getDataSource( ) ).thenReturn( "uuid" );
when( runtimeManager.lookupDataSource( "uuid" ) ).thenReturn( abstractDataSource );
when( abstractDataSource.getInternalDataSource( ) ).thenReturn( dataSource );
DataSource result = dataSourceLocator.lookup( dataSetDef );
// the lookup operation should have been invoked on the runtime manager.
verify( runtimeManager, times( 1 ) ).lookupDataSource( "uuid" );
assertEquals( dataSource, result );
}
@Test
public void testListDataSources( ) {
when( queryService.findGlobalDataSources( true ) ).thenReturn( dataSourceDefInfos );
List< SQLDataSourceDef > result = dataSourceLocator.list( );
// the query service should have been invoked
verify( queryService, times( 1 ) ).findGlobalDataSources( true );
// and all the definitions should have been returned as SQLDataSourceDefinitions
assertSameElements( dataSourceDefInfos, result );
}
private void assertSameElements( List< DataSourceDefInfo > currentDefs, List< SQLDataSourceDef > returnedDefs ) {
assertEquals( currentDefs.size( ), returnedDefs.size( ) );
for ( DataSourceDefInfo currentDef : currentDefs ) {
if ( !returnedDefs.stream( ).anyMatch( sqlDataSourceDef -> currentDef.getUuid( ).equals( sqlDataSourceDef.getName( ) ) &&
currentDef.getName( ).equals( sqlDataSourceDef.getDescription( ) ) ) ) {
fail( "Expected Data source: " + currentDef.getName( ) + " is not present in calculated result." );
}
}
}
}