org.kitesdk.data.hbase.tool.SchemaToolTest.java Source code

Java tutorial

Introduction

Here is the source code for org.kitesdk.data.hbase.tool.SchemaToolTest.java

Source

/**
 * Copyright 2014 Cloudera Inc.
 *
 * 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 org.kitesdk.data.hbase.tool;

import static org.junit.Assert.assertEquals;

import java.io.File;

import org.apache.commons.io.FileUtils;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTablePool;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.kitesdk.data.spi.PartitionKey;
import org.kitesdk.data.hbase.avro.AvroDaoTest;
import org.kitesdk.data.hbase.avro.AvroUtils;
import org.kitesdk.data.hbase.avro.SpecificAvroDao;
import org.kitesdk.data.hbase.avro.entities.SimpleHBaseRecord;
import org.kitesdk.data.hbase.impl.Dao;
import org.kitesdk.data.hbase.impl.SchemaManager;
import org.kitesdk.data.hbase.manager.DefaultSchemaManager;
import org.kitesdk.data.hbase.testing.HBaseTestUtils;

/**
 * Test of using schema tool to migrate schemas in a directory.
 */
public class SchemaToolTest {
    private static final String tableName = "simple";
    private static final String managedTableName = "managed_schemas";
    private static File simpleSchemaFile;
    private static String simpleSchema;

    private HTablePool tablePool;
    private SchemaManager manager;
    private SchemaTool tool;

    @BeforeClass
    public static void beforeClass() throws Exception {
        simpleSchema = AvroUtils
                .inputStreamToString(AvroDaoTest.class.getResourceAsStream("/SchemaTool/SimpleHBaseRecord.avsc"));
        simpleSchemaFile = FileUtils.toFile(AvroDaoTest.class.getResource("/SchemaTool/SimpleHBaseRecord.avsc"));

        HBaseTestUtils.getMiniCluster();
    }

    @AfterClass
    public static void afterClass() throws Exception {
        HBaseTestUtils.util.deleteTable(Bytes.toBytes(tableName));
    }

    @Before
    public void before() throws Exception {
        tablePool = new HTablePool(HBaseTestUtils.getConf(), 10);
        manager = new DefaultSchemaManager(tablePool);
        tool = new SchemaTool(new HBaseAdmin(HBaseTestUtils.getConf()), manager);
    }

    @After
    public void after() throws Exception {
        tablePool.close();
        HBaseTestUtils.util.truncateTable(Bytes.toBytes(tableName));
        HBaseTestUtils.util.truncateTable(Bytes.toBytes(managedTableName));
    }

    @Test
    public void testMigrateDirectory() throws Exception {
        tool.createOrMigrateSchemaDirectory("classpath:SchemaTool", true);

        Dao<SimpleHBaseRecord> dao = new SpecificAvroDao<SimpleHBaseRecord>(tablePool, tableName,
                "SimpleHBaseRecord", manager);
        testBasicOperations(dao);
    }

    @Test
    public void testMigrateFile() throws Exception {
        tool.createOrMigrateSchemaFile(tableName, simpleSchemaFile, true);

        Dao<SimpleHBaseRecord> dao = new SpecificAvroDao<SimpleHBaseRecord>(tablePool, tableName,
                "SimpleHBaseRecord", manager);
        testBasicOperations(dao);
    }

    @Test
    public void testMigrateSchema() throws Exception {
        tool.createOrMigrateSchema(tableName, simpleSchema, true);

        Dao<SimpleHBaseRecord> dao = new SpecificAvroDao<SimpleHBaseRecord>(tablePool, tableName,
                "SimpleHBaseRecord", manager);
        testBasicOperations(dao);
    }

    private void testBasicOperations(Dao<SimpleHBaseRecord> dao) {
        SimpleHBaseRecord r1 = SimpleHBaseRecord.newBuilder().setField1("Field 1").setKeyPart1("KeyPart 1").build();
        dao.put(r1);

        PartitionKey key = new PartitionKey("KeyPart 1");
        SimpleHBaseRecord r2 = dao.get(key);
        assertEquals(r1.getField1().toString(), r2.getField1().toString());
        assertEquals(r1.getKeyPart1().toString(), r2.getKeyPart1().toString());
    }
}