com.linkedin.pinot.core.segment.DefaultSegmentNameGeneratorTest.java Source code

Java tutorial

Introduction

Here is the source code for com.linkedin.pinot.core.segment.DefaultSegmentNameGeneratorTest.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.core.segment;

import com.linkedin.pinot.core.indexsegment.generator.SegmentGeneratorConfig;
import com.linkedin.pinot.core.segment.creator.SegmentIndexCreationDriver;
import com.linkedin.pinot.core.segment.creator.impl.SegmentCreationDriverFactory;
import com.linkedin.pinot.core.segment.index.ColumnMetadataTest;
import com.linkedin.pinot.segments.v1.creator.SegmentTestUtils;
import com.linkedin.pinot.util.TestUtils;
import java.io.File;
import java.util.concurrent.TimeUnit;
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 DefaultSegmentNameGeneratorTest {

    private static final String AVRO_DATA = "data/test_data-mv.avro";
    private static final File INDEX_DIR = new File(ColumnMetadataTest.class.toString());

    @BeforeMethod
    public void setUp() throws Exception {
        FileUtils.deleteQuietly(INDEX_DIR);
    }

    @AfterMethod
    public void tearDown() {
        FileUtils.deleteQuietly(INDEX_DIR);
    }

    public SegmentGeneratorConfig CreateSegmentConfigWithoutCreator() throws Exception {
        final String filePath = TestUtils.getFileFromResourceUrl(
                DefaultSegmentNameGeneratorTest.class.getClassLoader().getResource(AVRO_DATA));
        // Intentionally changed this to TimeUnit.Hours to make it non-default for testing.
        SegmentGeneratorConfig config = SegmentTestUtils.getSegmentGenSpecWithSchemAndProjectedColumns(
                new File(filePath), INDEX_DIR, "daysSinceEpoch", TimeUnit.HOURS, "testTable");
        config.setSegmentNamePostfix("1");
        config.setTimeColumnName("daysSinceEpoch");
        return config;
    }

    @Test
    public void testPostfix() throws Exception {
        ColumnMetadataTest columnMetadataTest = new ColumnMetadataTest();
        // Build the Segment metadata.
        SegmentGeneratorConfig config = columnMetadataTest.CreateSegmentConfigWithoutCreator();
        SegmentNameGenerator segmentNameGenerator = new DefaultSegmentNameGenerator("daysSinceEpoch", "mytable",
                "1", -1);
        config.setSegmentNameGenerator(segmentNameGenerator);
        SegmentIndexCreationDriver driver = SegmentCreationDriverFactory.get(null);
        driver.init(config);
        driver.build();
        Assert.assertEquals(driver.getSegmentName(), "mytable_1756015683_1756015683_1");
    }

    @Test
    public void testAlreadyNamedSegment() throws Exception {
        ColumnMetadataTest columnMetadataTest = new ColumnMetadataTest();
        // Build the Segment metadata.
        SegmentGeneratorConfig config = columnMetadataTest.CreateSegmentConfigWithoutCreator();
        SegmentNameGenerator segmentNameGenerator = new DefaultSegmentNameGenerator("mytable_1");
        config.setSegmentNameGenerator(segmentNameGenerator);
        SegmentIndexCreationDriver driver = SegmentCreationDriverFactory.get(null);
        driver.init(config);
        driver.build();
        Assert.assertEquals(driver.getSegmentName(), "mytable_1");
    }

    @Test
    public void testNullTimeColumn() throws Exception {
        ColumnMetadataTest columnMetadataTest = new ColumnMetadataTest();
        // Build the Segment metadata.
        SegmentGeneratorConfig config = columnMetadataTest.CreateSegmentConfigWithoutCreator();
        config.setTableName("mytable");
        config.setSegmentNamePostfix("postfix");
        config.setTimeColumnName(null);
        SegmentIndexCreationDriver driver = SegmentCreationDriverFactory.get(null);
        driver.init(config);
        driver.build();
        Assert.assertEquals(driver.getSegmentName(), "mytable_postfix");
    }

    @Test
    public void testNullTimeColumnThroughDefaultSegment() throws Exception {
        ColumnMetadataTest columnMetadataTest = new ColumnMetadataTest();
        // Build the Segment metadata.
        SegmentGeneratorConfig config = columnMetadataTest.CreateSegmentConfigWithoutCreator();
        SegmentNameGenerator segmentNameGenerator = new DefaultSegmentNameGenerator(null, "mytable", "1", 2);
        config.setSegmentNameGenerator(segmentNameGenerator);
        SegmentIndexCreationDriver driver = SegmentCreationDriverFactory.get(null);
        driver.init(config);
        driver.build();
        Assert.assertEquals(driver.getSegmentName(), "mytable_1_2");
    }

    @Test
    public void testNullPostfix() throws Exception {
        ColumnMetadataTest columnMetadataTest = new ColumnMetadataTest();
        // Build the Segment metadata.
        SegmentGeneratorConfig config = columnMetadataTest.CreateSegmentConfigWithoutCreator();
        SegmentNameGenerator segmentNameGenerator = new DefaultSegmentNameGenerator("daysSinceEpoch", "mytable",
                null, -1);
        config.setSegmentNameGenerator(segmentNameGenerator);
        SegmentIndexCreationDriver driver = SegmentCreationDriverFactory.get(null);
        driver.init(config);
        driver.build();
        Assert.assertEquals(driver.getSegmentName(), "mytable_1756015683_1756015683");
    }

    @Test
    public void testNullPostfixWithNonNegSequenceId() throws Exception {
        ColumnMetadataTest columnMetadataTest = new ColumnMetadataTest();
        // Build the Segment metadata.
        SegmentGeneratorConfig config = columnMetadataTest.CreateSegmentConfigWithoutCreator();
        SegmentNameGenerator segmentNameGenerator = new DefaultSegmentNameGenerator("daysSinceEpoch", "mytable",
                null, 2);
        config.setSegmentNameGenerator(segmentNameGenerator);
        SegmentIndexCreationDriver driver = SegmentCreationDriverFactory.get(null);
        driver.init(config);
        driver.build();
        Assert.assertEquals(driver.getSegmentName(), "mytable_1756015683_1756015683_2");
    }

    @Test
    public void testOnlyTableName() throws Exception {
        ColumnMetadataTest columnMetadataTest = new ColumnMetadataTest();
        // Build the Segment metadata.
        SegmentGeneratorConfig config = columnMetadataTest.CreateSegmentConfigWithoutCreator();
        SegmentNameGenerator segmentNameGenerator = new DefaultSegmentNameGenerator(null, "mytable", null, -1);
        config.setSegmentNameGenerator(segmentNameGenerator);
        SegmentIndexCreationDriver driver = SegmentCreationDriverFactory.get(null);
        driver.init(config);
        driver.build();
        Assert.assertEquals(driver.getSegmentName(), "mytable");
    }
}