com.linkedin.pinot.common.utils.TarGzCompressionUtilsTest.java Source code

Java tutorial

Introduction

Here is the source code for com.linkedin.pinot.common.utils.TarGzCompressionUtilsTest.java

Source

/**
 * Copyright (C) 2014-2016 LinkedIn Corp. (pinot-core@linkedin.com)
 *
 * 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.linkedin.pinot.common.utils;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.io.FileUtils;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class TarGzCompressionUtilsTest {
    private static final String SEGMENT_NAME = "mysegment";

    private File TEST_DIR;
    private File dataDir;
    private File tarDir;
    private File untarDir;
    private File segmentDir;

    @BeforeMethod
    public void setUpTest() throws IOException {
        TEST_DIR = Files.createTempDirectory(TarGzCompressionUtils.class.getName()).toFile();
        TEST_DIR.deleteOnExit();
        dataDir = new File(TEST_DIR, "dataDir");
        tarDir = new File(TEST_DIR, "tarDir");
        untarDir = new File(TEST_DIR, "untarDir");
        segmentDir = new File(dataDir, SEGMENT_NAME);
        FileUtils.forceMkdir(dataDir);
        FileUtils.forceMkdir(tarDir);
        FileUtils.forceMkdir(untarDir);
        FileUtils.forceMkdir(segmentDir);

    }

    @AfterMethod
    public void tearDownTest() {
        if (TEST_DIR != null) {
            FileUtils.deleteQuietly(TEST_DIR);
        }
    }

    @Test
    public void testBasic() throws IOException, InterruptedException, ArchiveException {
        File metaFile = new File(segmentDir, "metadata.properties");
        metaFile.createNewFile();
        File tarGzPath = new File(tarDir, SEGMENT_NAME + ".tar.gz");
        TarGzCompressionUtils.createTarGzOfDirectory(segmentDir.getPath(), tarGzPath.getPath(), "segmentId_");
        TarGzCompressionUtils.unTar(tarGzPath, untarDir);
        File[] files = untarDir.listFiles();
        Assert.assertNotNull(files);
        Assert.assertEquals(files.length, 1);
        File[] subFiles = files[0].listFiles();
        Assert.assertNotNull(subFiles);
        Assert.assertEquals(subFiles.length, 1);
        Assert.assertEquals(subFiles[0].getName(), "metadata.properties");
    }

    @Test
    public void testSubDirectories() throws IOException, ArchiveException, InterruptedException {
        new File(segmentDir, "metadata.properties").createNewFile();
        File v3Dir = new File(segmentDir, "v3");
        FileUtils.forceMkdir(v3Dir);
        new File(v3Dir, "creation.meta").createNewFile();

        File tarGzPath = new File(tarDir, SEGMENT_NAME + ".tar.gz");
        TarGzCompressionUtils.createTarGzOfDirectory(segmentDir.getPath(), tarGzPath.getPath());
        TarGzCompressionUtils.unTar(tarGzPath, untarDir);
        File[] segments = untarDir.listFiles();
        Assert.assertNotNull(segments);
        Assert.assertEquals(segments.length, 1);
        File[] segmentFiles = segments[0].listFiles();
        Assert.assertNotNull(segmentFiles);
        Assert.assertEquals(segmentFiles.length, 2);
        for (File segmentFile : segmentFiles) {
            String name = segmentFile.getName();
            Assert.assertTrue(name.equals("v3") || name.equals("metadata.properties"));
            if (name.equals("v3")) {
                Assert.assertTrue(segmentFile.isDirectory());
                File[] v3Files = v3Dir.listFiles();
                Assert.assertNotNull(v3Files);
                Assert.assertEquals(v3Files.length, 1);
                Assert.assertEquals(v3Files[0].getName(), "creation.meta");
            }
        }
    }

    @Test
    public void testEmptyDirectory() throws IOException, ArchiveException {
        File tarGzPath = new File(tarDir, SEGMENT_NAME + ".tar.gz");
        TarGzCompressionUtils.createTarGzOfDirectory(segmentDir.getPath(), tarGzPath.getPath());
        TarGzCompressionUtils.unTar(tarGzPath, untarDir);
        File[] segments = untarDir.listFiles();
        Assert.assertNotNull(segments);
        Assert.assertEquals(segments.length, 1);
        File[] segmentFiles = segments[0].listFiles();
        Assert.assertNotNull(segmentFiles);
        Assert.assertEquals(segmentFiles.length, 0);

    }
}