/*
* Copyright 2014-2016 CyberVision, 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.kaaproject.kaa.client.common;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.apache.avro.Schema;
import org.apache.avro.Schema.Type;
import org.apache.avro.generic.GenericArray;
import org.apache.avro.generic.GenericEnumSymbol;
import org.apache.avro.generic.GenericFixed;
import org.apache.avro.generic.GenericRecord;
import org.junit.Test;
import java.nio.ByteBuffer;
import java.util.LinkedList;
import java.util.List;
public class CommonToGenericTest {
private static CommonArray createCommonArray(Schema schema, Object value) {
List<CommonValue> list = new LinkedList<>();
list.add(new DefaultCommonValue(value));
CommonArray array = new DefaultCommonArray(Schema.createArray(schema), list);
return array;
}
@Test
public void testArrayOfFixed() {
Schema fixedSchema = Schema.createFixed("someFixed", "", "", 2);
GenericArray avroArray = CommonToGeneric.createArray(createCommonArray(
fixedSchema, new DefaultCommonFixed(fixedSchema, new byte[]{1, 2})));
GenericFixed avroFixed = (GenericFixed) avroArray.get(0);
assertArrayEquals(new byte[]{1, 2}, avroFixed.bytes());
}
@Test
public void testArrayOfBoolean() {
Schema booleanSchema = Schema.create(Type.BOOLEAN);
GenericArray avroArray = CommonToGeneric
.createArray(createCommonArray(
booleanSchema, new Boolean(Boolean.TRUE)));
Boolean avroBoolean = (Boolean) avroArray.get(0);
assertTrue(avroBoolean);
}
@Test
public void testArrayOfInteger() {
Schema integerSchema = Schema.create(Type.INT);
GenericArray avroArray = CommonToGeneric
.createArray(createCommonArray(
integerSchema, new Integer(5)));
Integer avroInt = (Integer) avroArray.get(0);
assertEquals(5, avroInt.intValue());
}
@Test
public void testArrayOfLong() {
Schema longSchema = Schema.create(Type.LONG);
GenericArray avroArray = CommonToGeneric
.createArray(createCommonArray(
longSchema, new Long(5)));
Long avroLong = (Long) avroArray.get(0);
assertEquals(5, avroLong.longValue());
}
@Test
public void testArrayOfDouble() {
Schema doubleSchema = Schema.create(Type.DOUBLE);
GenericArray avroArray = CommonToGeneric
.createArray(createCommonArray(
doubleSchema, new Double(5.5)));
Double avroDouble = (Double) avroArray.get(0);
assertEquals(5.5, avroDouble.doubleValue(), 0.1);
}
@Test
public void testArrayOfFloat() {
Schema floatSchema = Schema.create(Type.FLOAT);
GenericArray avroArray = CommonToGeneric
.createArray(createCommonArray(
floatSchema, new Float(5.5)));
Float avroFloat = (Float) avroArray.get(0);
assertEquals(5.5, avroFloat.floatValue(), 0.1);
}
@Test
public void testArrayOfString() {
Schema stringSchema = Schema.create(Type.STRING);
GenericArray avroArray = CommonToGeneric
.createArray(createCommonArray(
stringSchema, new String("abc")));
String avroString = (String) avroArray.get(0);
assertEquals("abc", avroString);
}
@Test
public void testArrayOfBytes() {
Schema bytesSchema = Schema.create(Type.BYTES);
GenericArray avroArray = CommonToGeneric
.createArray(createCommonArray(
bytesSchema, ByteBuffer.wrap(new byte[]{1, 2})));
ByteBuffer avroBytes = (ByteBuffer) avroArray.get(0);
assertArrayEquals(new byte[]{1, 2}, avroBytes.array());
}
@Test
public void testRecord() {
List<String> symbols = new LinkedList<>();
symbols.add("enum1");
symbols.add("enum2");
Schema recordSchema = Schema.createRecord("someRecord", "", "", false);
List<Schema.Field> fields = new LinkedList<>();
fields.add(new Schema.Field("field1", Schema.createEnum("someEnum", "", "", symbols), "", null));
fields.add(new Schema.Field("field2", Schema.create(Type.BOOLEAN), "", null));
fields.add(new Schema.Field("field3", Schema.create(Type.INT), "", null));
fields.add(new Schema.Field("field4", Schema.create(Type.LONG), "", null));
fields.add(new Schema.Field("field5", Schema.create(Type.DOUBLE), "", null));
fields.add(new Schema.Field("field6", Schema.create(Type.FLOAT), "", null));
fields.add(new Schema.Field("field7", Schema.create(Type.STRING), "", null));
fields.add(new Schema.Field("field8", Schema.create(Type.BYTES), "", null));
recordSchema.setFields(fields);
CommonRecord record = new DefaultCommonRecord(recordSchema);
record.setField("field1", new DefaultCommonValue(new DefaultCommonEnum(Schema.createEnum("someEnum", "", "", symbols), "enum2")));
record.setField("field2", new DefaultCommonValue(new Boolean(Boolean.TRUE)));
record.setField("field3", new DefaultCommonValue(new Integer(1)));
record.setField("field4", new DefaultCommonValue(new Long(2)));
record.setField("field5", new DefaultCommonValue(new Double(5.5)));
record.setField("field6", new DefaultCommonValue(new Float(5.6)));
record.setField("field7", new DefaultCommonValue(new String("abc")));
record.setField("field8", new DefaultCommonValue(ByteBuffer.wrap(new byte[]{1, 2})));
GenericRecord avroRecord = CommonToGeneric.createRecord(record);
GenericEnumSymbol field1 = (GenericEnumSymbol) avroRecord.get("field1");
assertEquals("enum2", field1.toString());
assertTrue((Boolean) avroRecord.get("field2"));
assertEquals(1, ((Integer) avroRecord.get("field3")).intValue());
assertEquals(2, ((Long) avroRecord.get("field4")).longValue());
assertEquals(5.5, ((Double) avroRecord.get("field5")).doubleValue(), 0.1);
assertEquals(5.6, ((Float) avroRecord.get("field6")).floatValue(), 0.1);
assertEquals("abc", (String) avroRecord.get("field7"));
assertArrayEquals(new byte[]{1, 2}, ((ByteBuffer) avroRecord.get("field8")).array());
}
}