From 2ec96bf46de0366fcf5332eb87eacb0f27f09db2 Mon Sep 17 00:00:00 2001 From: Ulf Lilleengen Date: Fri, 13 Sep 2019 16:44:01 +0200 Subject: [PATCH] ARTEMIS-2488: Handle the case where source address is null --- .../proton/ProtonServerSenderContext.java | 2 +- .../proton/ProtonServerSenderContextTest.java | 54 +++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContextTest.java diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContext.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContext.java index 580c4ce9e8..8c4495a4d4 100644 --- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContext.java +++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContext.java @@ -320,7 +320,7 @@ public class ProtonServerSenderContext extends ProtonInitializable implements Pr addressToUse = SimpleString.toSimpleString(CompositeAddress.extractAddressName(source.getAddress())); queueNameToUse = SimpleString.toSimpleString(CompositeAddress.extractQueueName(source.getAddress())); } else { - addressToUse = new SimpleString(source.getAddress()); + addressToUse = SimpleString.toSimpleString(source.getAddress()); } //check to see if the client has defined how we act boolean clientDefined = hasCapabilities(TOPIC, source) || hasCapabilities(QUEUE, source); diff --git a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContextTest.java b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContextTest.java new file mode 100644 index 0000000000..9b2980de94 --- /dev/null +++ b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContextTest.java @@ -0,0 +1,54 @@ +/* + * 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.activemq.artemis.protocol.amqp.proton; + +import org.apache.activemq.artemis.core.server.AddressQueryResult; +import org.apache.activemq.artemis.protocol.amqp.broker.AMQPSessionCallback; +import org.apache.activemq.artemis.protocol.amqp.exceptions.ActiveMQAMQPNotFoundException; +import org.apache.qpid.proton.amqp.messaging.Source; +import org.apache.qpid.proton.engine.Sender; +import org.junit.Test; + +import java.util.Collections; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class ProtonServerSenderContextTest { + + @Test(expected = ActiveMQAMQPNotFoundException.class) + public void testAcceptsNullSourceAddressWhenInitialising() throws Exception { + Sender mockSender = mock(Sender.class); + AMQPConnectionContext mockConnContext = mock(AMQPConnectionContext.class); + + AMQPSessionCallback mockSessionCallback = mock(AMQPSessionCallback.class); + + AddressQueryResult queryResult = new AddressQueryResult(null, Collections.emptySet(), 0, false, false, false, false, 0); + when(mockSessionCallback.addressQuery(any(), any(), anyBoolean())).thenReturn(queryResult); + ProtonServerSenderContext sc = new ProtonServerSenderContext( mockConnContext, mockSender, null, mockSessionCallback); + + Source source = new Source(); + source.setAddress(null); + when(mockSender.getRemoteSource()).thenReturn(source); + + + sc.initialise(); + } + +}