/* * 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 gobblin.aws; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.IOUtils; import org.junit.BeforeClass; import org.testng.Assert; import org.testng.annotations.Test; import com.google.common.base.Optional; /** * Unit tests for {@link CloudInitScriptBuilder}. * * @author Abhishek Tiwari */ @Test(groups = { "gobblin.aws" }) public class CloudInitScriptBuilderTest { private static final String MASTER_CLOUD_INIT_SCRIPT = "masterCloudInit.sh"; private static final String WORKER_CLOUD_INIT_SCRIPT = "workerCloudInit.sh"; private String clusterName = "cluster"; private String nfsParentDir = "/home/ec2-user/"; private String awsConfDir = nfsParentDir + clusterName + "/cluster-conf/"; private String appWorkDir = nfsParentDir + clusterName + "/work-dir/"; private String sinkLogRootDir = nfsParentDir + clusterName + "/log-dir/"; private String masterS3ConfUri = "https://s3-us-west-2.amazonaws.com/some-bucket/cluster-conf/"; private String masterS3ConfFiles = "application.conf,log4j-aws.properties,quartz.properties"; private String masterS3JarsUri = "https://s3-us-west-2.amazonaws.com/some-bucket/gobblin-jars/"; private String masterS3JarFiles = "myjar1.jar,myjar2.jar,myjar3.jar,myjar4-\"${vr}\".jar"; private String masterJarsDir = nfsParentDir + clusterName + "/gobblin-jars/"; private String masterJvmMemory = "-Xms1G"; private String masterPublicIp = "0.0.0.0"; private String workerS3ConfUri = "https://s3-us-west-2.amazonaws.com/some-bucket/cluster-conf/"; private String workerS3ConfFiles = "application.conf,log4j-aws.properties,quartz.properties"; private String workerS3JarsUri = "https://s3-us-west-2.amazonaws.com/some-bucket/gobblin-jars/"; private String workerS3JarFiles = "myjar1.jar,myjar2.jar,myjar3.jar,myjar4-\"${vr}\".jar"; private String workerJarsDir = nfsParentDir + clusterName + "/gobblin-jars/"; private String workerJvmMemory = "-Xms1G"; private String expectedMasterCloudInitScript; private String expectedWorkerCloudInitScript; private Optional<String> gobblinVersion = Optional.of("0.7.1"); @BeforeClass public void setup() throws Exception { this.expectedMasterCloudInitScript = IOUtils.toString(GobblinAWSClusterLauncherTest.class.getClassLoader() .getResourceAsStream(MASTER_CLOUD_INIT_SCRIPT), "UTF-8"); this.expectedWorkerCloudInitScript = IOUtils.toString(GobblinAWSClusterLauncherTest.class.getClassLoader() .getResourceAsStream(WORKER_CLOUD_INIT_SCRIPT), "UTF-8"); } @Test public void testBuildClusterMasterCommand() { final String script = CloudInitScriptBuilder.buildClusterMasterCommand(this.clusterName, this.nfsParentDir, this.sinkLogRootDir, this.awsConfDir, this.appWorkDir, this.masterS3ConfUri, this.masterS3ConfFiles, this.masterS3JarsUri, this.masterS3JarFiles, this.masterJarsDir, this.masterJvmMemory, Optional.<String>absent(), gobblinVersion); final String decodedScript = new String(Base64.decodeBase64(script)); Assert.assertEquals(decodedScript, this.expectedMasterCloudInitScript, "Master launcher cloud-init script not built as expected"); } @Test public void testBuildClusterWorkerCommand() { final String script = CloudInitScriptBuilder.buildClusterWorkerCommand(this.clusterName, this.nfsParentDir, this.sinkLogRootDir, this.awsConfDir, this.appWorkDir, this.masterPublicIp, this.workerS3ConfUri, this.workerS3ConfFiles, this.workerS3JarsUri, this.workerS3JarFiles, this.workerJarsDir, this.workerJvmMemory, Optional.<String>absent(), gobblinVersion); final String decodedScript = new String(Base64.decodeBase64(script)); Assert.assertEquals(decodedScript, this.expectedWorkerCloudInitScript, "Worker launcher cloud-init script not built as expected"); } }