/* * Copyright © 2016 Cask Data, Inc. * * 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 co.cask.cdap.etl.proto.v0; import co.cask.cdap.api.Resources; import co.cask.cdap.api.artifact.ArtifactScope; import co.cask.cdap.etl.proto.ArtifactSelectorConfig; import co.cask.cdap.etl.proto.Connection; import co.cask.cdap.etl.proto.UpgradeContext; import co.cask.cdap.etl.proto.v1.Plugin; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import org.junit.Assert; import org.junit.Test; import java.util.ArrayList; import java.util.List; import javax.annotation.Nullable; /** */ public class ETLBatchConfigTest { @Test public void testUpgrade() throws Exception { final ArtifactSelectorConfig artifact = new ArtifactSelectorConfig("SYSTEM", "universal", "1.0.0"); ETLStage source = new ETLStage("DataGenerator", ImmutableMap.of("p1", "v1"), null); co.cask.cdap.etl.proto.v1.ETLStage sourceNew = new co.cask.cdap.etl.proto.v1.ETLStage("DataGenerator.1", new Plugin(source.getName(), source.getProperties(), artifact), source.getErrorDatasetName()); ETLStage transform1 = new ETLStage("Script", ImmutableMap.of("script", "something"), null); co.cask.cdap.etl.proto.v1.ETLStage transform1New = new co.cask.cdap.etl.proto.v1.ETLStage("Script.2", new Plugin(transform1.getName(), transform1.getProperties(), artifact), transform1.getErrorDatasetName()); ETLStage transform2 = new ETLStage("Script", null, null); co.cask.cdap.etl.proto.v1.ETLStage transform2New = new co.cask.cdap.etl.proto.v1.ETLStage("Script.3", new Plugin(transform2.getName(), transform2.getProperties(), artifact), transform2.getErrorDatasetName()); ETLStage transform3 = new ETLStage("Validator", ImmutableMap.of("p1", "v1", "p2", "v2"), "errorDS"); co.cask.cdap.etl.proto.v1.ETLStage transform3New = new co.cask.cdap.etl.proto.v1.ETLStage("Validator.4", new Plugin(transform3.getName(), transform3.getProperties(), artifact), transform3.getErrorDatasetName()); ETLStage sink1 = new ETLStage("Table", ImmutableMap.of("rowkey", "xyz"), null); co.cask.cdap.etl.proto.v1.ETLStage sink1New = new co.cask.cdap.etl.proto.v1.ETLStage("Table.5", new Plugin(sink1.getName(), sink1.getProperties(), artifact), sink1.getErrorDatasetName()); ETLStage sink2 = new ETLStage("HDFS", ImmutableMap.of("name", "abc"), null); co.cask.cdap.etl.proto.v1.ETLStage sink2New = new co.cask.cdap.etl.proto.v1.ETLStage("HDFS.6", new Plugin(sink2.getName(), sink2.getProperties(), artifact), sink2.getErrorDatasetName()); ETLStage action = new ETLStage("Email", ImmutableMap.of("email", "slj@example.com"), null); co.cask.cdap.etl.proto.v1.ETLStage actionNew = new co.cask.cdap.etl.proto.v1.ETLStage("Email.1", new Plugin(action.getName(), action.getProperties(), artifact), action.getErrorDatasetName()); List<Connection> connections = new ArrayList<>(); connections.add(new Connection(sourceNew.getName(), transform1New.getName())); connections.add(new Connection(transform1New.getName(), transform2New.getName())); connections.add(new Connection(transform2New.getName(), transform3New.getName())); connections.add(new Connection(transform3New.getName(), sink1New.getName())); connections.add(new Connection(transform3New.getName(), sink2New.getName())); String schedule = "*/5 * * * *"; Resources resources = new Resources(1024, 1); ETLBatchConfig config = new ETLBatchConfig(schedule, source, ImmutableList.of(sink1, sink2), ImmutableList.of(transform1, transform2, transform3), resources, ImmutableList.of(action)); co.cask.cdap.etl.proto.v1.ETLBatchConfig configNew = co.cask.cdap.etl.proto.v1.ETLBatchConfig.builder(schedule) .setSource(sourceNew) .addSink(sink1New) .addSink(sink2New) .addTransform(transform1New) .addTransform(transform2New) .addTransform(transform3New) .addConnections(connections) .setResources(resources) .setDriverResources(resources) .addAction(actionNew) .build(); Assert.assertEquals(configNew, config.upgrade(new UpgradeContext() { @Nullable @Override public ArtifactSelectorConfig getPluginArtifact(String pluginType, String pluginName) { return new ArtifactSelectorConfig(ArtifactScope.SYSTEM.name(), "universal", "1.0.0"); } })); } }