Author: mlovett
Date: Mon Jan 29 09:14:36 2007
New Revision: 501114

URL: http://svn.apache.org/viewvc?view=rev&rev=501114
Log:
Add a new test which runs the main scenarios with unit-test security enabled, 
and some related bug fixes

Added:
    
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/security/SecurityScenariosTest.java
   (with props)
Modified:
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/polling/PollingManager.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/WSRMMessageSender.java
    
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/scenarios/RMScenariosTest.java
    
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/security/UnitTestSecurityManager.java

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java?view=diff&rev=501114&r1=501113&r2=501114
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
 Mon Jan 29 09:14:36 2007
@@ -92,11 +92,12 @@
                                        // handlers
                }
                
-               StorageManager storageManager = 
SandeshaUtil.getSandeshaStorageManager(context, context.getAxisConfiguration());
+               if (log.isDebugEnabled()) log.debug("SandeshaInHandler::invoke 
Continuing beyond basic checks");
 
                Transaction transaction = null;
 
                try {
+                       StorageManager storageManager = 
SandeshaUtil.getSandeshaStorageManager(context, context.getAxisConfiguration());
                        transaction = storageManager.getTransaction();
 
                        AxisService axisService = msgCtx.getAxisService();
@@ -130,8 +131,7 @@
                        returnValue = 
seqProcessor.processSequenceHeader(rmMsgCtx);
 
                } catch (Exception e) {
-                       if (log.isDebugEnabled())
-                               log.debug("Exception caught during 
processInMessage", e);
+                       if (log.isDebugEnabled()) 
log.debug("SandeshaInHandler::invoke Exception caught during processInMessage", 
e);
                        // message should not be sent in a exception situation.
                        msgCtx.pause();
                        returnValue = InvocationResponse.SUSPEND;
@@ -150,6 +150,7 @@
                        throw new AxisFault(message, e);
                } 
                finally {
+                       if (log.isDebugEnabled()) 
log.debug("SandeshaInHandler::invoke Doing final processing");
                        if (transaction != null) {
                                try {
                                        transaction.commit();

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?view=diff&rev=501114&r1=501113&r2=501114
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
 Mon Jan 29 09:14:36 2007
@@ -666,6 +666,9 @@
                        
rmMsg.setMessagePart(Sandesha2Constants.MessageParts.ACK_REQUEST, ackRequested);
                }
 
+               // Now that we have added the headers to the message, make sure 
that we secure it with
+               // the correct token.
+               RMMsgCreator.secureOutboundMessage(rmsBean, msg);
 
                rmMsg.addSOAPEnvelope();
 

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/polling/PollingManager.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/polling/PollingManager.java?view=diff&rev=501114&r1=501113&r2=501114
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/polling/PollingManager.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/polling/PollingManager.java
 Mon Jan 29 09:14:36 2007
@@ -65,7 +65,7 @@
        
        private final int POLLING_MANAGER_WAIT_TIME = 3000;
        
-       public void run() {
+       private void internalRun() {
                while (isPoll()) {
                        Transaction t = null;
                        try {
@@ -96,6 +96,14 @@
                }
        }
        
+       public void run() {
+               try {
+                       internalRun();
+               } catch(Exception e) {
+                       if(log.isDebugEnabled()) log.debug("PollingManager 
thread ending", e);
+               }
+       }
+       
        private void pollRMSSide() throws AxisFault {
                if(log.isDebugEnabled()) log.debug("Enter: 
PollingManager::pollRMSSide");
                
@@ -171,7 +179,7 @@
                MessageContext referenceMessage = 
storageManager.retrieveMessageContext(referenceMsgKey,configurationContext);
                RMMsgContext referenceRMMessage = 
MsgInitializer.initializeMessage(referenceMessage);
                RMMsgContext makeConnectionRMMessage = 
RMMsgCreator.createMakeConnectionMessage(referenceRMMessage,
-                               sequenceId, WSRMAnonReplyToURI, storageManager);
+                               rmBean, sequenceId, WSRMAnonReplyToURI, 
storageManager);
                
                
makeConnectionRMMessage.setProperty(MessageContext.TRANSPORT_IN,null);
                //storing the MakeConnection message.

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java?view=diff&rev=501114&r1=501113&r2=501114
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
 Mon Jan 29 09:14:36 2007
@@ -121,7 +121,8 @@
 
                                // Adding the ack(s) to the application message
                                boolean acks = false;
-                               SOAPHeader appMsgHeaders = 
rmMessageContext.getMessageContext().getEnvelope().getHeader();
+                               MessageContext messageContext = 
rmMessageContext.getMessageContext();
+                               SOAPHeader appMsgHeaders = 
messageContext.getEnvelope().getHeader();
                                
                                SOAPHeader headers = 
ackMsgContext.getEnvelope().getHeader();
                                if(headers != null) {
@@ -137,6 +138,12 @@
                                                        
                                                        
sequenceAcknowledgement.toOMElement(appMsgHeaders);
                                                        acks = true;
+                                                       
+                                                       // Make sure that the 
outbound message is secured with the token that
+                                                       // matches the ack.
+                                                       String seqId = 
sequenceAcknowledgement.getIdentifier().getIdentifier();
+                                                       RMDBean rmdBean = 
SandeshaUtil.getRMDBeanFromSequenceId(storageManager, seqId);
+                                                       
RMMsgCreator.secureOutboundMessage(rmdBean, messageContext);
                                                }
                                        }
                                }

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java?view=diff&rev=501114&r1=501113&r2=501114
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java 
(original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java 
Mon Jan 29 09:14:36 2007
@@ -473,8 +473,13 @@
        }
        
        
-       public static RMMsgContext createMakeConnectionMessage (RMMsgContext 
referenceRMMessage,  String makeConnectionSeqId,
-                       String makeConnectionAnonURI, StorageManager 
storageManager) throws AxisFault {
+       public static RMMsgContext createMakeConnectionMessage (RMMsgContext 
referenceRMMessage,
+                                                                               
                                        RMSequenceBean bean,
+                                                                               
                                        String makeConnectionSeqId,
+                                                                               
                                        String makeConnectionAnonURI,
+                                                                               
                                        StorageManager storageManager)
+       throws AxisFault
+       {
                
                MessageContext referenceMessage = 
referenceRMMessage.getMessageContext();
                String rmNamespaceValue = 
referenceRMMessage.getRMNamespaceValue();
@@ -516,13 +521,13 @@
                //generating the SOAP Envelope.
                makeConnectionRMMessageCtx.addSOAPEnvelope();
                
-               // TODO work out how to find the correct sequence property key 
to look up the token
-               // that we should include in the makeConnection (assuming we 
need one)
+               // Secure the message using the correct token for the sequence 
that we are polling
+               secureOutboundMessage(bean, makeConnectionMessageCtx);          
                
                return makeConnectionRMMessageCtx;
        }
 
-       private static void secureOutboundMessage(RMSequenceBean rmBean, 
MessageContext message)
+       public static void secureOutboundMessage(RMSequenceBean rmBean, 
MessageContext message)
        throws SandeshaException
        {
                if(log.isDebugEnabled()) log.debug("Entry: 
RMMsgCreator::secureOutboundMessage");

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/WSRMMessageSender.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/WSRMMessageSender.java?view=diff&rev=501114&r1=501113&r2=501114
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/WSRMMessageSender.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/WSRMMessageSender.java
 Mon Jan 29 09:14:36 2007
@@ -128,11 +128,7 @@
                rmMsgCtx.addSOAPEnvelope();
 
                // Ensure the outbound message us secured using the correct 
token
-               if(getRMSBean().getSecurityTokenData() != null) {
-                       SecurityManager secMgr = 
SandeshaUtil.getSecurityManager(configurationContext);
-                       SecurityToken token = 
secMgr.recoverSecurityToken(getRMSBean().getSecurityTokenData());
-                       secMgr.applySecurityToken(token, msgContext);
-               }
+               RMMsgCreator.secureOutboundMessage(getRMSBean(), msgContext);
                
                String key = SandeshaUtil.getUUID();
 

Modified: 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/scenarios/RMScenariosTest.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/scenarios/RMScenariosTest.java?view=diff&rev=501114&r1=501113&r2=501114
==============================================================================
--- 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/scenarios/RMScenariosTest.java
 (original)
+++ 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/scenarios/RMScenariosTest.java
 Mon Jan 29 09:14:36 2007
@@ -29,16 +29,20 @@
        private int serverPort = DEFAULT_SERVER_TEST_PORT;
        private String to = "http://127.0.0.1:"; + serverPort + 
"/axis2/services/RMSampleService";
        
-       private String repoPath = "target" + File.separator + "repos" + 
File.separator + "server";
-       private String axis2_xml = "target" + File.separator + "repos" + 
File.separator + "server" + File.separator + "server_axis2.xml";
+       protected String repoPath = "target" + File.separator + "repos" + 
File.separator + "server";
+       protected String axis2_xml = "target" + File.separator + "repos" + 
File.separator + "server" + File.separator + "server_axis2.xml";
 
-       private String repoPathClient = "target" + File.separator + "repos" + 
File.separator + "client";
-       private String axis2_xmlClient = "target" + File.separator + "repos" + 
File.separator + "client" + File.separator + "client_axis2.xml";
+       protected String repoPathClient = "target" + File.separator + "repos" + 
File.separator + "client";
+       protected String axis2_xmlClient = "target" + File.separator + "repos" 
+ File.separator + "client" + File.separator + "client_axis2.xml";
        
        public RMScenariosTest () {
                super ("RMScenariosTest");
        }
        
+       public RMScenariosTest (String name) {
+               super(name);
+       }
+
        public void setUp () throws Exception {
                super.setUp();
 
@@ -190,12 +194,12 @@
                        //assertions for the out sequence.
                                SequenceReport outgoingSequenceReport = 
SandeshaClient.getOutgoingSequenceReport(serviceClient);
                                System.out.println("Checking Outbound Sequence: 
" + outgoingSequenceReport.getSequenceID());
-                               assertEquals 
(outgoingSequenceReport.getCompletedMessages().size(),3);
-                               
assertTrue(outgoingSequenceReport.getCompletedMessages().contains(new Long(1)));
-                               
assertTrue(outgoingSequenceReport.getCompletedMessages().contains(new Long(2)));
-                               
assertTrue(outgoingSequenceReport.getCompletedMessages().contains(new Long(3)));
-                               
assertEquals(outgoingSequenceReport.getSequenceStatus(),SequenceReport.SEQUENCE_STATUS_TERMINATED);
-                               
assertEquals(outgoingSequenceReport.getSequenceDirection(),SequenceReport.SEQUENCE_DIRECTION_OUT);
+                               assertEquals ("Outbound message count", 3, 
outgoingSequenceReport.getCompletedMessages().size());
+                               assertTrue("Outbound message #1", 
outgoingSequenceReport.getCompletedMessages().contains(new Long(1)));
+                               assertTrue("Outbound message #2", 
outgoingSequenceReport.getCompletedMessages().contains(new Long(2)));
+                               assertTrue("Outbound message #3", 
outgoingSequenceReport.getCompletedMessages().contains(new Long(3)));
+                               assertEquals("Outbound sequence status: 
TERMINATED", SequenceReport.SEQUENCE_STATUS_TERMINATED, 
outgoingSequenceReport.getSequenceStatus());
+                               assertEquals("Outbound sequence direction: 
OUT", SequenceReport.SEQUENCE_DIRECTION_OUT, 
outgoingSequenceReport.getSequenceDirection());
                                
                                //assertions for the inbound sequence. The one 
we care about is a new sequence,
                                //so it will not exist in the oldSequences list.
@@ -203,26 +207,27 @@
                                SequenceReport incomingSequenceReport = 
getNewReport(incomingSequences, oldIncomingReports);
                                System.out.println("Checking Inbound Sequence: 
" + incomingSequenceReport.getSequenceID());
                                String offer = (String) 
clientOptions.getProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID);
-                               if(offer != null) assertEquals(offer, 
incomingSequenceReport.getSequenceID());
-                               assertEquals 
(incomingSequenceReport.getCompletedMessages().size(),3);
-                               
assertTrue(incomingSequenceReport.getCompletedMessages().contains(new Long(1)));
-                               
assertTrue(incomingSequenceReport.getCompletedMessages().contains(new Long(2)));
-                               
assertTrue(incomingSequenceReport.getCompletedMessages().contains(new Long(3)));
-                               
assertEquals(incomingSequenceReport.getSequenceDirection(),SequenceReport.SEQUENCE_DIRECTION_IN);
-                               
assertEquals(SequenceReport.SEQUENCE_STATUS_TERMINATED, 
incomingSequenceReport.getSequenceStatus());
+                               if(offer != null) assertEquals("Inbound seq 
id", offer, incomingSequenceReport.getSequenceID());
+                               assertEquals ("Inbound message count", 3, 
incomingSequenceReport.getCompletedMessages().size());
+                               assertTrue("Inbound message #1", 
incomingSequenceReport.getCompletedMessages().contains(new Long(1)));
+                               assertTrue("Inbound message #2", 
incomingSequenceReport.getCompletedMessages().contains(new Long(2)));
+                               assertTrue("Inbound message #3", 
incomingSequenceReport.getCompletedMessages().contains(new Long(3)));
+                               assertEquals("Inbound sequence status: 
TERMINATED", SequenceReport.SEQUENCE_STATUS_TERMINATED, 
incomingSequenceReport.getSequenceStatus());
+                               assertEquals("Inbound sequence direction: IN", 
SequenceReport.SEQUENCE_DIRECTION_IN, 
incomingSequenceReport.getSequenceDirection());
                                
-                               assertTrue(callback1.isComplete());
-                               assertEquals ("echo1", callback1.getResult());
+                               assertTrue("Callback #1", 
callback1.isComplete());
+                               assertEquals("Callback #1 data", "echo1", 
callback1.getResult());
                                
-                               assertTrue(callback2.isComplete());
-                               assertEquals ("echo1echo2", 
callback2.getResult());
+                               assertTrue("Callback #2", 
callback2.isComplete());
+                               assertEquals("Callback #2 data", "echo1echo2", 
callback2.getResult());
                                
-                               assertTrue(callback3.isComplete());
-                               assertEquals ("echo1echo2echo3", 
callback3.getResult());
+                               assertTrue("Callback #3", 
callback3.isComplete());
+                               assertEquals("Callback #3 data", 
"echo1echo2echo3", callback3.getResult());
                                
                                lastError = null;
                                break;
                        } catch(Error e) {
+                               System.out.println("Possible error:" + e);
                                lastError = e;
                        }
                }

Added: 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/security/SecurityScenariosTest.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/security/SecurityScenariosTest.java?view=auto&rev=501114
==============================================================================
--- 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/security/SecurityScenariosTest.java
 (added)
+++ 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/security/SecurityScenariosTest.java
 Mon Jan 29 09:14:36 2007
@@ -0,0 +1,18 @@
+package org.apache.sandesha2.security;
+
+import java.io.File;
+
+import org.apache.sandesha2.scenarios.RMScenariosTest;
+
+public class SecurityScenariosTest extends RMScenariosTest {
+
+       public SecurityScenariosTest() {
+               super("SecurityScenariosTest");
+               this.repoPath = "target" + File.separator + "repos" + 
File.separator + "secure-server";
+               this.axis2_xml = repoPath + File.separator + "server_axis2.xml";
+               
+               this.repoPathClient = "target" + File.separator + "repos" + 
File.separator + "secure-client";
+               this.axis2_xmlClient = repoPathClient + File.separator + 
"client_axis2.xml";
+       }
+
+}

Propchange: 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/security/SecurityScenariosTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/security/UnitTestSecurityManager.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/security/UnitTestSecurityManager.java?view=diff&rev=501114&r1=501113&r2=501114
==============================================================================
--- 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/security/UnitTestSecurityManager.java
 (original)
+++ 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/security/UnitTestSecurityManager.java
 Mon Jan 29 09:14:36 2007
@@ -18,6 +18,7 @@
 package org.apache.sandesha2.security;
 
 import java.util.HashMap;
+import java.util.Iterator;
 
 import javax.xml.namespace.QName;
 
@@ -100,18 +101,22 @@
                
                // Look for the header that we should have introduced in the 
'apply' method
                String key = ((UnitTestSecurityToken)token).getURI();
-               String foundToken = null;
+               boolean foundToken = false;
                SOAPEnvelope env = message.getEnvelope();
                SOAPHeader headers = env.getHeader();
                if(headers != null) {
-                       OMElement myHeader = 
headers.getFirstChildWithName(unitTestHeader);
-                       if(myHeader != null) {
-                               foundToken = myHeader.getText();
+                       Iterator tokens = 
headers.getChildrenWithName(unitTestHeader);
+                       while(tokens.hasNext()) {
+                               OMElement myHeader = (OMElement) tokens.next();
+                               String text = myHeader.getText();
+                               if(key.equals(text)) {
+                                       foundToken = true;
+                                       break;
+                               }
                        }
                }
-               if(!key.equals(foundToken)) {
-                       throw new SandeshaException("Message was not secured 
with the correct token");
-               }
+               if(!foundToken) throw new SandeshaException("Message was not 
secured with the correct token(s)");
+
                log.debug("Exit: 
UnitTestSecurityManager::checkProofOfPossession");
        }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to