blob: a19b10eb14da0a4a2a96c9713ca12790644f5f41 [file] [log] [blame]
/*
* 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.qpid.proton.codec;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.apache.qpid.proton.amqp.Symbol;
import org.apache.qpid.proton.amqp.UnsignedByte;
import org.apache.qpid.proton.amqp.UnsignedInteger;
import org.apache.qpid.proton.amqp.UnsignedShort;
import org.apache.qpid.proton.amqp.messaging.MessageAnnotations;
import org.junit.Test;
public class MessageAnnotationsTypeCodecTest extends CodecTestSupport {
private final int LARGE_SIZE = 1024;
private final int SMALL_SIZE = 32;
@Test
public void testDecodeSmallSeriesOfMessageAnnotations() throws IOException {
doTestDecodeMessageAnnotationsSeries(SMALL_SIZE);
}
@Test
public void testDecodeLargeSeriesOfMessageAnnotations() throws IOException {
doTestDecodeMessageAnnotationsSeries(LARGE_SIZE);
}
@Test
public void testDecodeLMessageAnnotations() throws IOException {
doTestDecodeMessageAnnotationsSeries(1);
}
private void doTestDecodeMessageAnnotationsSeries(int size) throws IOException {
final Symbol SYMBOL_1 = Symbol.valueOf("test1");
final Symbol SYMBOL_2 = Symbol.valueOf("test2");
final Symbol SYMBOL_3 = Symbol.valueOf("test3");
MessageAnnotations annotations = new MessageAnnotations(new HashMap<>());
annotations.getValue().put(SYMBOL_1, UnsignedByte.valueOf((byte) 128));
annotations.getValue().put(SYMBOL_2, UnsignedShort.valueOf((short) 128));
annotations.getValue().put(SYMBOL_3, UnsignedInteger.valueOf(128));
for (int i = 0; i < size; ++i) {
encoder.writeObject(annotations);
}
buffer.clear();
for (int i = 0; i < size; ++i) {
final Object result = decoder.readObject();
assertNotNull(result);
assertTrue(result instanceof MessageAnnotations);
MessageAnnotations readAnnotations = (MessageAnnotations) result;
Map<Symbol, Object> resultMap = readAnnotations.getValue();
assertEquals(annotations.getValue().size(), resultMap.size());
assertEquals(resultMap.get(SYMBOL_1), UnsignedByte.valueOf((byte) 128));
assertEquals(resultMap.get(SYMBOL_2), UnsignedShort.valueOf((short) 128));
assertEquals(resultMap.get(SYMBOL_3), UnsignedInteger.valueOf(128));
}
}
@Test
public void testEncodeAndDecodeAnnoationsWithEmbeddedMaps() throws IOException {
final Symbol SYMBOL_1 = Symbol.valueOf("x-opt-test1");
final Symbol SYMBOL_2 = Symbol.valueOf("x-opt-test2");
final String VALUE_1 = "string";
final UnsignedInteger VALUE_2 = UnsignedInteger.valueOf(42);
final UUID VALUE_3 = UUID.randomUUID();
Map<String, Object> stringKeyedMap = new HashMap<>();
stringKeyedMap.put("key1", VALUE_1);
stringKeyedMap.put("key2", VALUE_2);
stringKeyedMap.put("key3", VALUE_3);
Map<Symbol, Object> symbolKeyedMap = new HashMap<>();
symbolKeyedMap.put(Symbol.valueOf("key1"), VALUE_1);
symbolKeyedMap.put(Symbol.valueOf("key2"), VALUE_2);
symbolKeyedMap.put(Symbol.valueOf("key3"), VALUE_3);
MessageAnnotations annotations = new MessageAnnotations(new HashMap<>());
annotations.getValue().put(SYMBOL_1, stringKeyedMap);
annotations.getValue().put(SYMBOL_2, symbolKeyedMap);
encoder.writeObject(annotations);
buffer.clear();
final Object result = decoder.readObject();
assertNotNull(result);
assertTrue(result instanceof MessageAnnotations);
MessageAnnotations readAnnotations = (MessageAnnotations) result;
Map<Symbol, Object> resultMap = readAnnotations.getValue();
assertEquals(annotations.getValue().size(), resultMap.size());
assertEquals(resultMap.get(SYMBOL_1), stringKeyedMap);
assertEquals(resultMap.get(SYMBOL_2), symbolKeyedMap);
}
}