Package com.impetus.client.hbase.schemaManager

Source Code of com.impetus.client.hbase.schemaManager.HBaseSchemaOperationTest

/*******************************************************************************
* * Copyright 2012 Impetus Infotech.
*  *
*  * 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.impetus.client.hbase.schemaManager;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import com.impetus.client.hbase.HBaseClientFactory;
import com.impetus.client.hbase.junits.HBaseCli;
import com.impetus.kundera.PersistenceProperties;
import com.impetus.kundera.client.ClientResolver;
import com.impetus.kundera.configure.schema.SchemaGenerationException;

/**
* @author Kuldeep.Kumar
*
*/
public class HBaseSchemaOperationTest
{
    private static final String HBASE_ENTITY_SIMPLE = "HbaseEntitySimple";

    private static final String TABLE = "KunderaHbaseTests";

    private static HBaseAdmin admin;

    private static HBaseCli cli;

    private String persistenceUnit = "HBaseSchemaOperationTest";

    private Map propertyMap = new HashMap();

    /**
     * @throws java.lang.Exception
     */
    @BeforeClass
    public static void setUpBeforeClass() throws Exception
    {
        cli = new HBaseCli();
        cli.startCluster();
        if (admin == null)
        {
            admin = HBaseCli.utility.getHBaseAdmin();
        }
    }

    /**
     * @throws java.lang.Exception
     */
    @Before
    public void setUp() throws Exception
    {

    }

    /**
     * @throws java.lang.Exception
     */
    @AfterClass
    public static void tearDownAfterClass() throws Exception
    {
        cli.dropTable(TABLE);
        HBaseCli.stopCluster();
    }

    /**
     * @throws java.lang.Exception
     */
    @After
    public void tearDown() throws Exception
    {
    }

    @Test
    public void testCreate() throws IOException
    {
        propertyMap.put(PersistenceProperties.KUNDERA_DDL_AUTO_PREPARE, "create");
        EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, propertyMap);
        Assert.assertTrue(admin.isTableAvailable(TABLE));

        HTableDescriptor descriptor = admin.getTableDescriptor(TABLE.getBytes());
        Assert.assertNotNull(descriptor.getFamilies());
        Assert.assertEquals(1, descriptor.getFamilies().size());
        for (HColumnDescriptor columnDescriptor : descriptor.getFamilies())
        {
            Assert.assertNotNull(columnDescriptor);
            Assert.assertNotNull(columnDescriptor.getNameAsString());
            Assert.assertEquals(HBASE_ENTITY_SIMPLE, columnDescriptor.getNameAsString());
        }

        admin.disableTable(TABLE);
        admin.deleteTable(TABLE);
        Assert.assertFalse(admin.isTableAvailable(TABLE));
    }

    @Test
    public void testCreatedrop() throws IOException
    {
        propertyMap.put(PersistenceProperties.KUNDERA_DDL_AUTO_PREPARE, "create-drop");
        EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, propertyMap);
        // schemaManager = new
        // HBaseSchemaManager(HBaseClientFactory.class.getName(), null);
        // schemaManager.exportSchema();
        Assert.assertTrue(admin.isTableAvailable(TABLE));

        HTableDescriptor descriptor = admin.getTableDescriptor(TABLE.getBytes());
        Assert.assertNotNull(descriptor.getFamilies());
        Assert.assertEquals(1, descriptor.getFamilies().size());
        for (HColumnDescriptor columnDescriptor : descriptor.getFamilies())
        {
            Assert.assertNotNull(columnDescriptor);
            Assert.assertNotNull(columnDescriptor.getNameAsString());
            Assert.assertEquals(HBASE_ENTITY_SIMPLE, columnDescriptor.getNameAsString());
        }

        HBaseClientFactory clientFactory = (HBaseClientFactory) ClientResolver.getClientFactory(persistenceUnit);
        clientFactory.getSchemaManager(null).dropSchema();
        Assert.assertTrue(admin.isTableAvailable(TABLE));
        Assert.assertNull(admin.getTableDescriptor(TABLE.getBytes()).getFamily(HBASE_ENTITY_SIMPLE.getBytes()));
    }

    @Test
    public void testUpdate() throws IOException
    {
        HTableDescriptor descriptor1 = new HTableDescriptor(TABLE);
        HColumnDescriptor columnDescriptor1 = new HColumnDescriptor("PERSON_NAME");
        descriptor1.addFamily(columnDescriptor1);
        if (admin.isTableAvailable(TABLE))
        {
            admin.disableTable(TABLE);
            admin.deleteTable(TABLE);
        }
        admin.createTable(descriptor1);
        Assert.assertTrue(admin.isTableAvailable(TABLE));
        HTableDescriptor descriptor2 = admin.getTableDescriptor(TABLE.getBytes());
        Assert.assertNotNull(descriptor2.getFamilies());
        Assert.assertEquals(1, descriptor2.getFamilies().size());
        for (HColumnDescriptor columnDescriptor : descriptor2.getFamilies())
        {
            Assert.assertNotNull(columnDescriptor);
            Assert.assertNotNull(columnDescriptor.getNameAsString());
            Assert.assertEquals("PERSON_NAME", columnDescriptor.getNameAsString());
        }

        propertyMap.put(PersistenceProperties.KUNDERA_DDL_AUTO_PREPARE, "update");
        EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, propertyMap);
        // schemaManager = new
        // HBaseSchemaManager(HBaseClientFactory.class.getName(), null);
        // schemaManager.exportSchema();

        Assert.assertTrue(admin.isTableAvailable(TABLE));

        HTableDescriptor descriptor = admin.getTableDescriptor(TABLE.getBytes());
        Assert.assertNotNull(descriptor.getFamilies());
        Assert.assertEquals(2, descriptor.getFamilies().size());
        List<String> columns = new ArrayList<String>();
        columns.add(HBASE_ENTITY_SIMPLE);
        columns.add("PERSON_NAME");
        for (HColumnDescriptor columnDescriptor : descriptor.getFamilies())
        {
            Assert.assertNotNull(columnDescriptor);
            Assert.assertNotNull(columnDescriptor.getNameAsString());
            Assert.assertTrue(columns.contains(columnDescriptor.getNameAsString()));
        }

        if (!admin.isTableDisabled(TABLE))
        {
            admin.disableTable(TABLE);
        }

        admin.deleteTable(TABLE);
        Assert.assertFalse(admin.isTableAvailable(TABLE));
    }

    @Test
    public void testValidate() throws IOException
    {
        HTableDescriptor descriptor1 = new HTableDescriptor(TABLE);
        HColumnDescriptor columnDescriptor1 = new HColumnDescriptor(HBASE_ENTITY_SIMPLE);
        descriptor1.addFamily(columnDescriptor1);
        if (admin.isTableAvailable(TABLE))
        {
            admin.disableTable(TABLE);
            admin.deleteTable(TABLE);
        }
        admin.createTable(descriptor1);

        Assert.assertTrue(admin.isTableAvailable(TABLE));
        HTableDescriptor descriptor2 = admin.getTableDescriptor(TABLE.getBytes());
        Assert.assertNotNull(descriptor2.getFamilies());
        Assert.assertEquals(1, descriptor2.getFamilies().size());
        List<String> columns = new ArrayList<String>();
        columns.add(HBASE_ENTITY_SIMPLE);
        for (HColumnDescriptor columnDescriptor : descriptor2.getFamilies())
        {
            Assert.assertNotNull(columnDescriptor);
            Assert.assertNotNull(columnDescriptor.getNameAsString());
            Assert.assertTrue(columns.contains(columnDescriptor.getNameAsString()));
        }

        propertyMap.put(PersistenceProperties.KUNDERA_DDL_AUTO_PREPARE, "validate");
        EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, propertyMap);
        // schemaManager = new
        // HBaseSchemaManager(HBaseClientFactory.class.getName(), null);
        // schemaManager.exportSchema();
        if (!admin.isTableDisabled(TABLE))
        {
            admin.disableTable(TABLE);
        }
        admin.deleteTable(TABLE);
        Assert.assertFalse(admin.isTableAvailable(TABLE));
    }

    @Test
    public void testValidateInValid() throws IOException
    {
        try
        {
            HTableDescriptor descriptor1 = new HTableDescriptor(TABLE);
            HColumnDescriptor columnDescriptor1 = new HColumnDescriptor(HBASE_ENTITY_SIMPLE);
            descriptor1.addFamily(columnDescriptor1);
            if (admin.isTableAvailable(TABLE))
            {
                admin.disableTable(TABLE);
                admin.deleteTable(TABLE);
            }
            admin.createTable(descriptor1);
            Assert.assertTrue(admin.isTableAvailable(TABLE));
            HTableDescriptor descriptor2 = admin.getTableDescriptor(TABLE.getBytes());
            Assert.assertNotNull(descriptor2.getFamilies());
            Assert.assertEquals(1, descriptor2.getFamilies().size());
            for (HColumnDescriptor columnDescriptor : descriptor2.getFamilies())
            {
                Assert.assertNotNull(columnDescriptor);
                Assert.assertNotNull(columnDescriptor.getNameAsString());
                Assert.assertEquals(HBASE_ENTITY_SIMPLE, columnDescriptor.getNameAsString());
            }

            propertyMap.put(PersistenceProperties.KUNDERA_DDL_AUTO_PREPARE, "validate");
            EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, propertyMap);
            // schemaManager = new
            // HBaseSchemaManager(HBaseClientFactory.class.getName(), null);
            // schemaManager.exportSchema();
        }
        catch (SchemaGenerationException sgex)
        {
            List<String> errors = new ArrayList<String>();
            errors.add("column " + "AGE" + " does not exist in table " + TABLE + "");
            errors.add("column " + "PERSON_NAME" + " does not exist in table " + TABLE + "");
            Assert.assertTrue(errors.contains(sgex.getMessage()));

        }
    }
}
TOP

Related Classes of com.impetus.client.hbase.schemaManager.HBaseSchemaOperationTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.