blob: b7f3d67279171e8fea46753201f79277ad1a9cbc [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.jms;
import static org.apache.qpid.jms.SerializationTestSupport.roundTripSerialize;
import static org.apache.qpid.jms.SerializationTestSupport.serialize;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.HashMap;
import java.util.Map;
import org.apache.qpid.jms.test.QpidJmsTestCase;
import org.junit.Test;
public class JmsTemporaryTopicTest extends QpidJmsTestCase {
private static final String NAME_PROP = "address";
private static final String LEGACY_NAME_PROP = "name";
@Test
public void testIsQueue() {
JmsTemporaryTopic topic = new JmsTemporaryTopic("myTopic");
assertFalse("should not be a queue", topic.isQueue());
}
@Test
public void testIsTopic() {
JmsTemporaryTopic topic = new JmsTemporaryTopic("myTopic");
assertTrue("should be a topic", topic.isTopic());
}
@Test
public void testIsTemporary() {
JmsTemporaryTopic topic = new JmsTemporaryTopic("myTopic");
assertTrue("should be temporary", topic.isTemporary());
}
@Test
public void testIsDeleted() throws Exception {
JmsTemporaryTopic topic = new JmsTemporaryTopic("myTopic");
assertFalse("should not be deleted", topic.isDeleted());
topic.delete();
assertTrue("should be deleted", topic.isDeleted());
}
@Test
public void testEqualsWithNull() {
JmsTemporaryTopic topic = new JmsTemporaryTopic("myTopic");
assertFalse("should not be equal", topic.equals(null));
}
@Test
public void testEqualsWithDifferentObjectType() {
JmsTemporaryTopic topic = new JmsTemporaryTopic("name");
JmsQueue otherObject = new JmsQueue("name");
assertFalse("should not be equal", topic.equals(otherObject));
}
@Test
public void testEqualsWithSameObject() {
JmsTemporaryTopic topic = new JmsTemporaryTopic("name");
assertTrue("should be equal to itself", topic.equals(topic));
}
@Test
public void testEqualsWithDifferentObject() {
JmsTemporaryTopic topic1 = new JmsTemporaryTopic("name");
JmsTemporaryTopic topic2 = new JmsTemporaryTopic("name");
assertTrue("should be equal", topic1.equals(topic2));
assertTrue("should still be equal", topic2.equals(topic1));
}
@Test
public void testHashcodeWithEqualNamedObjects() {
JmsTemporaryTopic topic1 = new JmsTemporaryTopic("name");
JmsTemporaryTopic topic2 = new JmsTemporaryTopic("name");
assertEquals("should have same hashcode", topic1.hashCode(), topic2.hashCode());
}
@Test
public void testHashcodeWithDifferentNamedObjects() {
JmsTemporaryTopic topic1 = new JmsTemporaryTopic("name1");
JmsTemporaryTopic topic2 = new JmsTemporaryTopic("name2");
// Not strictly a requirement, but expected in this case
assertNotEquals("should not have same hashcode", topic1.hashCode(), topic2.hashCode());
}
@Test
public void testGetProperties() throws Exception {
String name = "myTopic";
JmsTemporaryTopic topic = new JmsTemporaryTopic(name);
Map<String, String> props = topic.getProperties();
assertTrue("Property not found: " + NAME_PROP, props.containsKey(NAME_PROP));
assertEquals("Unexpected value for property: " + NAME_PROP, name, props.get(NAME_PROP));
assertEquals("Unexpected number of properties", 1, props.size());
}
@Test
public void testSetProperties() throws Exception {
setPropertiesTestImpl(true, false);
}
@Test
public void testSetPropertiesWithLegacyNameProp() throws Exception {
setPropertiesTestImpl(false, true);
}
@Test
public void testSetPropertiesWithBothNameProps() throws Exception {
setPropertiesTestImpl(true, true);
}
private void setPropertiesTestImpl(boolean addNameProp, boolean addLegacyNameProp) {
String name = "myTopic";
JmsTemporaryTopic topic = new JmsTemporaryTopic();
assertNull("Shouldnt have name yet", topic.getTopicName());
Map<String, String> props = new HashMap<String, String>();
if(addNameProp) {
props.put(NAME_PROP, name);
}
if(addLegacyNameProp) {
props.put(LEGACY_NAME_PROP, name);
}
Map<String, String> unusedProps = topic.setProperties(props);
assertEquals("Unexpected value for name", name, topic.getTopicName());
// Verify the returned map was empty and unmodifiable
assertTrue("Map should be empty: " + unusedProps, unusedProps.isEmpty());
try {
unusedProps.put("a", "b");
fail("Map should be unmodifiable");
} catch (UnsupportedOperationException uoe) {
// expected
}
}
@Test
public void testSetPropertiesWithUnusedOptions() throws Exception {
String name = "myTopic";
String unusedKey = "unusedKey";
String unusedValue = "unusedValue";
JmsTemporaryTopic topic = new JmsTemporaryTopic();
Map<String, String> props = new HashMap<String, String>();
props.put(NAME_PROP, name);
props.put(unusedKey, unusedValue);
Map<String, String> unusedProps = topic.setProperties(props);
// Verify the name property was applied.
assertEquals("Unexpected value for name", name, topic.getTopicName());
//Verify that the unused property was returned
assertEquals("Unexpected size of return map", 1, unusedProps.size());
assertTrue("Expected property not found in map: " + unusedProps, unusedProps.containsKey(unusedKey));
assertEquals("Unexpected property value", unusedValue, unusedProps.get(unusedKey));
// Verify the returned map was unmodifiable
try {
unusedProps.put("a", "b");
fail("Map should be unmodifiable");
} catch (UnsupportedOperationException uoe) {
// expected
}
}
@Test
public void testSerializeThenDeserialize() throws Exception {
String name = "myTopic";
JmsTemporaryTopic topic = new JmsTemporaryTopic(name);
Object roundTripped = roundTripSerialize(topic);
assertNotNull("Null destination returned", roundTripped);
assertEquals("Unexpected type", JmsTemporaryTopic.class, roundTripped.getClass());
assertEquals("Unexpected name", name, ((JmsTemporaryTopic)roundTripped).getTopicName());
assertEquals("Objects were not equal", topic, roundTripped);
assertEquals("Object hashCodes were not equal", topic.hashCode(), roundTripped.hashCode());
}
@Test
public void testSerializeTwoEqualDestinations() throws Exception {
JmsTemporaryTopic topic1 = new JmsTemporaryTopic("myTopic");
JmsTemporaryTopic topic2 = new JmsTemporaryTopic("myTopic");
assertEquals("Destinations were not equal", topic1, topic2);
byte[] bytes1 = serialize(topic1);
byte[] bytes2 = serialize(topic2);
assertArrayEquals("Serialized bytes were not equal", bytes1, bytes2);
}
@Test
public void testSerializeTwoDifferentDestinations() throws Exception {
JmsTemporaryTopic topic1 = new JmsTemporaryTopic("myTopic1");
JmsTemporaryTopic topic2 = new JmsTemporaryTopic("myTopic2");
assertNotEquals("Destinations were not expected to be equal", topic1, topic2);
byte[] bytes1 = serialize(topic1);
byte[] bytes2 = serialize(topic2);
try {
assertArrayEquals(bytes1, bytes2);
fail("Expected arrays to differ");
} catch (AssertionError ae) {
// Expected, pass
}
}
}