/*
* *****************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2017 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.engine.configuration.impl.spark;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.pentaho.capabilities.api.ICapability;
import org.pentaho.capabilities.api.ICapabilityProvider;
import org.pentaho.capabilities.impl.DefaultCapabilityManager;
import org.pentaho.di.base.AbstractMeta;
import org.pentaho.di.core.variables.VariableSpace;
import org.pentaho.di.trans.TransExecutionConfiguration;
import java.util.Dictionary;
import static org.mockito.Mockito.*;
/**
* Created by bmorrise on 3/22/17.
*/
@RunWith( MockitoJUnitRunner.class )
public class SparkRunConfigurationExecutorTest {
private SparkRunConfigurationExecutor sparkRunConfigurationExecutor;
@Mock
private Dictionary<String, Object> properties;
@Mock
private AbstractMeta abstractMeta;
@Mock
private VariableSpace variableSpace;
private DefaultCapabilityManager capabilityManager;
private ICapabilityProvider capabilityProvider;
@Before
public void setup() throws Exception {
Configuration configuration = mock( Configuration.class );
ConfigurationAdmin configurationAdmin = mock( ConfigurationAdmin.class );
doReturn( configuration ).when( configurationAdmin ).getConfiguration( SparkRunConfigurationExecutor.CONFIG_KEY );
doReturn( properties ).when( configuration ).getProperties();
sparkRunConfigurationExecutor = new SparkRunConfigurationExecutor( configurationAdmin );
capabilityProvider = mock( ICapabilityProvider.class );
capabilityManager = DefaultCapabilityManager.getInstance();
capabilityManager.registerCapabilityProvider( capabilityProvider );
}
@Test
public void testExecute() {
SparkRunConfiguration sparkRunConfiguration = new SparkRunConfiguration();
sparkRunConfiguration.setName( "Spark Configuration" );
sparkRunConfiguration.setUrl( "127.0.0.2:8121" );
TransExecutionConfiguration transExecutionConfiguration = new TransExecutionConfiguration();
sparkRunConfigurationExecutor
.execute( sparkRunConfiguration, transExecutionConfiguration, abstractMeta, variableSpace );
verify( variableSpace ).setVariable( "engine", "remote" );
verify( variableSpace ).setVariable( "engine.remote", "spark" );
verify( properties ).put( "zookeeper.host", "127.0.0.2" );
verify( properties ).put( "zookeeper.port", "8121" );
}
@Test
public void testExecuteNoPort() {
SparkRunConfiguration sparkRunConfiguration = new SparkRunConfiguration();
sparkRunConfiguration.setName( "Spark Configuration" );
TransExecutionConfiguration transExecutionConfiguration = new TransExecutionConfiguration();
sparkRunConfigurationExecutor
.execute( sparkRunConfiguration, transExecutionConfiguration, abstractMeta, variableSpace );
verify( variableSpace ).setVariable( "engine", "remote" );
verify( variableSpace ).setVariable( "engine.remote", "spark" );
verify( properties ).put( "zookeeper.host", SparkRunConfigurationExecutor.DEFAULT_HOST );
verify( properties ).put( "zookeeper.port", SparkRunConfigurationExecutor.DEFAULT_PORT );
}
@Test
public void testExecuteWithAelSecurityInstalled() {
ICapability aelSecurityCapability = mock( ICapability.class );
setCapability( aelSecurityCapability, SparkRunConfigurationExecutor.AEL_SECURITY_CAPABILITY_ID, true );
ICapability jaasCapability = mock( ICapability.class );
setCapability( jaasCapability, SparkRunConfigurationExecutor.JAAS_CAPABILITY_ID, false );
SparkRunConfiguration sparkRunConfiguration = new SparkRunConfiguration();
sparkRunConfiguration.setName( "Spark Configuration" );
TransExecutionConfiguration transExecutionConfiguration = new TransExecutionConfiguration();
sparkRunConfigurationExecutor
.execute( sparkRunConfiguration, transExecutionConfiguration, abstractMeta, variableSpace );
verify( jaasCapability ).isInstalled();
verify( jaasCapability ).install();
}
@Test
public void testExecuteWithNoAelSecurityInstalled() {
ICapability aelSecurityCapability = mock( ICapability.class );
setCapability( aelSecurityCapability, SparkRunConfigurationExecutor.AEL_SECURITY_CAPABILITY_ID, false );
ICapability jaasCapability = mock( ICapability.class );
setCapability( jaasCapability, SparkRunConfigurationExecutor.JAAS_CAPABILITY_ID, false );
SparkRunConfiguration sparkRunConfiguration = new SparkRunConfiguration();
sparkRunConfiguration.setName( "Spark Configuration" );
TransExecutionConfiguration transExecutionConfiguration = new TransExecutionConfiguration();
sparkRunConfigurationExecutor
.execute( sparkRunConfiguration, transExecutionConfiguration, abstractMeta, variableSpace );
verify( jaasCapability, never() ).isInstalled();
}
private void setCapability( ICapability capability, String capabilityId, Object isInstalled ) {
doReturn( capability ).when( capabilityProvider ).getCapabilityById( capabilityId );
doReturn( isInstalled ).when( capability ).isInstalled();
}
}