/*
* 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.message;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import java.util.UUID;
import org.apache.qpid.jms.meta.JmsConsumerId;
import org.apache.qpid.jms.meta.JmsSessionId;
import org.apache.qpid.proton.amqp.Binary;
import org.apache.qpid.proton.amqp.UnsignedLong;
import org.junit.Test;
public class JmsInboundMessageDispatchTest {
@Test
public void testEqualsWithNullAndOtherTypes() {
JmsInboundMessageDispatch envelope = new JmsInboundMessageDispatch(1);
assertFalse(envelope.equals(null));
assertFalse(envelope.equals(""));
}
@Test
public void testEqualAndHashCodeWithNotInitializedAndInitializedEnvelopes() {
JmsSessionId sessionId = new JmsSessionId("con", 1);
long sequence = 1;
JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence);
JmsConsumerId consumerId2 = new JmsConsumerId(sessionId, 2);
envelope2.setConsumerId(consumerId2);
envelope2.setMessageId("myMessageId");
assertFalse("objects should not be equal", envelope1.equals(envelope2));
assertFalse("objects should still not be equal", envelope2.equals(envelope1));
// Not strictly a requirement, but expected in this case
assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
envelope2.setMessageId(null);
assertFalse("objects should not be equal", envelope1.equals(envelope2));
assertFalse("objects should still not be equal", envelope2.equals(envelope1));
// Not strictly a requirement, but expected in this case
assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
envelope2.setConsumerId(null);
assertTrue("objects should be equal", envelope1.equals(envelope2));
assertTrue("objects should still be equal", envelope2.equals(envelope1));
}
@Test
public void testEqualAndHashCodeWithSameSequenceOnly() {
int sequence = 1;
JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence);
assertTrue("objects should be equal", envelope1.equals(envelope2));
assertTrue("objects should still be equal", envelope2.equals(envelope1));
assertEquals("hashCodes should be the same", envelope1.hashCode(), envelope2.hashCode());
}
@Test
public void testEqualAndHashCodeWithDifferentSequenceOnly() {
int sequence = 1;
JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence + 1);
assertFalse("objects should not be equal", envelope1.equals(envelope2));
assertFalse("objects should still not be equal", envelope2.equals(envelope1));
// Not strictly a requirement, but expected in this case
assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
}
@Test
public void testEqualAndHashCodeWithSameSequenceDifferentConsumerId() {
JmsSessionId sessionId = new JmsSessionId("con", 1);
long sequence = 1;
JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
JmsConsumerId consumerId1 = new JmsConsumerId(sessionId, 1);
envelope1.setConsumerId(consumerId1);
JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence);
JmsConsumerId consumerId2 = new JmsConsumerId(sessionId, 2);
envelope2.setConsumerId(consumerId2);
assertFalse("objects should not be equal", envelope1.equals(envelope2));
assertFalse("objects should still not be equal", envelope2.equals(envelope1));
// Not strictly a requirement, but expected in this case
assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
}
@Test
public void testEqualAndHashCodeWithSameSequenceSameConsumerId() {
JmsSessionId sessionId = new JmsSessionId("con", 1);
JmsConsumerId consumerId = new JmsConsumerId(sessionId, 1);
long sequence = 1;
JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
envelope1.setConsumerId(consumerId);
JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence);
envelope2.setConsumerId(consumerId);
assertTrue("objects should be equal", envelope1.equals(envelope2));
assertTrue("objects should still be equal", envelope2.equals(envelope1));
assertEquals("hashCodes should be the same", envelope1.hashCode(), envelope2.hashCode());
}
@Test
public void testEqualAndHashCodeWithSameSequenceSameConsumerIdSameMessageId() {
JmsSessionId sessionId = new JmsSessionId("con", 1);
JmsConsumerId consumerId = new JmsConsumerId(sessionId, 1);
Object messageId = "myMessageId";
long sequence = 1;
JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
envelope1.setConsumerId(consumerId);
envelope1.setMessageId(messageId);
JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence);
envelope2.setConsumerId(consumerId);
envelope2.setMessageId(messageId);
assertTrue("objects should be equal", envelope1.equals(envelope2));
assertTrue("objects should still be equal", envelope2.equals(envelope1));
assertEquals("hashCodes should be the same", envelope1.hashCode(), envelope2.hashCode());
}
@Test
public void testEqualAndHashCodeWithSameSequenceSameConsumerIdDifferentMessageIdTypes() {
JmsSessionId sessionId = new JmsSessionId("con", 1);
JmsConsumerId consumerId = new JmsConsumerId(sessionId, 1);
Object messageId1 = new Binary(new byte[] { (byte) 1, (byte) 0 });
Object messageId2 = UnsignedLong.valueOf(2);
long sequence = 1;
JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
envelope1.setConsumerId(consumerId);
envelope1.setMessageId(messageId1);
JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence);
envelope2.setConsumerId(consumerId);
envelope2.setMessageId(messageId2);
assertFalse("objects should not be equal", envelope1.equals(envelope2));
assertFalse("objects should still not be equal", envelope2.equals(envelope1));
// Not strictly a requirement, but expected in this case
assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
}
@Test
public void testEqualAndHashCodeWithSameSequenceSameConsumerIdDifferentMessageIdTypes2() {
JmsSessionId sessionId = new JmsSessionId("con", 1);
JmsConsumerId consumerId = new JmsConsumerId(sessionId, 1);
Object messageId1 = UUID.randomUUID();
Object messageId2 = messageId1.toString();
long sequence = 1;
JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
envelope1.setConsumerId(consumerId);
envelope1.setMessageId(messageId1);
JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence);
envelope2.setConsumerId(consumerId);
envelope2.setMessageId(messageId2);
assertFalse("objects should not be equal", envelope1.equals(envelope2));
assertFalse("objects should still not be equal", envelope2.equals(envelope1));
// Not strictly a requirement, but expected in this case
assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
}
@Test
public void testEqualAndHashCodeWithDifferentSequenceSameConsumerIdSameMessageId() {
JmsSessionId sessionId = new JmsSessionId("con", 1);
JmsConsumerId consumerId = new JmsConsumerId(sessionId, 1);
Object messageId = "myMessageId";
long sequence = 1;
JmsInboundMessageDispatch envelope1 = new JmsInboundMessageDispatch(sequence);
envelope1.setConsumerId(consumerId);
envelope1.setMessageId(messageId);
JmsInboundMessageDispatch envelope2 = new JmsInboundMessageDispatch(sequence + 1);
envelope2.setConsumerId(consumerId);
envelope2.setMessageId(messageId);
assertFalse("objects should not be equal", envelope1.equals(envelope2));
assertFalse("objects should still not be equal", envelope2.equals(envelope1));
// Not strictly a requirement, but expected in this case
assertNotEquals("hashCodes should not be the same", envelope1.hashCode(), envelope2.hashCode());
}
}