/**
* diqube: Distributed Query Base.
*
* Copyright (C) 2015 Bastian Gloeckle
*
* This file is part of diqube.
*
* diqube is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.diqube.metadata;
import org.diqube.data.column.ColumnType;
import org.diqube.data.table.TableShard;
import org.diqube.metadata.create.TableShardMetadataBuilder;
import org.diqube.metadata.create.TableShardMetadataBuilder.IllegalTableShardLayoutException;
import org.diqube.name.RepeatedColumnNameGenerator;
import org.diqube.thrift.base.thrift.FieldType;
import org.diqube.thrift.base.thrift.TableMetadata;
import org.diqube.util.Pair;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/**
* Tests {@link TableShardMetadataBuilder}.
*
* @author Bastian Gloeckle
*/
public class TableShardMetadataBuilderTest {
private TableShardMetadataBuilder builder;
@BeforeMethod
public void before() {
builder = new TableShardMetadataBuilder(new RepeatedColumnNameGenerator());
}
@Test
public void simpleTest() throws IllegalTableShardLayoutException {
// GIVEN
TableShard table = TableMetadataTestUtil.mockShard(new Pair<>("a", ColumnType.STRING),
new Pair<>("b", ColumnType.LONG), new Pair<>("c", ColumnType.DOUBLE));
// WHEN
TableMetadata metadata = builder.from(table).build();
// THEN
Assert.assertEquals(metadata.getTableName(), TableMetadataTestUtil.TABLE,
"Expected table name being filled correctly");
TableMetadataTestUtil.assertField(metadata, "a", FieldType.STRING, false);
TableMetadataTestUtil.assertField(metadata, "b", FieldType.LONG, false);
TableMetadataTestUtil.assertField(metadata, "c", FieldType.DOUBLE, false);
Assert.assertEquals(metadata.getFields().size(), 3, "Expected field info for all fields");
}
@Test
public void repeatedTest() throws IllegalTableShardLayoutException {
// GIVEN
TableShard table = TableMetadataTestUtil.mockShard(new Pair<>("a[0]", ColumnType.STRING),
new Pair<>("a[1]", ColumnType.STRING), new Pair<>("a[length]", ColumnType.LONG));
// WHEN
TableMetadata metadata = builder.from(table).build();
// THEN
TableMetadataTestUtil.assertField(metadata, "a", FieldType.STRING, true);
Assert.assertEquals(metadata.getFields().size(), 1, "Expected field info for all fields");
}
@Test
public void containerTest() throws IllegalTableShardLayoutException {
// GIVEN
TableShard table = TableMetadataTestUtil.mockShard(new Pair<>("a.b", ColumnType.STRING),
new Pair<>("a.c", ColumnType.LONG), new Pair<>("a.d", ColumnType.DOUBLE));
// WHEN
TableMetadata metadata = builder.from(table).build();
// THEN
TableMetadataTestUtil.assertField(metadata, "a", FieldType.CONTAINER, false);
TableMetadataTestUtil.assertField(metadata, "a.b", FieldType.STRING, false);
TableMetadataTestUtil.assertField(metadata, "a.c", FieldType.LONG, false);
TableMetadataTestUtil.assertField(metadata, "a.d", FieldType.DOUBLE, false);
Assert.assertEquals(metadata.getFields().size(), 4, "Expected field info for all fields");
}
@Test
public void containerRepeated1Test() throws IllegalTableShardLayoutException {
// GIVEN
TableShard table = TableMetadataTestUtil.mockShard(new Pair<>("a.b[0]", ColumnType.LONG),
new Pair<>("a.b[length]", ColumnType.LONG));
// WHEN
TableMetadata metadata = builder.from(table).build();
// THEN
TableMetadataTestUtil.assertField(metadata, "a", FieldType.CONTAINER, false);
TableMetadataTestUtil.assertField(metadata, "a.b", FieldType.LONG, true);
Assert.assertEquals(metadata.getFields().size(), 2, "Expected field info for all fields");
}
@Test
public void containerRepeated2Test() throws IllegalTableShardLayoutException {
// GIVEN
TableShard table = TableMetadataTestUtil.mockShard(new Pair<>("a[0].b", ColumnType.DOUBLE),
new Pair<>("a[1].b", ColumnType.DOUBLE), new Pair<>("a[length]", ColumnType.LONG));
// WHEN
TableMetadata metadata = builder.from(table).build();
// THEN
TableMetadataTestUtil.assertField(metadata, "a", FieldType.CONTAINER, true);
TableMetadataTestUtil.assertField(metadata, "a.b", FieldType.DOUBLE, false);
Assert.assertEquals(metadata.getFields().size(), 2, "Expected field info for all fields");
}
@Test(expectedExceptions = IllegalTableShardLayoutException.class)
public void illegalTest() throws IllegalTableShardLayoutException {
// GIVEN
TableShard table =
TableMetadataTestUtil.mockShard(new Pair<>("a", ColumnType.STRING), new Pair<>("a.b", ColumnType.LONG));
// WHEN
builder.from(table).build();
// THEN
// exception expected
}
}