/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.camel.component.hbase;
import java.io.IOException;
import org.apache.camel.CamelContext;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.apache.camel.util.IOHelper;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.TableExistsException;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class CamelHBaseTestSupport extends CamelTestSupport {
//The hbase testing utility has special requirements on the umask.
//We hold this value to check if the the minicluster has properly started and tests can be run.
protected static Boolean systemReady = true;
protected static HBaseTestingUtility hbaseUtil = new HBaseTestingUtility();
protected static int numServers = 1;
protected static final String PERSON_TABLE = "person";
protected static final String INFO_FAMILY = "info";
private static final Logger LOG = LoggerFactory.getLogger(CamelHBaseTestSupport.class);
protected String[] key = {"1", "2", "3"};
protected final String[] family = {"info", "birthdate", "address"};
protected final String[][] column = {
{"id", "firstName", "lastName"},
{"day", "month", "year"},
{"street", "number", "zip"}
};
//body[row][family][column]
protected final String[][][] body = {
{{"1", "Ioannis", "Canellos"}, {"09", "03", "1980"}, {"Awesome Street", "23", "15344"}},
{{"2", "John", "Dow"}, {"01", "01", "1979"}, {"Unknown Street", "1", "1010"}},
{{"3", "Christian", "Mueller"}, {"09", "01", "1979"}, {"Another Unknown Street", "14", "2020"}}
};
protected final byte[][] families = {
family[0].getBytes(),
family[1].getBytes(),
family[2].getBytes()};
@BeforeClass
public static void setUpClass() throws Exception {
try {
hbaseUtil.startMiniCluster(numServers);
} catch (Exception e) {
LOG.warn("couldn't start HBase cluster. Test is not started, but passed!", e);
systemReady = false;
}
}
@AfterClass
public static void tearDownClass() throws Exception {
if (systemReady) {
hbaseUtil.shutdownMiniCluster();
}
}
@Before
public void setUp() throws Exception {
if (systemReady) {
try {
hbaseUtil.createTable(HBaseHelper.getHBaseFieldAsBytes(PERSON_TABLE), families);
} catch (TableExistsException ex) {
//Ignore if table exists
}
super.setUp();
}
}
@After
public void tearDown() throws Exception {
if (systemReady) {
hbaseUtil.deleteTable(PERSON_TABLE.getBytes());
super.tearDown();
}
}
@Override
public CamelContext createCamelContext() throws Exception {
CamelContext context = new DefaultCamelContext(createRegistry());
// configure hbase component
HBaseComponent component = context.getComponent("hbase", HBaseComponent.class);
component.setConfiguration(hbaseUtil.getConfiguration());
return context;
}
protected void putMultipleRows() throws IOException {
Configuration configuration = hbaseUtil.getHBaseAdmin().getConfiguration();
Connection connection = ConnectionFactory.createConnection(configuration);
Table table = connection.getTable(TableName.valueOf(PERSON_TABLE.getBytes()));
for (int r = 0; r < key.length; r++) {
Put put = new Put(key[r].getBytes());
put.addColumn(family[0].getBytes(), column[0][0].getBytes(), body[r][0][0].getBytes());
table.put(put);
}
IOHelper.close(table);
}
}