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]