package com.lordofthejars.nosqlunit.hbase.model; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.List; import org.apache.hadoop.hbase.util.Bytes; import org.junit.Test; public class WhenJsonHbaseDataSetIsLoaded { private static final String HBASE_DATASET = "{\r\n" + " \"name\": \"mytable\",\r\n" + " \"columnFamilies\": [\r\n" + " {\r\n" + " \"name\": \"mycf\",\r\n" + " \"rows\": [\r\n" + " {\r\n" + " \"key\": \"key\",\r\n" + " \"columns\": [\r\n" + " {\r\n" + " \"name\": \"col1\",\r\n" + " \"value\": \"val1\"\r\n" + " },\r\n" + " {\r\n" + " \"name\": \"col2\",\r\n" + " \"value\": \"val2\"\r\n" + " }\r\n" + " ]\r\n" + " }\r\n" + " ]\r\n" + " }\r\n" + " ]\r\n" + "}"; private static final String HBASE_DATASET_WITH_TYPES = "{\r\n" + " \"name\": \"mytable\",\r\n" + " \"columnFamilies\": [\r\n" + " {\r\n" + " \"name\": \"mycf\",\r\n" + " \"rows\": [\r\n" + " {\r\n" + " \"key\": \"1\",\r\n" + " \"keyType\": \"Integer\",\r\n" + " \"columns\": [\r\n" + " {\r\n" + " \"name\": \"col1\",\r\n" + " \"value\": \"10\",\r\n" + " \"valueType\": \"Long\"\r\n" + " },\r\n" + " {\r\n" + " \"name\": \"col2\",\r\n" + " \"value\": \"val2\"\r\n" + " }\r\n" + " ]\r\n" + " }\r\n" + " ]\r\n" + " }\r\n" + " ]\r\n" + "}"; @Test public void should_load_json_file_into_dataset() { DataSetParser dataSetParser = new JsonDataSetParser(); ParsedDataModel parsedDataset = dataSetParser.parse(new ByteArrayInputStream(HBASE_DATASET.getBytes())); assertThat(parsedDataset.getName(), is("mytable")); List<ParsedColumnFamilyModel> columnFamilies = parsedDataset.getColumnFamilies(); assertThat(columnFamilies, hasSize(1)); ParsedColumnFamilyModel parsedColumnFamilyModel = columnFamilies.get(0); assertThat(parsedColumnFamilyModel.getName(), is("mycf")); List<ParsedRowModel> rows = parsedColumnFamilyModel.getRows(); assertThat(rows, hasSize(1)); ParsedRowModel parsedRowModel = rows.get(0); assertThat(parsedRowModel.getKey(), is("key")); List<ParsedColumnModel> columns = parsedRowModel.getColumns(); assertThat(columns, hasSize(2)); ParsedColumnModel firstParsedColumnModel = columns.get(0); ParsedColumnModel secondParsedColumnModel = columns.get(1); assertThat(firstParsedColumnModel.getName(), is("col1")); assertThat(firstParsedColumnModel.getValue(), is("val1")); assertThat(secondParsedColumnModel.getName(), is("col2")); assertThat(secondParsedColumnModel.getValue(), is("val2")); } @Test public void should_load_json_with_type_file_into_dataset() { DataSetParser dataSetParser = new JsonDataSetParser(); ParsedDataModel parsedDataset = dataSetParser.parse(new ByteArrayInputStream(HBASE_DATASET_WITH_TYPES.getBytes())); assertThat(parsedDataset.getName(), is("mytable")); List<ParsedColumnFamilyModel> columnFamilies = parsedDataset.getColumnFamilies(); assertThat(columnFamilies, hasSize(1)); ParsedColumnFamilyModel parsedColumnFamilyModel = columnFamilies.get(0); assertThat(parsedColumnFamilyModel.getName(), is("mycf")); List<ParsedRowModel> rows = parsedColumnFamilyModel.getRows(); assertThat(rows, hasSize(1)); ParsedRowModel parsedRowModel = rows.get(0); assertThat(parsedRowModel.getKey(), is("1")); assertThat(parsedRowModel.getKeyType(), is("Integer")); assertThat(parsedRowModel.getKeyInBytes(), is(Bytes.toBytes(1))); List<ParsedColumnModel> columns = parsedRowModel.getColumns(); assertThat(columns, hasSize(2)); ParsedColumnModel firstParsedColumnModel = columns.get(0); ParsedColumnModel secondParsedColumnModel = columns.get(1); assertThat(firstParsedColumnModel.getName(), is("col1")); assertThat(firstParsedColumnModel.getValueType(), is("Long")); assertThat(firstParsedColumnModel.getValueInBytes(), is(Bytes.toBytes(10L))); assertThat(secondParsedColumnModel.getName(), is("col2")); assertThat(secondParsedColumnModel.getValue(), is("val2")); } }