/*
* 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.core;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.guvnor.common.services.backend.util.CommentedOptionFactory;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.screens.datasource.management.backend.core.impl.DefaultDriverInitializerImpl;
import org.kie.workbench.common.screens.datasource.management.backend.service.DataSourceServicesHelper;
import org.kie.workbench.common.screens.datasource.management.backend.service.DefRegistry;
import org.kie.workbench.common.screens.datasource.management.model.DriverDef;
import org.kie.workbench.common.screens.datasource.management.util.DriverDefSerializer;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.backend.server.util.Paths;
import org.uberfire.backend.vfs.Path;
import org.uberfire.io.IOService;
import org.uberfire.java.nio.base.options.CommentedOption;
import static org.mockito.Mockito.*;
@RunWith( MockitoJUnitRunner.class )
public class DefaultDriverInitializerTest {
private static final String GLOBAL_URI = "default://master@datasources/";
@Mock
private IOService ioService;
@Mock
private DataSourceServicesHelper serviceHelper;
@Mock
private CommentedOptionFactory optionsFactory;
@Mock
private CommentedOption commentedOption;
private DefaultDriverInitializer driverInitializer;
@Mock
private DefRegistry defRegistry;
@Mock
private Path globalPath;
private org.uberfire.java.nio.file.Path globalNioPath;
private org.uberfire.java.nio.file.Path globalNioPaths[];
private List<DriverDef> expectedDrivers;
@Before
public void setup() {
when( globalPath.toURI() ).thenReturn( GLOBAL_URI );
globalNioPath = Paths.convert( globalPath );
when( serviceHelper.getGlobalDataSourcesContext() ).thenReturn( globalPath );
when( serviceHelper.getDefRegistry() ).thenReturn( defRegistry );
setUpSystemDrivers();
// create the expected drivers and the expected destination paths
expectedDrivers = createExpectedDrivers();
globalNioPaths = new org.uberfire.java.nio.file.Path[ expectedDrivers.size() ];
for ( int i = 0; i < globalNioPaths.length; i ++) {
globalNioPaths[ i ] = globalNioPath.resolve( expectedDrivers.get( i ).getName() + ".driver" );
}
when( optionsFactory.makeCommentedOption( "system generated driver" ) ).thenReturn( commentedOption );
driverInitializer = new DefaultDriverInitializerImpl(ioService, serviceHelper, optionsFactory );
}
@Test
public void testInitializeDefaultDrivers() {
driverInitializer.initializeDefaultDrivers();
// All driver definitions provided as System properties, and the ones provided in the configuration file should
// have written in the expected target paths.
String expectedSource;
for ( int i = 0; i < expectedDrivers.size(); i++ ) {
expectedSource = DriverDefSerializer.serialize( expectedDrivers.get( i ) );
verify( ioService, times( 1 ) ).write( globalNioPaths[ i ], expectedSource, commentedOption );
verify( defRegistry, times( 1 ) ).setEntry( Paths.convert( globalNioPaths[ i ] ), expectedDrivers.get( i ) );
}
}
private void setUpSystemDrivers() {
// emulates drivers definitions passed as System properties.
Properties properties = System.getProperties();
for ( int i = 0; i < 2; i++ ) {
properties.put( "driverDef.uuid." + i, "sys-uuid" + i );
properties.put( "driverDef.name." + i, "sys-name" + i );
properties.put( "driverDef.driverClass." + i, "sys-driverClass" + i );
properties.put( "driverDef.groupId." + i, "sys-groupId" + i );
properties.put( "driverDef.artifactId." + i, "sys-artifactId" + i );
properties.put( "driverDef.version." + i, "sys-version" + i );
}
}
private List<DriverDef> createExpectedDrivers() {
// create 2 expected drivers defined by System properties.
List<DriverDef> expectedDrivers = createDrivers( "sys-", 2 );
// and 2 more coming from the configuration file.
expectedDrivers.addAll( createDrivers( "", 2 ) );
return expectedDrivers;
}
private List<DriverDef> createDrivers( String prefix, int count ) {
List<DriverDef> driverDefs = new ArrayList<>( );
DriverDef driverDef;
for ( int i = 0; i < count; i++ ) {
driverDef = new DriverDef();
driverDef.setUuid( prefix + "uuid" + i );
driverDef.setName( prefix + "name" + i );
driverDef.setDriverClass( prefix + "driverClass" + i );
driverDef.setGroupId( prefix + "groupId" + i );
driverDef.setArtifactId( prefix + "artifactId" + i );
driverDef.setVersion( prefix + "version" + i );
driverDefs.add( driverDef );
}
return driverDefs;
}
}