Author: rgodfrey
Date: Thu Jun 11 21:11:33 2015
New Revision: 1684975

URL: http://svn.apache.org/r1684975
Log:
QPID-6585 : Allow omission of the AMQP 1.0 SASL layer for ports where External 
or Anonymous auth is allowed

Added:
    
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngineCreator_1_0_0.java
      - copied, changed from r1684834, 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngineCreator_1_0_0_SASL.java
    
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0.java
      - copied, changed from r1684851, 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/
    
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/
    
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/
    
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/
    
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/v1_0/
    
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0Test.java
   (with props)
Removed:
    
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/amqp_1_0/codec/Encoder.java
    
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java
Modified:
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/ProtocolEngineCreator.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManager.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerImpl.java
    
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ProtocolEngineCreator_0_10.java
    
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_8.java
    
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_9.java
    
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_9_1.java
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/pom.xml
    
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java
    
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngineCreator_1_0_0_SASL.java

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/ProtocolEngineCreator.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/ProtocolEngineCreator.java?rev=1684975&r1=1684974&r2=1684975&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/ProtocolEngineCreator.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/plugin/ProtocolEngineCreator.java
 Thu Jun 11 21:11:33 2015
@@ -36,5 +36,7 @@ public interface ProtocolEngineCreator e
                                            AmqpPort<?> port,
                                            Transport transport,
                                            long id, final AggregateTicker 
aggregateTicker);
+
+    byte[] getSuggestedAlternativeHeader();
 }
 

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java?rev=1684975&r1=1684974&r2=1684975&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java
 Thu Jun 11 21:11:33 2015
@@ -520,12 +520,16 @@ public class MultiVersionProtocolEngine
                             newDelegate = 
_creators[i].newProtocolEngine(_broker,
                                                                          
_network, _port, _transport, _id,
                                                                          
_aggregateTicker);
+                            if(newDelegate == null && 
_creators[i].getSuggestedAlternativeHeader() != null)
+                            {
+                                defaultSupportedReplyBytes = 
_creators[i].getSuggestedAlternativeHeader();
+                            }
                         }
                     }
 
                     //If there is a configured default reply to an unsupported 
version initiation,
                     //then save the associated reply header bytes when we 
encounter them
-                    if(_defaultSupportedReply != null && 
_creators[i].getVersion() == _defaultSupportedReply)
+                    if(defaultSupportedReplyBytes == null && 
_defaultSupportedReply != null && _creators[i].getVersion() == 
_defaultSupportedReply)
                     {
                         defaultSupportedReplyBytes = 
_creators[i].getHeaderIdentifier();
                     }

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManager.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManager.java?rev=1684975&r1=1684974&r2=1684975&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManager.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManager.java
 Thu Jun 11 21:11:33 2015
@@ -40,7 +40,7 @@ import org.apache.qpid.server.security.a
 public class AnonymousAuthenticationManager extends 
AbstractAuthenticationManager<AnonymousAuthenticationManager>
 {
     public static final String PROVIDER_TYPE = "Anonymous";
-    private static final String ANONYMOUS = "ANONYMOUS";
+    public static final String MECHANISM_NAME = "ANONYMOUS";
 
     public static final String ANONYMOUS_USERNAME = "ANONYMOUS";
 
@@ -63,13 +63,13 @@ public class AnonymousAuthenticationMana
     @Override
     public List<String> getMechanisms()
     {
-        return Collections.singletonList(ANONYMOUS);
+        return Collections.singletonList(MECHANISM_NAME);
     }
 
     @Override
     public SaslServer createSaslServer(String mechanism, String localFQDN, 
Principal externalPrincipal) throws SaslException
     {
-        if(ANONYMOUS.equals(mechanism))
+        if(MECHANISM_NAME.equals(mechanism))
         {
             return new AnonymousSaslServer();
         }

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerImpl.java?rev=1684975&r1=1684974&r2=1684975&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerImpl.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerImpl.java
 Thu Jun 11 21:11:33 2015
@@ -28,9 +28,7 @@ import javax.security.sasl.SaslServer;
 
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ManagedAttributeField;
-import org.apache.qpid.server.model.ManagedObject;
 import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
-import 
org.apache.qpid.server.model.PreferencesSupportingAuthenticationProvider;
 import org.apache.qpid.server.security.auth.AuthenticationResult;
 import org.apache.qpid.server.security.auth.UsernamePrincipal;
 import org.apache.qpid.server.security.auth.sasl.external.ExternalSaslServer;
@@ -38,7 +36,7 @@ import org.apache.qpid.server.security.a
 public class ExternalAuthenticationManagerImpl extends 
AbstractAuthenticationManager<ExternalAuthenticationManagerImpl>
         implements 
ExternalAuthenticationManager<ExternalAuthenticationManagerImpl>
 {
-    private static final String EXTERNAL = "EXTERNAL";
+    public static final String MECHANISM_NAME = "EXTERNAL";
 
     @ManagedAttributeField
     private boolean _useFullDN;
@@ -58,13 +56,13 @@ public class ExternalAuthenticationManag
     @Override
     public List<String> getMechanisms()
     {
-        return Collections.singletonList(EXTERNAL);
+        return Collections.singletonList(MECHANISM_NAME);
     }
 
     @Override
     public SaslServer createSaslServer(String mechanism, String localFQDN, 
Principal externalPrincipal) throws SaslException
     {
-        if(EXTERNAL.equals(mechanism))
+        if(MECHANISM_NAME.equals(mechanism))
         {
             return new ExternalSaslServer(externalPrincipal, _useFullDN);
         }

Modified: 
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ProtocolEngineCreator_0_10.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ProtocolEngineCreator_0_10.java?rev=1684975&r1=1684974&r2=1684975&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ProtocolEngineCreator_0_10.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ProtocolEngineCreator_0_10.java
 Thu Jun 11 21:11:33 2015
@@ -93,6 +93,11 @@ public class ProtocolEngineCreator_0_10
         return protocolEngine;
     }
 
+    @Override
+    public byte[] getSuggestedAlternativeHeader()
+    {
+        return null;
+    }
 
     private static ProtocolEngineCreator INSTANCE = new 
ProtocolEngineCreator_0_10();
 

Modified: 
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_8.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_8.java?rev=1684975&r1=1684974&r2=1684975&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_8.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_8.java
 Thu Jun 11 21:11:33 2015
@@ -68,6 +68,12 @@ public class ProtocolEngineCreator_0_8 i
         return new AMQProtocolEngine(broker, network, id, port, transport, 
aggregateTicker);
     }
 
+    @Override
+    public byte[] getSuggestedAlternativeHeader()
+    {
+        return null;
+    }
+
     private static ProtocolEngineCreator INSTANCE = new 
ProtocolEngineCreator_0_8();
 
     public static ProtocolEngineCreator getInstance()

Modified: 
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_9.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_9.java?rev=1684975&r1=1684974&r2=1684975&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_9.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_9.java
 Thu Jun 11 21:11:33 2015
@@ -68,6 +68,12 @@ public class ProtocolEngineCreator_0_9 i
         return new AMQProtocolEngine(broker, network, id, port, transport, 
aggregateTicker);
     }
 
+    @Override
+    public byte[] getSuggestedAlternativeHeader()
+    {
+        return null;
+    }
+
     private static ProtocolEngineCreator INSTANCE = new 
ProtocolEngineCreator_0_9();
 
     public static ProtocolEngineCreator getInstance()

Modified: 
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_9_1.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_9_1.java?rev=1684975&r1=1684974&r2=1684975&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_9_1.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/ProtocolEngineCreator_0_9_1.java
 Thu Jun 11 21:11:33 2015
@@ -69,6 +69,11 @@ public class ProtocolEngineCreator_0_9_1
         return new AMQProtocolEngine(broker, network, id, port, transport, 
aggregateTicker);
     }
 
+    @Override
+    public byte[] getSuggestedAlternativeHeader()
+    {
+        return null;
+    }
 
     private static ProtocolEngineCreator INSTANCE = new 
ProtocolEngineCreator_0_9_1();
 

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/pom.xml
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/pom.xml?rev=1684975&r1=1684974&r2=1684975&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/pom.xml (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/pom.xml Thu Jun 11 
21:11:33 2015
@@ -50,6 +50,21 @@
       <version>${logback-version}</version>
     </dependency>
 
+    <!-- test dependencies -->
+    <dependency>
+      <groupId>org.apache.qpid</groupId>
+      <artifactId>qpid-test-utils</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.qpid</groupId>
+      <artifactId>qpid-broker-core</artifactId>
+      <version>${project.version}</version>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>

Modified: 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java?rev=1684975&r1=1684974&r2=1684975&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java
 Thu Jun 11 21:11:33 2015
@@ -68,7 +68,7 @@ public class Connection_1_0 implements C
     private final AmqpPort<?> _port;
     private final Broker<?> _broker;
     private final SubjectCreator _subjectCreator;
-    private final ProtocolEngine_1_0_0_SASL _protocolEngine;
+    private final ProtocolEngine_1_0_0 _protocolEngine;
     private VirtualHostImpl _vhost;
     private final Transport _transport;
     private final ConnectionEndpoint _conn;
@@ -118,7 +118,7 @@ public class Connection_1_0 implements C
                           AmqpPort<?> port,
                           Transport transport,
                           final SubjectCreator subjectCreator,
-                          final ProtocolEngine_1_0_0_SASL protocolEngine)
+                          final ProtocolEngine_1_0_0 protocolEngine)
     {
         _protocolEngine = protocolEngine;
         _broker = broker;
@@ -154,13 +154,34 @@ public class Connection_1_0 implements C
         }
         else
         {
-            _vhost.getConnectionRegistry().registerConnection(this);
-            Subject authSubject = 
_subjectCreator.createSubjectWithGroups(_conn.getUser());
-            _subject.getPrincipals().addAll(authSubject.getPrincipals());
-            
_subject.getPublicCredentials().addAll(authSubject.getPublicCredentials());
-            
_subject.getPrivateCredentials().addAll(authSubject.getPrivateCredentials());
+            final Principal user = _conn.getUser();
+            if(user != null)
+            {
+                setUserPrincipal(user);
+            }
+            
if(AuthenticatedPrincipal.getOptionalAuthenticatedPrincipalFromSubject(_subject)
 == null)
+            {
+                final Error err = new Error();
+                err.setCondition(AmqpError.NOT_ALLOWED);
+                err.setDescription("Connection has not been authenticated");
+                _conn.close(err);
+                _closedOnOpen = true;
+            }
+            else
+            {
+                _vhost.getConnectionRegistry().registerConnection(this);
+            }
         }
     }
+
+    void setUserPrincipal(final Principal user)
+    {
+        Subject authSubject = _subjectCreator.createSubjectWithGroups(user);
+        _subject.getPrincipals().addAll(authSubject.getPrincipals());
+        
_subject.getPublicCredentials().addAll(authSubject.getPublicCredentials());
+        
_subject.getPrivateCredentials().addAll(authSubject.getPrivateCredentials());
+    }
+
     public void remoteSessionCreation(SessionEndpoint endpoint)
     {
         if(!_closedOnOpen)

Copied: 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngineCreator_1_0_0.java
 (from r1684834, 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngineCreator_1_0_0_SASL.java)
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngineCreator_1_0_0.java?p2=qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngineCreator_1_0_0.java&p1=qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngineCreator_1_0_0_SASL.java&r1=1684834&r2=1684975&rev=1684975&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngineCreator_1_0_0_SASL.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngineCreator_1_0_0.java
 Thu Jun 11 21:11:33 2015
@@ -20,31 +20,42 @@
  */
 package org.apache.qpid.server.protocol.v1_0;
 
-import org.apache.qpid.server.protocol.ServerProtocolEngine;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.qpid.server.model.AuthenticationProvider;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.Protocol;
 import org.apache.qpid.server.model.Transport;
 import org.apache.qpid.server.model.port.AmqpPort;
 import org.apache.qpid.server.plugin.PluggableService;
 import org.apache.qpid.server.plugin.ProtocolEngineCreator;
+import org.apache.qpid.server.protocol.ServerProtocolEngine;
+import 
org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManager;
+import 
org.apache.qpid.server.security.auth.manager.ExternalAuthenticationManagerImpl;
 import org.apache.qpid.transport.network.AggregateTicker;
 import org.apache.qpid.transport.network.NetworkConnection;
 
 @PluggableService
-public class ProtocolEngineCreator_1_0_0_SASL implements ProtocolEngineCreator
+public class ProtocolEngineCreator_1_0_0 implements ProtocolEngineCreator
 {
-    private static final byte[] AMQP_SASL_1_0_0_HEADER =
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(ProtocolEngineCreator_1_0_0.class);
+
+    private static final byte[] AMQP_1_0_0_HEADER =
             new byte[] { (byte) 'A',
                          (byte) 'M',
                          (byte) 'Q',
                          (byte) 'P',
-                         (byte) 3,
+                         (byte) 0,
                          (byte) 1,
                          (byte) 0,
                          (byte) 0
             };
 
-    public ProtocolEngineCreator_1_0_0_SASL()
+    public ProtocolEngineCreator_1_0_0()
     {
     }
 
@@ -56,7 +67,7 @@ public class ProtocolEngineCreator_1_0_0
 
     public byte[] getHeaderIdentifier()
     {
-        return AMQP_SASL_1_0_0_HEADER;
+        return AMQP_1_0_0_HEADER;
     }
 
     public ServerProtocolEngine newProtocolEngine(Broker<?> broker,
@@ -65,10 +76,37 @@ public class ProtocolEngineCreator_1_0_0
                                                   Transport transport,
                                                   long id, final 
AggregateTicker aggregateTicker)
     {
-        return new ProtocolEngine_1_0_0_SASL(network, broker, id, port, 
transport, aggregateTicker);
+        final AuthenticationProvider<?> authenticationProvider = 
port.getAuthenticationProvider();
+
+        Set<String> supportedMechanisms = new 
HashSet<>(authenticationProvider.getMechanisms());
+        
supportedMechanisms.removeAll(authenticationProvider.getDisabledMechanisms());
+        if(!transport.isSecure())
+        {
+            
supportedMechanisms.removeAll(authenticationProvider.getSecureOnlyMechanisms());
+        }
+
+
+        
if(supportedMechanisms.contains(AnonymousAuthenticationManager.MECHANISM_NAME)
+                || 
(supportedMechanisms.contains(ExternalAuthenticationManagerImpl.MECHANISM_NAME) 
&& network.getPeerPrincipal() != null))
+        {
+            return new ProtocolEngine_1_0_0(network, broker, id, port, 
transport, aggregateTicker, false);
+        }
+        else
+        {
+            LOGGER.info(
+                    "Attempt to connect using AMQP 1.0 without using SASL 
authentication on a port which does not support ANONYMOUS or EXTERNAL by "
+                    + network.getRemoteAddress());
+            return null;
+        }
+    }
+
+    @Override
+    public byte[] getSuggestedAlternativeHeader()
+    {
+        return 
ProtocolEngineCreator_1_0_0_SASL.getInstance().getHeaderIdentifier();
     }
 
-    private static ProtocolEngineCreator INSTANCE = new 
ProtocolEngineCreator_1_0_0_SASL();
+    private static ProtocolEngineCreator INSTANCE = new 
ProtocolEngineCreator_1_0_0();
 
     public static ProtocolEngineCreator getInstance()
     {

Modified: 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngineCreator_1_0_0_SASL.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngineCreator_1_0_0_SASL.java?rev=1684975&r1=1684974&r2=1684975&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngineCreator_1_0_0_SASL.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngineCreator_1_0_0_SASL.java
 Thu Jun 11 21:11:33 2015
@@ -65,7 +65,14 @@ public class ProtocolEngineCreator_1_0_0
                                                   Transport transport,
                                                   long id, final 
AggregateTicker aggregateTicker)
     {
-        return new ProtocolEngine_1_0_0_SASL(network, broker, id, port, 
transport, aggregateTicker);
+        return new ProtocolEngine_1_0_0(network, broker, id, port, transport, 
aggregateTicker, true);
+    }
+
+
+    @Override
+    public byte[] getSuggestedAlternativeHeader()
+    {
+        return null;
     }
 
     private static ProtocolEngineCreator INSTANCE = new 
ProtocolEngineCreator_1_0_0_SASL();

Copied: 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0.java
 (from r1684851, 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java)
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0.java?p2=qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0.java&p1=qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java&r1=1684851&r2=1684975&rev=1684975&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0.java
 Thu Jun 11 21:11:33 2015
@@ -40,7 +40,9 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.qpid.amqp_1_0.codec.FrameWriter;
 import org.apache.qpid.amqp_1_0.codec.ProtocolHandler;
+import org.apache.qpid.amqp_1_0.codec.ProtocolHeaderHandler;
 import org.apache.qpid.amqp_1_0.framing.AMQFrame;
+import org.apache.qpid.amqp_1_0.framing.FrameHandler;
 import org.apache.qpid.amqp_1_0.framing.OversizeFrameException;
 import org.apache.qpid.amqp_1_0.framing.SASLFrameHandler;
 import org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint;
@@ -61,19 +63,23 @@ import org.apache.qpid.server.model.Tran
 import org.apache.qpid.server.model.port.AmqpPort;
 import org.apache.qpid.server.protocol.AMQSessionModel;
 import org.apache.qpid.server.security.SubjectCreator;
+import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
 import org.apache.qpid.server.security.auth.UsernamePrincipal;
+import 
org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManager;
+import 
org.apache.qpid.server.security.auth.manager.ExternalAuthenticationManagerImpl;
 import org.apache.qpid.server.util.Action;
 import org.apache.qpid.transport.ByteBufferSender;
 import org.apache.qpid.transport.network.AggregateTicker;
 import org.apache.qpid.transport.network.NetworkConnection;
 
-public class ProtocolEngine_1_0_0_SASL implements ServerProtocolEngine, 
FrameOutputHandler
+public class ProtocolEngine_1_0_0 implements ServerProtocolEngine, 
FrameOutputHandler
 {
 
     public static final long CLOSE_REPONSE_TIMEOUT = 10000l;
     private final AmqpPort<?> _port;
     private final Transport _transport;
     private final AggregateTicker _aggregateTicker;
+    private final boolean _useSASL;
     private long _readBytes;
     private long _writtenBytes;
 
@@ -87,7 +93,7 @@ public class ProtocolEngine_1_0_0_SASL i
     private final AtomicReference<Action<ServerProtocolEngine>> _workListener 
= new AtomicReference<>();
 
 
-    private static final ByteBuffer HEADER =
+    private static final ByteBuffer SASL_LAYER_HEADER =
            ByteBuffer.wrap(new byte[]
                    {
                        (byte)'A',
@@ -100,7 +106,7 @@ public class ProtocolEngine_1_0_0_SASL i
                        (byte) 0
                    });
 
-    private static final ByteBuffer PROTOCOL_HEADER =
+    private static final ByteBuffer AMQP_LAYER_HEADER =
         ByteBuffer.wrap(new byte[]
                 {
                     (byte)'A',
@@ -121,7 +127,6 @@ public class ProtocolEngine_1_0_0_SASL i
     private byte _major;
     private byte _minor;
     private byte _revision;
-    private PrintWriter _out;
     private NetworkConnection _network;
     private ByteBufferSender _sender;
     private Connection_1_0 _connection;
@@ -147,18 +152,20 @@ public class ProtocolEngine_1_0_0_SASL i
 
 
 
-    public ProtocolEngine_1_0_0_SASL(final NetworkConnection networkDriver,
-                                     final Broker<?> broker,
-                                     long id,
-                                     AmqpPort<?> port,
-                                     Transport transport,
-                                     final AggregateTicker aggregateTicker)
+    public ProtocolEngine_1_0_0(final NetworkConnection networkDriver,
+                                final Broker<?> broker,
+                                long id,
+                                AmqpPort<?> port,
+                                Transport transport,
+                                final AggregateTicker aggregateTicker,
+                                final boolean useSASL)
     {
         _connectionId = id;
         _broker = broker;
         _port = port;
         _transport = transport;
         _aggregateTicker = aggregateTicker;
+        _useSASL = useSASL;
         if(networkDriver != null)
         {
             setNetworkConnection(networkDriver, networkDriver.getSender());
@@ -247,7 +254,7 @@ public class ProtocolEngine_1_0_0_SASL i
         Container container = new Container(_broker.getId().toString());
 
         SubjectCreator subjectCreator = 
_port.getAuthenticationProvider().getSubjectCreator(_transport.isSecure());
-        _endpoint = new ConnectionEndpoint(container, 
asSaslServerProvider(subjectCreator));
+        _endpoint = new ConnectionEndpoint(container, _useSASL ? 
asSaslServerProvider(subjectCreator) : null);
         _endpoint.setLogger(new ConnectionEndpoint.FrameReceiptLogger()
         {
             @Override
@@ -275,32 +282,58 @@ public class ProtocolEngine_1_0_0_SASL i
 
         _endpoint.setConnectionEventListener(_connection);
         _endpoint.setFrameOutputHandler(this);
-        _endpoint.setSaslFrameOutput(this);
-
-        _endpoint.setOnSaslComplete(new Runnable()
+        ByteBuffer headerResponse;
+        final List<String> mechanisms = subjectCreator.getMechanisms();
+        if(_useSASL)
         {
-            public void run()
+            _endpoint.setSaslFrameOutput(this);
+
+            _endpoint.setOnSaslComplete(new Runnable()
             {
-                if (_endpoint.isAuthenticated())
+                public void run()
                 {
-                    _sender.send(PROTOCOL_HEADER.duplicate());
-                    _sender.flush();
-                }
-                else
-                {
-                    _network.close();
+                    if (_endpoint.isAuthenticated())
+                    {
+                        _sender.send(AMQP_LAYER_HEADER.duplicate());
+                        _sender.flush();
+                    }
+                    else
+                    {
+                        _network.close();
+                    }
                 }
+            });
+            _frameHandler = new SASLFrameHandler(_endpoint);
+            headerResponse = SASL_LAYER_HEADER;
+        }
+        else
+        {
+            
if(mechanisms.contains(ExternalAuthenticationManagerImpl.MECHANISM_NAME)
+               && _network.getPeerPrincipal() != null)
+            {
+                _connection.setUserPrincipal(new 
AuthenticatedPrincipal(_network.getPeerPrincipal()));
             }
-        });
+            else 
if(mechanisms.contains(AnonymousAuthenticationManager.MECHANISM_NAME))
+            {
+                _connection.setUserPrincipal(new 
AuthenticatedPrincipal(AnonymousAuthenticationManager.ANONYMOUS_PRINCIPAL));
+            }
+            else
+            {
+                _network.close();
+            }
+
+            _frameHandler = new FrameHandler(_endpoint);
+            headerResponse = AMQP_LAYER_HEADER;
+        }
         _frameWriter =  new FrameWriter(_endpoint.getDescribedTypeRegistry());
-        _frameHandler = new SASLFrameHandler(_endpoint);
 
-        _sender.send(HEADER.duplicate());
+        _sender.send(headerResponse.duplicate());
         _sender.flush();
 
-        List<String> mechanisms = subjectCreator.getMechanisms();
-        _endpoint.initiateSASL(mechanisms.toArray(new 
String[mechanisms.size()]));
-
+        if(_useSASL)
+        {
+            _endpoint.initiateSASL(mechanisms.toArray(new 
String[mechanisms.size()]));
+        }
 
     }
 
@@ -317,7 +350,7 @@ public class ProtocolEngine_1_0_0_SASL i
             @Override
             public Principal getAuthenticatedPrincipal(SaslServer server)
             {
-                return new UsernamePrincipal(server.getAuthorizationID());
+                return new AuthenticatedPrincipal(new 
UsernamePrincipal(server.getAuthorizationID()));
             }
         };
     }
@@ -562,11 +595,6 @@ public class ProtocolEngine_1_0_0_SASL i
 
     }
 
-    public void setLogOutput(final PrintWriter out)
-    {
-        _out = out;
-    }
-
     public long getConnectionId()
     {
         return _connectionId;

Added: 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0Test.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0Test.java?rev=1684975&view=auto
==============================================================================
--- 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0Test.java
 (added)
+++ 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0Test.java
 Thu Jun 11 21:11:33 2015
@@ -0,0 +1,290 @@
+/*
+ *
+ * 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.server.protocol.v1_0;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyBoolean;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.nio.ByteBuffer;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.security.auth.Subject;
+import javax.security.sasl.Sasl;
+
+import org.mockito.ArgumentCaptor;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+import org.apache.qpid.amqp_1_0.codec.FrameWriter;
+import org.apache.qpid.amqp_1_0.framing.AMQFrame;
+import org.apache.qpid.amqp_1_0.framing.SASLFrame;
+import org.apache.qpid.amqp_1_0.type.Symbol;
+import org.apache.qpid.amqp_1_0.type.codec.AMQPDescribedTypeRegistry;
+import org.apache.qpid.amqp_1_0.type.security.SaslInit;
+import org.apache.qpid.amqp_1_0.type.transport.Open;
+import org.apache.qpid.server.configuration.updater.CurrentThreadTaskExecutor;
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
+import org.apache.qpid.server.configuration.updater.TaskExecutorImpl;
+import org.apache.qpid.server.connection.ConnectionRegistry;
+import org.apache.qpid.server.connection.IConnectionRegistry;
+import org.apache.qpid.server.model.AuthenticationProvider;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.BrokerModel;
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.Transport;
+import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.port.AmqpPort;
+import org.apache.qpid.server.protocol.AMQConnectionModel;
+import org.apache.qpid.server.security.SubjectCreator;
+import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
+import 
org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManager;
+import 
org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManagerFactory;
+import 
org.apache.qpid.server.security.auth.manager.ExternalAuthenticationManagerImpl;
+import org.apache.qpid.server.virtualhost.VirtualHostImpl;
+import org.apache.qpid.test.utils.QpidTestCase;
+import org.apache.qpid.transport.ByteBufferSender;
+import org.apache.qpid.transport.network.AggregateTicker;
+import org.apache.qpid.transport.network.NetworkConnection;
+
+public class ProtocolEngine_1_0_0Test extends QpidTestCase
+{
+    private ProtocolEngine_1_0_0 _protocolEngine_1_0_0;
+    private NetworkConnection _networkConnection;
+    private Broker<?> _broker;
+    private AmqpPort<?> _port;
+    private SubjectCreator _subjectCreator;
+    private AuthenticationProvider _authenticationProvider;
+    private List<ByteBuffer> _sentBuffers;
+    private FrameWriter _frameWriter;
+    private IConnectionRegistry _connectionRegistry;
+    private Connection_1_0 _connection;
+
+    @Override
+    public void setUp() throws Exception
+    {
+        super.setUp();
+        _networkConnection = mock(NetworkConnection.class);
+        _broker = mock(Broker.class);
+        when(_broker.getModel()).thenReturn(BrokerModel.getInstance());
+        final TaskExecutor taskExecutor = new TaskExecutorImpl();
+        taskExecutor.start();
+        when(_broker.getChildExecutor()).thenReturn(taskExecutor);
+        when(_broker.getTaskExecutor()).thenReturn(taskExecutor);
+        when(_broker.getId()).thenReturn(UUID.randomUUID());
+        _port = mock(AmqpPort.class);
+        _subjectCreator = mock(SubjectCreator.class);
+        _authenticationProvider = mock(AuthenticationProvider.class);
+        
when(_port.getAuthenticationProvider()).thenReturn(_authenticationProvider);
+        VirtualHostImpl virtualHost = mock(VirtualHostImpl.class);
+        _connectionRegistry = mock(IConnectionRegistry.class);
+        final ArgumentCaptor<AMQConnectionModel> connectionCaptor = 
ArgumentCaptor.forClass(AMQConnectionModel.class);
+        doAnswer(new Answer()
+        {
+            @Override
+            public Object answer(final InvocationOnMock invocation) throws 
Throwable
+            {
+                _connection = (Connection_1_0) connectionCaptor.getValue();
+                return null;
+            }
+        
}).when(_connectionRegistry).registerConnection(connectionCaptor.capture());
+        
when(virtualHost.getConnectionRegistry()).thenReturn(_connectionRegistry);
+        when(_port.getVirtualHost(anyString())).thenReturn(virtualHost);
+        
when(_authenticationProvider.getSubjectCreator(anyBoolean())).thenReturn(_subjectCreator);
+
+        final ArgumentCaptor<Principal> userCaptor = 
ArgumentCaptor.forClass(Principal.class);
+        
when(_subjectCreator.createSubjectWithGroups(userCaptor.capture())).then(new 
Answer<Subject>()
+        {
+            @Override
+            public Subject answer(final InvocationOnMock invocation) throws 
Throwable
+            {
+                Subject subject = new Subject();
+                subject.getPrincipals().add(userCaptor.getValue());
+                return subject;
+            }
+        });
+
+        final ByteBufferSender sender = mock(ByteBufferSender.class);
+        when(_networkConnection.getSender()).thenReturn(sender);
+
+        final ArgumentCaptor<ByteBuffer> byteBufferCaptor = 
ArgumentCaptor.forClass(ByteBuffer.class);
+
+        doAnswer(new Answer()
+        {
+            @Override
+            public Object answer(final InvocationOnMock invocation) throws 
Throwable
+            {
+                _sentBuffers.add(byteBufferCaptor.getValue());
+                return null;
+            }
+        }).when(sender).send(byteBufferCaptor.capture());
+        _sentBuffers = new ArrayList<>();
+
+        AMQPDescribedTypeRegistry registry = 
AMQPDescribedTypeRegistry.newInstance().registerTransportLayer()
+                .registerMessagingLayer()
+                .registerTransactionLayer()
+                .registerSecurityLayer();
+
+        _frameWriter = new FrameWriter(registry);
+    }
+
+    public void testProtocolEngineWithNoSaslNonTLSandAnon() throws Exception
+    {
+        allowMechanisms(AnonymousAuthenticationManager.MECHANISM_NAME);
+        final boolean useSASL = false;
+
+        createEngine(useSASL, Transport.TCP);
+
+        
_protocolEngine_1_0_0.received(ByteBuffer.wrap(ProtocolEngineCreator_1_0_0.getInstance().getHeaderIdentifier()));
+
+        Open open = new Open();
+        _frameWriter.setValue(AMQFrame.createAMQFrame((short)0,open));
+        ByteBuffer buf = ByteBuffer.allocate(64*1024);
+        _frameWriter.writeToBuffer(buf);
+        buf.flip();
+        _protocolEngine_1_0_0.received(buf);
+
+        
verify(_connectionRegistry).registerConnection(any(AMQConnectionModel.class));
+        AuthenticatedPrincipal principal = (AuthenticatedPrincipal) 
_connection.getAuthorizedPrincipal();
+        assertNotNull(principal);
+        assertEquals(principal, new 
AuthenticatedPrincipal(AnonymousAuthenticationManager.ANONYMOUS_PRINCIPAL));
+    }
+
+
+    public void testProtocolEngineWithNoSaslNonTLSandNoAnon() throws Exception
+    {
+        allowMechanisms("foo");
+        final boolean useSASL = false;
+
+        createEngine(useSASL, Transport.TCP);
+
+        
_protocolEngine_1_0_0.received(ByteBuffer.wrap(ProtocolEngineCreator_1_0_0.getInstance().getHeaderIdentifier()));
+
+        Open open = new Open();
+        _frameWriter.setValue(AMQFrame.createAMQFrame((short)0,open));
+        ByteBuffer buf = ByteBuffer.allocate(64*1024);
+        _frameWriter.writeToBuffer(buf);
+        buf.flip();
+        _protocolEngine_1_0_0.received(buf);
+
+        verify(_connectionRegistry, 
never()).registerConnection(any(AMQConnectionModel.class));
+        verify(_networkConnection).close();
+    }
+
+
+    public void testProtocolEngineWithNoSaslTLSandExternal() throws Exception
+    {
+        final Principal principal = new Principal()
+        {
+            @Override
+            public String getName()
+            {
+                return "test";
+            }
+        };
+        when(_networkConnection.getPeerPrincipal()).thenReturn(principal);
+
+        allowMechanisms(ExternalAuthenticationManagerImpl.MECHANISM_NAME);
+        final boolean useSASL = false;
+
+        createEngine(useSASL, Transport.SSL);
+        
_protocolEngine_1_0_0.received(ByteBuffer.wrap(ProtocolEngineCreator_1_0_0.getInstance().getHeaderIdentifier()));
+
+        Open open = new Open();
+        _frameWriter.setValue(AMQFrame.createAMQFrame((short)0,open));
+        ByteBuffer buf = ByteBuffer.allocate(64*1024);
+        _frameWriter.writeToBuffer(buf);
+        buf.flip();
+        _protocolEngine_1_0_0.received(buf);
+
+        
verify(_connectionRegistry).registerConnection(any(AMQConnectionModel.class));
+        AuthenticatedPrincipal authPrincipal = (AuthenticatedPrincipal) 
_connection.getAuthorizedPrincipal();
+        assertNotNull(authPrincipal);
+        assertEquals(authPrincipal, new AuthenticatedPrincipal(principal));
+    }
+
+    public void testProtocolEngineWithSaslNonTLSandAnon() throws Exception
+    {
+        final Map<String, Object> attrs = new HashMap<>();
+        attrs.put(ConfiguredObject.NAME, getTestName());
+        final AuthenticationProvider anonymousAuthenticationManager =
+                (new AnonymousAuthenticationManagerFactory())
+                        .create(
+                                null,
+                                attrs,
+                                _broker);
+        
when(_port.getAuthenticationProvider()).thenReturn(anonymousAuthenticationManager);
+        allowMechanisms(AnonymousAuthenticationManager.MECHANISM_NAME);
+        final boolean useSASL = true;
+
+        createEngine(useSASL, Transport.TCP);
+
+        
_protocolEngine_1_0_0.received(ByteBuffer.wrap(ProtocolEngineCreator_1_0_0_SASL.getInstance().getHeaderIdentifier()));
+
+        SaslInit init = new SaslInit();
+        init.setMechanism(Symbol.valueOf("ANONYMOUS"));
+        _frameWriter.setValue(new SASLFrame(init));
+        ByteBuffer buf = ByteBuffer.allocate(64*1024);
+        _frameWriter.writeToBuffer(buf);
+
+        buf.flip();
+        _protocolEngine_1_0_0.received(buf);
+
+        
_protocolEngine_1_0_0.received(ByteBuffer.wrap(ProtocolEngineCreator_1_0_0.getInstance().getHeaderIdentifier()));
+
+        Open open = new Open();
+        _frameWriter.setValue(AMQFrame.createAMQFrame((short)0,open));
+        buf = ByteBuffer.allocate(64*1024);
+        _frameWriter.writeToBuffer(buf);
+        buf.flip();
+        _protocolEngine_1_0_0.received(buf);
+
+        
verify(_connectionRegistry).registerConnection(any(AMQConnectionModel.class));
+        AuthenticatedPrincipal principal = (AuthenticatedPrincipal) 
_connection.getAuthorizedPrincipal();
+        assertNotNull(principal);
+        assertEquals(principal, new 
AuthenticatedPrincipal(AnonymousAuthenticationManager.ANONYMOUS_PRINCIPAL));
+    }
+
+
+    private void createEngine(final boolean useSASL, Transport transport)
+    {
+        _protocolEngine_1_0_0 = new ProtocolEngine_1_0_0(_networkConnection,
+                                                         _broker, 1, _port, 
transport, new AggregateTicker(),
+                                                         useSASL);
+    }
+
+    private void allowMechanisms(String... mechanisms)
+    {
+        
when(_subjectCreator.getMechanisms()).thenReturn(Arrays.asList(mechanisms));
+    }
+}

Propchange: 
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0Test.java
------------------------------------------------------------------------------
    svn:eol-style = native



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to