/** * 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.index; 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.segments.v1.creator.SegmentTestUtils; import com.linkedin.pinot.util.TestUtils; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.util.concurrent.TimeUnit; import junit.framework.Assert; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.io.FileUtils; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class SegmentMetadataImplTest { private static final String AVRO_DATA = "data/test_data-mv.avro"; private File INDEX_DIR; private File segmentDirectory; @BeforeMethod public void setUp() throws Exception { INDEX_DIR = Files.createTempDirectory(SegmentMetadataImplTest.class.getName() + "_segmentDir").toFile(); final String filePath = TestUtils.getFileFromResourceUrl(SegmentMetadataImplTest.class.getClassLoader().getResource(AVRO_DATA)); // intentionally changed this to TimeUnit.Hours to make it non-default for testing final SegmentGeneratorConfig config = SegmentTestUtils .getSegmentGenSpecWithSchemAndProjectedColumns(new File(filePath), INDEX_DIR, "daysSinceEpoch", TimeUnit.HOURS, "testTable"); config.setSegmentNamePostfix("1"); config.setTimeColumnName("daysSinceEpoch"); final SegmentIndexCreationDriver driver = SegmentCreationDriverFactory.get(null); driver.init(config); driver.build(); segmentDirectory = new File(INDEX_DIR, driver.getSegmentName()); } @AfterMethod public void tearDown() { FileUtils.deleteQuietly(segmentDirectory); } @Test public void testToJson() throws IOException, ConfigurationException, JSONException { SegmentMetadataImpl metadata = new SegmentMetadataImpl(segmentDirectory); Assert.assertNotNull(metadata); JSONObject jsonMeta = metadata.toJson(null); Assert.assertEquals(jsonMeta.get("segmentName"), metadata.getName()); Assert.assertEquals(jsonMeta.getLong("crc"), Long.valueOf(metadata.getCrc()).longValue()); Assert.assertEquals(jsonMeta.getString("paddingCharacter"), String.valueOf(metadata.getPaddingCharacter())); Assert.assertEquals(jsonMeta.get("creatorName"), metadata.getCreatorName()); Assert.assertEquals(jsonMeta.get("creationTimeMillis"), metadata.getIndexCreationTime()); Assert.assertEquals(jsonMeta.get("startTimeMillis"), metadata.getTimeInterval().getStartMillis()); Assert.assertEquals(jsonMeta.get("endTimeMillis"), metadata.getTimeInterval().getEndMillis()); Assert.assertEquals(jsonMeta.get("pushTimeMillis"), metadata.getPushTime()); Assert.assertEquals(jsonMeta.get("refreshTimeMillis"), metadata.getPushTime()); JSONArray jsonColumnList = jsonMeta.getJSONArray("columns"); Assert.assertEquals(jsonColumnList.length(), metadata.getAllColumns().size()); for (int i = 0; i < jsonColumnList.length(); i++) { JSONObject jsonColumn = jsonColumnList.getJSONObject(i); ColumnMetadata colMeta = metadata.getColumnMetadataFor(jsonColumn.getString("columnName")); Assert.assertEquals(jsonColumn.get("cardinality"), colMeta.getCardinality()); Assert.assertEquals(jsonColumn.get("totalRawDocs"), colMeta.getTotalRawDocs()); Assert.assertEquals(jsonColumn.get("bitsPerElement"), colMeta.getBitsPerElement()); Assert.assertEquals(jsonColumn.getBoolean("sorted"), colMeta.isSorted()); Assert.assertEquals(jsonColumn.get("totalAggDocs"), colMeta.getTotalAggDocs()); Assert.assertEquals(jsonColumn.get("containsNulls"), colMeta.hasNulls()); Assert.assertEquals(jsonColumn.getBoolean("hasDictionary"), colMeta.hasDictionary()); } } }