/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.flink.api.java; import org.apache.flink.api.common.JobExecutionResult; import org.apache.flink.api.common.JobID; import org.apache.flink.api.common.Plan; import org.apache.flink.api.common.PlanExecutor; import org.apache.flink.api.java.io.DiscardingOutputFormat; import org.apache.flink.api.scala.FlinkILoop; import org.apache.flink.configuration.Configuration; import org.apache.flink.streaming.api.environment.RemoteStreamEnvironment; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.util.TestLogger; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.BDDMockito; import org.mockito.Matchers; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import scala.Option; import scala.tools.nsc.Settings; import scala.tools.nsc.settings.MutableSettings; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @RunWith(PowerMockRunner.class) @PrepareForTest(PlanExecutor.class) public class FlinkILoopTest extends TestLogger { @Test public void testConfigurationForwarding() throws Exception { Configuration configuration = new Configuration(); configuration.setString("foobar", "foobar"); FlinkILoop flinkILoop = new FlinkILoop("localhost", 6123, configuration, Option.<String[]>empty()); final TestPlanExecutor testPlanExecutor = new TestPlanExecutor(); PowerMockito.mockStatic(PlanExecutor.class); BDDMockito.given(PlanExecutor.createRemoteExecutor( Matchers.anyString(), Matchers.anyInt(), Matchers.any(Configuration.class), Matchers.any(java.util.List.class), Matchers.any(java.util.List.class) )).willAnswer(new Answer<PlanExecutor>() { @Override public PlanExecutor answer(InvocationOnMock invocation) throws Throwable { testPlanExecutor.setHost((String)invocation.getArguments()[0]); testPlanExecutor.setPort((Integer)invocation.getArguments()[1]); testPlanExecutor.setConfiguration((Configuration)invocation.getArguments()[2]); testPlanExecutor.setJars((List<String>)invocation.getArguments()[3]); testPlanExecutor.setGlobalClasspaths((List<String>)invocation.getArguments()[4]); return testPlanExecutor; } }); Settings settings = new Settings(); ((MutableSettings.BooleanSetting)settings.usejavacp()).value_$eq(true); flinkILoop.settings_$eq(settings); flinkILoop.createInterpreter(); ExecutionEnvironment env = flinkILoop.scalaBenv().getJavaEnv(); env.fromElements(1).output(new DiscardingOutputFormat<Integer>()); env.execute("Test job"); Configuration forwardedConfiguration = testPlanExecutor.getConfiguration(); assertEquals(configuration, forwardedConfiguration); } @Test public void testConfigurationForwardingStreamEnvironment() { Configuration configuration = new Configuration(); configuration.setString("foobar", "foobar"); FlinkILoop flinkILoop = new FlinkILoop("localhost", 6123, configuration, Option.<String[]>empty()); StreamExecutionEnvironment streamEnv = flinkILoop.scalaSenv().getJavaEnv(); assertTrue(streamEnv instanceof RemoteStreamEnvironment); RemoteStreamEnvironment remoteStreamEnv = (RemoteStreamEnvironment) streamEnv; Configuration forwardedConfiguration = remoteStreamEnv.getClientConfiguration(); assertEquals(configuration, forwardedConfiguration); } static class TestPlanExecutor extends PlanExecutor { private String host; private int port; private Configuration configuration; private List<String> jars; private List<String> globalClasspaths; @Override public void start() throws Exception { } @Override public void stop() throws Exception { } @Override public boolean isRunning() { return false; } @Override public JobExecutionResult executePlan(Plan plan) throws Exception { return null; } @Override public String getOptimizerPlanAsJSON(Plan plan) throws Exception { return null; } @Override public void endSession(JobID jobID) throws Exception { } public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public Configuration getConfiguration() { return configuration; } public void setConfiguration(Configuration configuration) { this.configuration = configuration; } public List<String> getJars() { return jars; } public void setJars(List<String> jars) { this.jars = jars; } public List<String> getGlobalClasspaths() { return globalClasspaths; } public void setGlobalClasspaths(List<String> globalClasspaths) { this.globalClasspaths = globalClasspaths; } } }