You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by lq...@apache.org on 2017/04/10 15:42:10 UTC

svn commit: r1790864 - in /qpid/java/trunk: ./ systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/ systests/protocol-tests-amqp-1-0/src/main/resources/ systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests...

Author: lquack
Date: Mon Apr 10 15:42:09 2017
New Revision: 1790864

URL: http://svn.apache.org/viewvc?rev=1790864&view=rev
Log:
QPID-7665: [Java Broker] Improvements to AMQP 1.0 Protocol Tests

 * clean up work directory after test
 * add SpecificationTest annotation to reference relevant sections of the AMQP specification
 * add license header to initial config

Added:
    qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/SpecificationTest.java
      - copied, changed from r1790856, qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/BrokerAdmin.java
Modified:
    qpid/java/trunk/pom.xml
    qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/BrokerAdmin.java
    qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/EmbeddedBrokerPerClassAdminImpl.java
    qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/ExternalQpidBrokerAdminImpl.java
    qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/FrameTransport.java
    qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/resources/config-protocol-tests.json
    qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/ProtocolHeaderTest.java
    qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java
    qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/AttachTest.java
    qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/session/BeginTest.java

Modified: qpid/java/trunk/pom.xml
URL: http://svn.apache.org/viewvc/qpid/java/trunk/pom.xml?rev=1790864&r1=1790863&r2=1790864&view=diff
==============================================================================
--- qpid/java/trunk/pom.xml (original)
+++ qpid/java/trunk/pom.xml Mon Apr 10 15:42:09 2017
@@ -141,7 +141,7 @@
     <!-- test dependency version numbers -->
     <junit-version>4.11</junit-version>
     <mockito-version>1.9.5</mockito-version>
-    <netty-version>4.1.9.Final</netty-version>
+    <netty-version>4.1.8.Final</netty-version>
     <hamcrest-version>1.3</hamcrest-version>
     <httpclient-version>4.4</httpclient-version>
     <qpid-jms-client-version>0.21.0</qpid-jms-client-version>

Modified: qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/BrokerAdmin.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/BrokerAdmin.java?rev=1790864&r1=1790863&r2=1790864&view=diff
==============================================================================
--- qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/BrokerAdmin.java (original)
+++ qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/BrokerAdmin.java Mon Apr 10 15:42:09 2017
@@ -34,6 +34,7 @@ public interface BrokerAdmin extends Plu
     InetSocketAddress getBrokerAddress(PortType portType);
 
     void createQueue(String queueName);
+    void deleteQueue(String queueName);
 
     enum PortType
     {

Modified: qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/EmbeddedBrokerPerClassAdminImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/EmbeddedBrokerPerClassAdminImpl.java?rev=1790864&r1=1790863&r2=1790864&view=diff
==============================================================================
--- qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/EmbeddedBrokerPerClassAdminImpl.java (original)
+++ qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/EmbeddedBrokerPerClassAdminImpl.java Mon Apr 10 15:42:09 2017
@@ -24,10 +24,11 @@ import java.io.File;
 import java.lang.reflect.Method;
 import java.net.InetSocketAddress;
 import java.nio.file.Files;
-import java.nio.file.Path;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -42,12 +43,14 @@ import org.apache.qpid.server.logging.lo
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.Container;
 import org.apache.qpid.server.model.IllegalStateTransitionException;
+import org.apache.qpid.server.model.NotFoundException;
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.Queue;
 import org.apache.qpid.server.model.SystemConfig;
 import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.plugin.PluggableService;
 import org.apache.qpid.server.store.MemoryConfigurationStore;
+import org.apache.qpid.server.util.FileUtils;
 import org.apache.qpid.server.virtualhostnode.JsonVirtualHostNode;
 
 @PluggableService
@@ -58,6 +61,7 @@ public class EmbeddedBrokerPerClassAdmin
     private SystemLauncher _systemLauncher;
     private Container<?> _broker;
     private VirtualHostNode<?> _currentVirtualHostNode;
+    private String _currentWorkDirectory;
 
     @Override
     public void beforeTestClass(final Class testClass)
@@ -65,10 +69,11 @@ public class EmbeddedBrokerPerClassAdmin
         LOGGER.info("beforeTestClass " + testClass.getSimpleName());
         try
         {
-            Path qpidWorkDir = Files.createTempDirectory("qpid-work-");
+            String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date(System.currentTimeMillis()));
+            _currentWorkDirectory = Files.createTempDirectory(String.format("qpid-work-%s-%s-", timestamp, testClass.getSimpleName())).toString();
 
             Map<String,String> context = new HashMap<>();
-            context.put("qpid.work_dir", qpidWorkDir.toString());
+            context.put("qpid.work_dir", _currentWorkDirectory);
             context.put("qpid.port.protocol_handshake_timeout", "1000000");
 
             Map<String,Object> systemConfigAttributes = new HashMap<>();
@@ -135,7 +140,7 @@ public class EmbeddedBrokerPerClassAdmin
     public void afterTestMethod(final Class testClass, final Method method)
     {
         LOGGER.info("afterTestMethod " + testClass.getSimpleName() + "#" + method.getName());
-        if (!Boolean.getBoolean("qpid.tests.protocols.keepVirtualHosts"))
+        if (Boolean.getBoolean("broker.clean.between.tests"))
         {
             _currentVirtualHostNode.delete();
         }
@@ -147,6 +152,10 @@ public class EmbeddedBrokerPerClassAdmin
         LOGGER.info("afterTestClass " + testClass.getSimpleName());
         _systemLauncher.shutdown();
         _ports.clear();
+        if (Boolean.getBoolean("broker.clean.between.tests"))
+        {
+            FileUtils.delete(new File(_currentWorkDirectory), true);
+        }
     }
 
     @Override
@@ -170,11 +179,30 @@ public class EmbeddedBrokerPerClassAdmin
     }
 
     @Override
+    public void deleteQueue(final String queueName)
+    {
+        getQueue(queueName).delete();
+    }
+
+    @Override
     public String getType()
     {
         return "EMBEDDED_BROKER_PER_CLASS";
     }
 
+    private Queue getQueue(final String queueName)
+    {
+        Collection<Queue> queues = _currentVirtualHostNode.getVirtualHost().getChildren(Queue.class);
+        for (Queue queue : queues)
+        {
+            if (queue.getName().equals(queueName))
+            {
+                return queue;
+            }
+        }
+        throw new NotFoundException(String.format("Queue '%s' not found", queueName));
+    }
+
     private class PortExtractingLauncherListener implements SystemLauncherListener
     {
         private SystemConfig<?> _systemConfig;

Modified: qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/ExternalQpidBrokerAdminImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/ExternalQpidBrokerAdminImpl.java?rev=1790864&r1=1790863&r2=1790864&view=diff
==============================================================================
--- qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/ExternalQpidBrokerAdminImpl.java (original)
+++ qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/ExternalQpidBrokerAdminImpl.java Mon Apr 10 15:42:09 2017
@@ -86,6 +86,12 @@ public class ExternalQpidBrokerAdminImpl
     }
 
     @Override
+    public void deleteQueue(final String queueName)
+    {
+        LOGGER.debug(String.format("deletion of queue '%s' requested", queueName));
+    }
+
+    @Override
     public String getType()
     {
         return "EXTERNAL_BROKER";

Modified: qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/FrameTransport.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/FrameTransport.java?rev=1790864&r1=1790863&r2=1790864&view=diff
==============================================================================
--- qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/FrameTransport.java (original)
+++ qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/FrameTransport.java Mon Apr 10 15:42:09 2017
@@ -19,15 +19,21 @@
 
 package org.apache.qpid.tests.protocol.v1_0;
 
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
 import static org.junit.Assert.assertNull;
 
 import java.net.InetSocketAddress;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.Set;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicInteger;
 
 import com.google.common.util.concurrent.JdkFutureAdapters;
 import com.google.common.util.concurrent.ListenableFuture;
@@ -46,14 +52,17 @@ import io.netty.channel.socket.nio.NioSo
 import org.apache.qpid.server.protocol.v1_0.framing.TransportFrame;
 import org.apache.qpid.server.protocol.v1_0.type.FrameBody;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
+import org.apache.qpid.server.protocol.v1_0.type.messaging.Source;
+import org.apache.qpid.server.protocol.v1_0.type.messaging.Target;
+import org.apache.qpid.server.protocol.v1_0.type.transport.Attach;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Begin;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
+import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
 
 public class FrameTransport implements AutoCloseable
 {
     private static final long RESPONSE_TIMEOUT = 6000;
-    private static final AtomicInteger _amqpConnectionIdGenerator = new AtomicInteger(1);
-    private static final AtomicInteger _amqpChannelIdGenerator = new AtomicInteger(1);
+    private static final Set<Integer> _amqpConnectionIds = Collections.newSetFromMap(new ConcurrentHashMap<>());
 
     private final Channel _channel;
     private final BlockingQueue<Response> _queue = new ArrayBlockingQueue<>(100);
@@ -99,6 +108,7 @@ public class FrameTransport implements A
         }
         finally
         {
+            _amqpConnectionIds.remove(_amqpConnectionId);
             _workerGroup.shutdownGracefully();
         }
     }
@@ -146,8 +156,8 @@ public class FrameTransport implements A
     {
         doProtocolNegotiation();
         Open open = new Open();
-        _amqpConnectionId = _amqpConnectionIdGenerator.getAndIncrement();
-        open.setContainerId(String.format("testContainer-%d", _amqpConnectionId));
+
+        open.setContainerId(String.format("testContainer-%d", getConnectionId()));
         TransportFrame transportFrame = new TransportFrame((short) 0, open);
         sendPerformative(transportFrame);
         PerformativeResponse response = (PerformativeResponse) getNextResponse();
@@ -164,7 +174,7 @@ public class FrameTransport implements A
         begin.setNextOutgoingId(UnsignedInteger.ZERO);
         begin.setIncomingWindow(UnsignedInteger.ZERO);
         begin.setOutgoingWindow(UnsignedInteger.ZERO);
-        _amqpChannelId = (short) _amqpChannelIdGenerator.getAndIncrement();
+        _amqpChannelId = (short) 1;
         sendPerformative(new TransportFrame(_amqpChannelId, begin));
         PerformativeResponse response = (PerformativeResponse) getNextResponse();
         if (!(response.getFrameBody() instanceof Begin))
@@ -173,9 +183,45 @@ public class FrameTransport implements A
         }
     }
 
+    public void doAttachReceivingLink(String queueName) throws Exception
+    {
+        doBeginSession();
+        Role localRole = Role.RECEIVER;
+        Attach attach = new Attach();
+        attach.setName("testReceivingLink");
+        attach.setHandle(new UnsignedInteger(0));
+        attach.setRole(localRole);
+        Source source = new Source();
+        source.setAddress(queueName);
+        attach.setSource(source);
+        Target target = new Target();
+        attach.setTarget(target);
+
+        sendPerformative(attach);
+        PerformativeResponse response = (PerformativeResponse) getNextResponse();
+
+        assertThat(response, is(notNullValue()));
+        assertThat(response.getFrameBody(), is(instanceOf(Attach.class)));
+        Attach responseAttach = (Attach) response.getFrameBody();
+        assertThat(responseAttach.getSource(), is(notNullValue()));
+    }
+
     public void assertNoMoreResponses() throws Exception
     {
         Response response = getNextResponse();
         assertNull("Unexpected response.", response);
     }
+
+    private int getConnectionId()
+    {
+        if (_amqpConnectionId == 0)
+        {
+            _amqpConnectionId = 1;
+            while (!_amqpConnectionIds.add(_amqpConnectionId))
+            {
+                ++_amqpConnectionId;
+            }
+        }
+        return _amqpConnectionId;
+    }
 }

Copied: qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/SpecificationTest.java (from r1790856, qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/BrokerAdmin.java)
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/SpecificationTest.java?p2=qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/SpecificationTest.java&p1=qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/BrokerAdmin.java&r1=1790856&r2=1790864&rev=1790864&view=diff
==============================================================================
--- qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/BrokerAdmin.java (original)
+++ qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/SpecificationTest.java Mon Apr 10 15:42:09 2017
@@ -1,4 +1,5 @@
-/*
+package org.apache.qpid.tests.protocol.v1_0;/*
+ *
  * 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
@@ -15,29 +16,19 @@
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
+ *
  */
 
-package org.apache.qpid.tests.protocol.v1_0;
-
-import java.lang.reflect.Method;
-import java.net.InetSocketAddress;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
-import org.apache.qpid.server.plugin.Pluggable;
 
-public interface BrokerAdmin extends Pluggable
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface SpecificationTest
 {
-    void beforeTestClass(final Class testClass);
-    void beforeTestMethod(final Class testClass, final Method method);
-    void afterTestMethod(final Class testClass, final Method method);
-    void afterTestClass(final Class testClass);
-
-    InetSocketAddress getBrokerAddress(PortType portType);
-
-    void createQueue(String queueName);
-
-    enum PortType
-    {
-        ANONYMOUS_AMQP,
-        AMQP
-    }
+    String section();
+    String description();
 }

Modified: qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/resources/config-protocol-tests.json
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/resources/config-protocol-tests.json?rev=1790864&r1=1790863&r2=1790864&view=diff
==============================================================================
--- qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/resources/config-protocol-tests.json (original)
+++ qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/resources/config-protocol-tests.json Mon Apr 10 15:42:09 2017
@@ -1,3 +1,23 @@
+/*
+ *
+ * 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.
+ *
+ */
 {
   "name" : "${broker.name}",
   "modelVersion" : "7.0",

Modified: qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/ProtocolHeaderTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/ProtocolHeaderTest.java?rev=1790864&r1=1790863&r2=1790864&view=diff
==============================================================================
--- qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/ProtocolHeaderTest.java (original)
+++ qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/ProtocolHeaderTest.java Mon Apr 10 15:42:09 2017
@@ -31,6 +31,7 @@ import org.apache.qpid.tests.protocol.v1
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.HeaderResponse;
 import org.apache.qpid.tests.protocol.v1_0.ProtocolTestBase;
+import org.apache.qpid.tests.protocol.v1_0.SpecificationTest;
 
 
 /*
@@ -50,6 +51,11 @@ queue creation?
 public class ProtocolHeaderTest extends ProtocolTestBase
 {
     @Test
+    @SpecificationTest(section = "2.2",
+            description = "Prior to sending any frames on a connection, each peer MUST start by sending a protocol header that indicates "
+                          + "the protocol version used on the connection. The protocol header consists of the upper case ASCII letters “AMQP” "
+                          + "followed by a protocol id of zero, followed by three unsigned bytes representing the major, minor, and revision of "
+                          + "the protocol version (currently 1 (MAJOR), 0 (MINOR), 0 (REVISION)).")
     public void successfulHeaderExchange() throws Exception
     {
         final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);

Modified: qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java?rev=1790864&r1=1790863&r2=1790864&view=diff
==============================================================================
--- qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java (original)
+++ qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java Mon Apr 10 15:42:09 2017
@@ -45,13 +45,14 @@ import org.apache.qpid.tests.protocol.v1
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.PerformativeResponse;
 import org.apache.qpid.tests.protocol.v1_0.ProtocolTestBase;
+import org.apache.qpid.tests.protocol.v1_0.SpecificationTest;
 
 
 public class OpenTest extends ProtocolTestBase
 {
-    private static final Logger LOGGER = LoggerFactory.getLogger(OpenTest.class);
-
     @Test
+    @SpecificationTest(section = "1.3.4",
+            description = "Open without mandatory fields should result in a decoding error.")
     public void emptyOpen() throws Exception
     {
         final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
@@ -72,6 +73,9 @@ public class OpenTest extends ProtocolTe
     }
 
     @Test
+    @SpecificationTest(section = "2.4.1",
+            description = "Each AMQP connection begins with an exchange of capabilities and limitations, "
+                          + "including the maximum frame size.")
     public void successfulOpen() throws Exception
     {
         final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
@@ -95,4 +99,26 @@ public class OpenTest extends ProtocolTe
             transport.assertNoMoreResponses();
         }
     }
+
+    @Test
+    @SpecificationTest(section = "2.4.1", description = "The open frame can only be sent on channel 0")
+    public void failOpenOnChannelNotZero() throws Exception
+    {
+        final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
+        try (FrameTransport transport = new FrameTransport(addr))
+        {
+            transport.doProtocolNegotiation();
+            Open open = new Open();
+            open.setContainerId("testContainerId");
+            TransportFrame transportFrame = new TransportFrame((short) 1, open);
+            transport.sendPerformative(transportFrame);
+            PerformativeResponse response = (PerformativeResponse) transport.getNextResponse();
+
+            assertThat(response, is(notNullValue()));
+            assertThat(response.getFrameBody(), is(instanceOf(Close.class)));
+            Close responseClose = (Close) response.getFrameBody();
+            assertThat(responseClose.getError(), is(notNullValue()));
+            assertThat(responseClose.getError().getCondition(), equalTo(AmqpError.NOT_ALLOWED));
+        }
+    }
 }

Modified: qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/AttachTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/AttachTest.java?rev=1790864&r1=1790863&r2=1790864&view=diff
==============================================================================
--- qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/AttachTest.java (original)
+++ qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/AttachTest.java Mon Apr 10 15:42:09 2017
@@ -42,10 +42,13 @@ import org.apache.qpid.tests.protocol.v1
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.PerformativeResponse;
 import org.apache.qpid.tests.protocol.v1_0.ProtocolTestBase;
+import org.apache.qpid.tests.protocol.v1_0.SpecificationTest;
 
 public class AttachTest extends ProtocolTestBase
 {
     @Test
+    @SpecificationTest(section = "1.3.4",
+            description = "Attach without mandatory fields should result in a decoding error.")
     public void emptyAttach() throws Exception
     {
         final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
@@ -66,6 +69,9 @@ public class AttachTest extends Protocol
     }
 
     @Test
+    @SpecificationTest(section = "2.6.3",
+            description = "Links are established and/or resumed by creating a link endpoint associated with a local terminus, "
+                          + "assigning it to an unused handle, and sending an attach frame.")
     public void successfulAttachAsSender() throws Exception
     {
         final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
@@ -98,6 +104,9 @@ public class AttachTest extends Protocol
     }
 
     @Test
+    @SpecificationTest(section = "2.6.3",
+            description = "Links are established and/or resumed by creating a link endpoint associated with a local terminus, "
+                          + "assigning it to an unused handle, and sending an attach frame.")
     public void successfulAttachAsReceiver() throws Exception
     {
         String queueName = "testQueue";

Modified: qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/session/BeginTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/session/BeginTest.java?rev=1790864&r1=1790863&r2=1790864&view=diff
==============================================================================
--- qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/session/BeginTest.java (original)
+++ qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/session/BeginTest.java Mon Apr 10 15:42:09 2017
@@ -38,10 +38,13 @@ import org.apache.qpid.tests.protocol.v1
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.PerformativeResponse;
 import org.apache.qpid.tests.protocol.v1_0.ProtocolTestBase;
+import org.apache.qpid.tests.protocol.v1_0.SpecificationTest;
 
 public class BeginTest extends ProtocolTestBase
 {
     @Test
+    @SpecificationTest(section = "1.3.4",
+            description = "Begin without mandatory fields should result in a decoding error.")
     public void emptyBegin() throws Exception
     {
         final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
@@ -63,6 +66,9 @@ public class BeginTest extends ProtocolT
     }
 
     @Test
+    @SpecificationTest(section = "2.5.1",
+            description = "Sessions are established by creating a session endpoint, assigning it to an unused channel number, "
+                          + "and sending a begin announcing the association of the session endpoint with the outgoing channel.")
     public void successfulBegin() throws Exception
     {
         final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org