blob: 0185dd28dc6acd7c387e1a6858226102c4832eac [file] [log] [blame]
/**
* 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.heron.downloader;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.apache.heron.common.basics.FileUtils;
import static org.junit.Assert.assertTrue;
public class ExtractorTests {
private String tempDirectory;
private String workingDirectory;
@Before
public void before() throws IOException {
tempDirectory =
Files.createTempDirectory("temp").toFile().getAbsolutePath();
workingDirectory =
Files.createTempDirectory("working").toFile().getAbsolutePath();
}
@Test
public void testFlatExtract() throws Exception {
final Path file1 = Paths.get(tempDirectory, "file1");
final Path file2 = Paths.get(tempDirectory, "file2");
Files.createFile(file1);
Files.createFile(file2);
assertTrue(Files.exists(file1));
assertTrue(Files.exists(file2));
// build tar.gz with file1 and file2
final Path tar = Paths.get(workingDirectory, "topology.tar.gz");
createTarGz(tar.toFile().getAbsolutePath(),
tempDirectory);
assertTrue(Files.exists(tar));
Extractor.extract(new FileInputStream(tar.toFile()), Paths.get(workingDirectory));
assertTrue(Files.exists(Paths.get(workingDirectory, "file1")));
assertTrue(Files.exists(Paths.get(workingDirectory, "file2")));
}
@Test
public void testNestedOneLevelExtract() throws Exception {
final Path file1 = Paths.get(tempDirectory, "file");
final Path nestedFile = Paths.get(tempDirectory, "dir", "file");
Files.createFile(file1);
nestedFile.getParent().toFile().mkdir();
Files.createFile(nestedFile);
// build tar.gz with file and dir/file
final Path tar = Paths.get(workingDirectory, "topology.tar.gz");
createTarGz(tar.toFile().getAbsolutePath(),
tempDirectory);
assertTrue(Files.exists(tar));
Extractor.extract(new FileInputStream(tar.toFile()), Paths.get(workingDirectory));
assertTrue(Files.exists(Paths.get(workingDirectory, "file")));
assertTrue(Files.exists(Paths.get(workingDirectory, "dir", "file")));
}
@Test
public void testNestedTwoLevelsExtract() throws Exception {
final Path file1 = Paths.get(tempDirectory, "file1");
final Path nestedFile = Paths.get(tempDirectory, "dir", "file");
final Path nestedFile2 = Paths.get(tempDirectory, "dir", "dir2", "file");
Files.createFile(file1);
nestedFile.getParent().toFile().mkdir();
Files.createFile(nestedFile);
nestedFile2.getParent().toFile().mkdir();
Files.createFile(nestedFile2);
// build tar.gz with file1 and dir/file dir/dir2/file
final Path tar = Paths.get(workingDirectory, "topology.tar.gz");
createTarGz(tar.toFile().getAbsolutePath(),
tempDirectory);
assertTrue(Files.exists(tar));
Extractor.extract(new FileInputStream(tar.toFile()), Paths.get(workingDirectory));
assertTrue(Files.exists(Paths.get(workingDirectory, "file1")));
assertTrue(Files.exists(Paths.get(workingDirectory, "dir", "file")));
assertTrue(Files.exists(Paths.get(workingDirectory, "dir", "dir2", "file")));
}
@After
public void after() {
cleanAndDeleteDirectory(tempDirectory);
cleanAndDeleteDirectory(workingDirectory);
}
private static void cleanAndDeleteDirectory(String directory) {
if (directory != null) {
FileUtils.cleanDir(directory);
FileUtils.deleteDir(directory);
}
}
private void createTarGz(String name, String directory) throws Exception {
final String command = String.format("tar -C %s -czvf %s .", directory, name);
final Process p = Runtime.getRuntime().exec(command);
p.waitFor(10, TimeUnit.SECONDS);
}
}