// Copyright 2016 Twitter. All rights reserved. // // 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 com.twitter.heron.uploader.localfs; import java.io.File; import java.nio.file.Paths; import org.apache.commons.io.FileUtils; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.twitter.heron.common.basics.PackageType; import com.twitter.heron.spi.common.Config; import com.twitter.heron.spi.common.Key; import com.twitter.heron.spi.uploader.UploaderException; public class LocalFileSystemUploaderTest { private Config config; private String fileSystemDirectory; private String testTopologyDirectory; @Before public void before() throws Exception { // form the file system directory using bazel environ files fileSystemDirectory = Paths.get(System.getenv("JAVA_RUNFILES"), "topologies").toString(); // form the test topology directory testTopologyDirectory = Paths.get(System.getenv("JAVA_RUNFILES"), LocalFileSystemConstantsTest.TEST_DATA_PATH).toString(); // Create the minimum config for tests config = Config.newBuilder() .put(Key.CLUSTER, "cluster") .put(Key.ROLE, "role") .put(Key.TOPOLOGY_NAME, "topology") .put(Key.TOPOLOGY_PACKAGE_TYPE, PackageType.TAR) .put(LocalFileSystemKey.FILE_SYSTEM_DIRECTORY.value(), fileSystemDirectory) .build(); } @After public void after() throws Exception { FileUtils.deleteDirectory(new File(fileSystemDirectory)); } @Test public void testUploader() throws Exception { // identify the location of the test topology tar file String topologyPackage = Paths.get(testTopologyDirectory, "some-topology.tar").toString(); Config newconfig = Config.newBuilder() .putAll(config).put(Key.TOPOLOGY_PACKAGE_FILE, topologyPackage).build(); // create the uploader and load the package LocalFileSystemUploader uploader = new LocalFileSystemUploader(); uploader.initialize(newconfig); Assert.assertNotNull(uploader.uploadPackage()); // verify if the file exists String destFile = uploader.getTopologyFile(); Assert.assertTrue(new File(destFile).isFile()); } @Test(expected = UploaderException.class) public void testSourceNotExists() throws Exception { // identify the location of the test topology tar file String topologyPackage = Paths.get( testTopologyDirectory, "doesnot-exist-topology.tar").toString(); Config newconfig = Config.newBuilder() .putAll(config).put(Key.TOPOLOGY_PACKAGE_FILE, topologyPackage).build(); // create the uploader and load the package LocalFileSystemUploader uploader = new LocalFileSystemUploader(); uploader.initialize(newconfig); uploader.uploadPackage(); } @Test public void testUndo() throws Exception { // identify the location of the test topology tar file String topologyPackage = Paths.get(testTopologyDirectory, "some-topology.tar").toString(); Config newconfig = Config.newBuilder() .putAll(config).put(Key.TOPOLOGY_PACKAGE_FILE, topologyPackage).build(); // create the uploader and load the package LocalFileSystemUploader uploader = new LocalFileSystemUploader(); uploader.initialize(newconfig); Assert.assertNotNull(uploader.uploadPackage()); // verify if the file exists String destFile = uploader.getTopologyFile(); Assert.assertTrue(new File(destFile).isFile()); // now undo the file uploader.undo(); Assert.assertFalse(new File(destFile).isFile()); } }