Author: gatfora
Date: Fri Feb 2 04:12:18 2007
New Revision: 502586
URL: http://svn.apache.org/viewvc?view=rev&rev=502586
Log:
Add support for generating InvalidAcknowledgement fault
Added:
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/InvalidAcknowledgementTest.java
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/RMSBean.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/UnknownSequenceFaultTest.java
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java?view=diff&rev=502586&r1=502585&r2=502586
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
Fri Feb 2 04:12:18 2007
@@ -145,6 +145,8 @@
public static final String outMsgHasNoEnvelope="outMsgHasNoEnvelope";
public static final String
msgNumberExceededLastMsgNo="msgNumberExceededLastMsgNo";
public static final String ackInvalid="ackInvalid";
+ public static final String ackInvalidHighMsg="ackInvalidHighMsg";
+ public static final String ackInvalidNotSent="ackInvalidNotSent";
public static final String
highestMsgIdNotStored="highestMsgIdNotStored";
public static final String
cannotHaveFinalWithNack="cannotHaveFinalWithNack";
public static final String
accptButNoSequenceOffered="accptButNoSequenceOffered";
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties?view=diff&rev=502586&r1=502585&r2=502586
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
Fri Feb 2 04:12:18 2007
@@ -55,7 +55,7 @@
configContextNotSet=Sandesha2 Internal Error: ''ConfigurationContext'' is not
set
soapEnvNotSet=Sandesha2 Internal Error: SOAP envelope is not set
soapBodyNotPresent=Invalid SOAP message: the body is not present.
-unknownSoapVersion=Unknow SOAP version {0}
+unknownSoapVersion=Unknown SOAP version {0}
axisServiceIsNull=Sandesha2 Internal Error: ''AxisService'' is null
msgContextNotSetInbound=Sandesha2 Internal Error: ''MessageContext'' is null
on the inbound message.
msgContextNotSetOutbound=Sandesha2 Internal Error: ''MessageContext'' is null
on the outbound message.
@@ -153,7 +153,9 @@
msgNumberLargerThanLastMsg=The message number {0} is larger than the value
{1}, which was previously declared as the last message.
outMsgHasNoEnvelope=Out message does not have a envelope: {0}
msgNumberExceededLastMsgNo=The received message number {0} on sequence {1}
exceeds the message number {1} which was declared as last in a previosly
received application message.
-ackInvalid=The SequenceAcknowledgement received is invalid as the lower value
{1} is larger than upper value {2}.
+ackInvalid=The SequenceAcknowledgement received is invalid as the lower value
{0} is larger than upper value {1}.
+ackInvalidHighMsg=The SequenceAcknowledgement received is invalid as the upper
value {0} is greater than the highest message sent {1}.
+ackInvalidNotSent=The SequenceAcknowledgement received is invalid as the
acknowledgement contains messages that have not been sent.
highestMsgIdNotStored=The MessageId of the highest message number has not been
stored for sequence {0}
cannotHaveFinalWithNack=The ''Final'' element cannot be present when there are
Nack elements under the SequenceAcknowledgement.
accptButNoSequenceOffered=Error: An ''accept'' was received but there was no
offered sequence entry.
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java?view=diff&rev=502586&r1=502585&r2=502586
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
Fri Feb 2 04:12:18 2007
@@ -142,7 +142,12 @@
log.debug("Exit:
AcknowledgementProcessor::processAckHeader, Unknown sequence ");
return;
}
- FaultManager.checkForInvalidAcknowledgement(rmMsgCtx,
storageManager);
+
+ if (FaultManager.checkForInvalidAcknowledgement(rmMsgCtx,
sequenceAck, storageManager, rmsBean)) {
+ if (log.isDebugEnabled())
+ log.debug("Exit:
AcknowledgementProcessor::processAckHeader, Invalid Ack range ");
+ return;
+ }
SenderBean input = new SenderBean();
input.setSend(true);
@@ -177,6 +182,16 @@
SenderBean retransmitterBean =
getRetransmitterEntry(retransmitterEntriesOfSequence, messageNo);
if (retransmitterBean != null) {
+
+ // We've got an Ack for a message that
hasn't been sent yet !
+ if (retransmitterBean.getSentCount() ==
0) {
+
FaultManager.makeInvalidAcknowledgementFault(rmMsgCtx, sequenceAck, ackRange,
+ storageManager,
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.ackInvalidNotSent));
+ if (log.isDebugEnabled())
+ log.debug("Exit:
AcknowledgementProcessor::processAckHeader, Invalid Ack");
+ return;
+ }
+
String storageKey =
retransmitterBean.getMessageContextRefKey();
boolean syncResponseNeeded = false;
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java?view=diff&rev=502586&r1=502585&r2=502586
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
Fri Feb 2 04:12:18 2007
@@ -26,7 +26,6 @@
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.OperationContext;
-import org.apache.axis2.context.OperationContextFactory;
import org.apache.axis2.wsdl.WSDLConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -198,7 +197,7 @@
//Most probably this is a sync response
message, using the replyTo of the request message
OperationContext operationContext =
createSeqResponseRMMsgCtx.getMessageContext().getOperationContext();
if (operationContext!=null) {
- MessageContext createSequnceMessage =
operationContext.getMessageContext(OperationContextFactory.MESSAGE_LABEL_OUT_VALUE);
+ MessageContext createSequnceMessage =
operationContext.getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
if (createSequnceMessage!=null)
toEPR =
createSequnceMessage.getReplyTo();
}
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/RMSBean.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/RMSBean.java?view=diff&rev=502586&r1=502585&r2=502586
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/RMSBean.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/RMSBean.java
Fri Feb 2 04:12:18 2007
@@ -331,6 +331,7 @@
result.append("\nLastError : ");
result.append(lastSendError);
result.append("\nLastErrorTime : ");
result.append(lastSendErrorTimestamp);
}
+ result.append("\nClientCompletedMsgs: ");
result.append(clientCompletedMessages);
return result.toString();
}
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java?view=diff&rev=502586&r1=502585&r2=502586
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
Fri Feb 2 04:12:18 2007
@@ -20,8 +20,6 @@
import java.util.Iterator;
import java.util.List;
-import javax.xml.namespace.QName;
-
import org.apache.axiom.om.OMElement;
import org.apache.axiom.soap.SOAP11Constants;
import org.apache.axiom.soap.SOAP12Constants;
@@ -51,6 +49,7 @@
import org.apache.sandesha2.i18n.SandeshaMessageKeys;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.beans.RMDBean;
+import org.apache.sandesha2.storage.beans.RMSBean;
import org.apache.sandesha2.wsrm.AcknowledgementRange;
import org.apache.sandesha2.wsrm.SequenceAcknowledgement;
@@ -198,15 +197,13 @@
* @return
* @throws SandeshaException
*/
- public static void checkForInvalidAcknowledgement(RMMsgContext
ackRMMessageContext, StorageManager storageManager)
+ public static boolean checkForInvalidAcknowledgement(RMMsgContext
ackRMMessageContext, SequenceAcknowledgement sequenceAcknowledgement,
+ StorageManager storageManager, RMSBean rmsBean)
throws AxisFault {
if (log.isDebugEnabled())
log.debug("Enter:
FaultManager::checkForInvalidAcknowledgement");
// check lower<=upper
- // TODO acked for not-send message
-
- MessageContext ackMessageContext =
ackRMMessageContext.getMessageContext();
if (ackRMMessageContext.getMessageType() !=
Sandesha2Constants.MessageTypes.ACK) {
if (log.isDebugEnabled())
log.debug("Exit:
FaultManager::checkForInvalidAcknowledgement, MessageType not an ACK");
@@ -215,55 +212,78 @@
boolean invalidAck = false;
String reason = null;
- Iterator sequenceAckIter = ackRMMessageContext.getMessageParts(
-
Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
-
- while (sequenceAckIter.hasNext()) {
- SequenceAcknowledgement sequenceAcknowledgement =
(SequenceAcknowledgement) sequenceAckIter.next();
- List sequenceAckList =
sequenceAcknowledgement.getAcknowledgementRanges();
- Iterator it = sequenceAckList.iterator();
-
- while (it.hasNext()) {
- AcknowledgementRange acknowledgementRange =
(AcknowledgementRange) it.next();
- long upper =
acknowledgementRange.getUpperValue();
- long lower =
acknowledgementRange.getLowerValue();
-
- if (lower > upper) {
- invalidAck = true;
- reason =
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.ackInvalid,
Long.toString(lower), Long
- .toString(upper));
- }
- }
+ List sequenceAckList =
sequenceAcknowledgement.getAcknowledgementRanges();
+ Iterator it = sequenceAckList.iterator();
+ while (it.hasNext()) {
+ AcknowledgementRange acknowledgementRange =
(AcknowledgementRange) it.next();
+ long upper = acknowledgementRange.getUpperValue();
+ long lower = acknowledgementRange.getLowerValue();
+
+ if (lower > upper) {
+ invalidAck = true;
+ reason =
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.ackInvalid,
Long.toString(lower), Long
+ .toString(upper));
+
+ // check upper isn't bigger than the highest
out msg number
+ } else if ( upper >
rmsBean.getHighestOutMessageNumber() ) {
+ invalidAck = true;
+
+ reason =
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.ackInvalidHighMsg,
+ Long.toString(upper),
+
Long.toString(rmsBean.getHighestOutMessageNumber()));
+ }
+
if (invalidAck) {
- FaultData data = new FaultData();
- int SOAPVersion =
SandeshaUtil.getSOAPVersion(ackMessageContext.getEnvelope());
- if (SOAPVersion ==
Sandesha2Constants.SOAPVersion.v1_1)
-
data.setCode(SOAP11Constants.FAULT_CODE_SENDER);
- else
-
data.setCode(SOAP12Constants.FAULT_CODE_SENDER);
-
-
data.setSubcode(Sandesha2Constants.SOAPFaults.Subcodes.INVALID_ACKNOWLEDGEMENT);
- data.setReason(reason);
-
- SOAPFactory factory =
SOAPAbstractFactory.getSOAPFactory(SOAPVersion);
- OMElement dummyElement =
factory.createOMElement("dummyElem", null);
-
sequenceAcknowledgement.toOMElement(dummyElement);
-
- OMElement sequenceAckElement =
dummyElement.getFirstChildWithName(new QName(
-
Sandesha2Constants.WSRM_COMMON.SEQUENCE_ACK));
- data.setDetail(sequenceAckElement);
-
- if (log.isDebugEnabled())
- log.debug("Exit:
FaultManager::checkForInvalidAcknowledgement, invalid ACK");
- getFault(ackRMMessageContext, data);
+
makeInvalidAcknowledgementFault(ackRMMessageContext, sequenceAcknowledgement,
+ acknowledgementRange,
storageManager, reason);
+ return true;
}
-
- }
+ }
if (log.isDebugEnabled())
log.debug("Exit:
FaultManager::checkForInvalidAcknowledgement");
+ return false;
}
+
+ /**
+ * Makes an InvalidAcknowledgement fault.
+ * @param rmMsgCtx
+ * @param storageManager
+ * @param message
+ * @throws AxisFault
+ */
+ public static void makeInvalidAcknowledgementFault(RMMsgContext
rmMsgCtx,
+ SequenceAcknowledgement sequenceAcknowledgement,
AcknowledgementRange acknowledgementRange,
+ StorageManager storageManager, String reason) throws
AxisFault {
+ FaultData data = new FaultData();
+ int SOAPVersion =
SandeshaUtil.getSOAPVersion(rmMsgCtx.getMessageContext().getEnvelope());
+ if (SOAPVersion == Sandesha2Constants.SOAPVersion.v1_1)
+ data.setCode(SOAP11Constants.FAULT_CODE_SENDER);
+ else
+ data.setCode(SOAP12Constants.FAULT_CODE_SENDER);
+
+
data.setType(Sandesha2Constants.SOAPFaults.FaultType.INVALID_ACKNOWLEDGEMENT);
+
data.setSubcode(Sandesha2Constants.SOAPFaults.Subcodes.INVALID_ACKNOWLEDGEMENT);
+ data.setReason(reason);
+
+ SOAPFactory factory =
SOAPAbstractFactory.getSOAPFactory(SOAPVersion);
+
+ OMElement seqAckElement =
factory.createOMElement(Sandesha2Constants.WSRM_COMMON.SEQUENCE_ACK,
+ rmMsgCtx.getRMNamespaceValue(),
Sandesha2Constants.WSRM_COMMON.NS_PREFIX_RM);
+
+ // Set the sequence Id
+
sequenceAcknowledgement.getIdentifier().toOMElement(seqAckElement);
+
+ // Set the Ack Range
+ acknowledgementRange.toOMElement(seqAckElement);
+
+ data.setDetail(seqAckElement);
+
+ if (log.isDebugEnabled())
+ log.debug("Exit:
FaultManager::checkForInvalidAcknowledgement, invalid ACK");
+ getOrSendFault(rmMsgCtx, data);
+ }
/**
* Makes a Create sequence refused fault
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=502586&r1=502585&r2=502586
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
Fri Feb 2 04:12:18 2007
@@ -18,7 +18,6 @@
package org.apache.sandesha2.util;
import java.util.ArrayList;
-import java.util.Iterator;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.soap.SOAPEnvelope;
@@ -47,7 +46,6 @@
import org.apache.sandesha2.storage.beans.RMSequenceBean;
import org.apache.sandesha2.wsrm.Accept;
import org.apache.sandesha2.wsrm.AckFinal;
-import org.apache.sandesha2.wsrm.AcknowledgementRange;
import org.apache.sandesha2.wsrm.AcksTo;
import org.apache.sandesha2.wsrm.Address;
import org.apache.sandesha2.wsrm.CloseSequence;
@@ -414,11 +412,7 @@
RMDBean rmdBean =
SandeshaUtil.getRMDBeanFromSequenceId(storageManager, sequenceId);
ArrayList ackRangeArrayList =
SandeshaUtil.getAckRangeArrayList(rmdBean.getServerCompletedMessages(),
rmNamespaceValue);
- Iterator iterator = ackRangeArrayList.iterator();
- while (iterator.hasNext()) {
- AcknowledgementRange ackRange = (AcknowledgementRange)
iterator.next();
- sequenceAck.addAcknowledgementRanges(ackRange);
- }
+ sequenceAck.setAckRanges(ackRangeArrayList);
if (rmdBean.isClosed()) {
// sequence is closed. so add the 'Final' part.
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java?view=diff&rev=502586&r1=502585&r2=502586
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SOAPFaultEnvelopeCreator.java
Fri Feb 2 04:12:18 2007
@@ -74,7 +74,7 @@
/**
* To find out weather this is a sequence fault. These faults are
handeled differently
- * accodting to the RM spec.
+ * according to the RM spec.
*
* @param faultData
* @return
@@ -92,6 +92,9 @@
sequenceFault = true;
if (faultType ==
Sandesha2Constants.SOAPFaults.FaultType.UNKNOWN_SEQUENCE)
+ sequenceFault = true;
+
+ if (faultType ==
Sandesha2Constants.SOAPFaults.FaultType.INVALID_ACKNOWLEDGEMENT)
sequenceFault = true;
return sequenceFault;
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java?view=diff&rev=502586&r1=502585&r2=502586
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
Fri Feb 2 04:12:18 2007
@@ -169,6 +169,14 @@
// sending the message
boolean successfullySent = false;
+ // Although not actually sent yet, update the send
count to indicate an attempt
+ if (senderBean.isReSend()) {
+ SenderBean bean2 = senderBeanMgr
+ .retrieve(senderBean.getMessageID());
+ bean2.setSentCount(senderBean.getSentCount());
+ senderBeanMgr.update(bean2);
+ }
+
// have to commit the transaction before sending. This
may
// get changed when WS-AT is available.
if(transaction != null) {
@@ -269,7 +277,6 @@
.retrieve(senderBean.getMessageID());
if (bean1 != null) {
if (senderBean.isReSend()) {
-
bean1.setSentCount(senderBean.getSentCount());
bean1.setTimeToSend(senderBean.getTimeToSend());
senderBeanMgr.update(bean1);
} else {
Added:
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/InvalidAcknowledgementTest.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/InvalidAcknowledgementTest.java?view=auto&rev=502586
==============================================================================
---
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/InvalidAcknowledgementTest.java
(added)
+++
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/InvalidAcknowledgementTest.java
Fri Feb 2 04:12:18 2007
@@ -0,0 +1,279 @@
+/*
+ * Copyright 2007 The Apache Software Foundation.
+ *
+ * Licensed 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.sandesha2.faulttests;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory;
+import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.MessageContext;
+import org.apache.sandesha2.RMMsgContext;
+import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.SandeshaTestCase;
+import org.apache.sandesha2.storage.StorageManager;
+import org.apache.sandesha2.storage.Transaction;
+import org.apache.sandesha2.storage.beanmanagers.RMSBeanMgr;
+import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
+import org.apache.sandesha2.storage.beans.RMSBean;
+import org.apache.sandesha2.storage.beans.SenderBean;
+import org.apache.sandesha2.util.RangeString;
+import org.apache.sandesha2.util.SandeshaUtil;
+import org.apache.sandesha2.util.SpecSpecificConstants;
+import org.apache.sandesha2.wsrm.AcknowledgementRange;
+import org.apache.sandesha2.wsrm.Identifier;
+import org.apache.sandesha2.wsrm.SequenceAcknowledgement;
+
+
+public class InvalidAcknowledgementTest extends SandeshaTestCase {
+
+ private static final String server_repoPath = "target" + File.separator
+ + "repos" + File.separator + "server";
+
+ private static final String server_axis2_xml = "target" + File.separator
+ + "repos" + File.separator + "server" + File.separator
+ + "server_axis2.xml";
+
+ private ConfigurationContext serverConfigContext;
+
+ public InvalidAcknowledgementTest() {
+ super("InvalidAcknowledgementTest");
+ }
+
+ public void setUp() throws Exception {
+ super.setUp();
+ serverConfigContext = startServer(server_repoPath,
server_axis2_xml);
+ }
+
+ /**
+ * Sends an ACK message to an RM Source that will be refused and should
be
+ * rejected with an InvalidAck fault
+ *
+ * We mock up a RMS sequence on the server, this is for us to then use
for the fault.
+ *
+ * @throws Exception
+ */
+ public void testInvalidAcknowledgementSOAPFault() throws Exception {
+ // Create an RMS on the service.
+ StorageManager storageManager =
+
SandeshaUtil.getSandeshaStorageManager(serverConfigContext,
serverConfigContext.getAxisConfiguration());
+
+ RMSBeanMgr rmsBeanMgr = storageManager.getRMSBeanMgr();
+
+ String seqID = SandeshaUtil.getUUID();
+
+ // Mockup an RMSBean
+ RMSBean rmsBean = new RMSBean();
+ rmsBean.setCreateSeqMsgID(SandeshaUtil.getUUID());
+ rmsBean.setSequenceID(seqID);
+
rmsBean.setInternalSequenceID(SandeshaUtil.getInternalSequenceID(seqID, null));
+ rmsBean.setToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+
rmsBean.setAcksToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+
rmsBean.setReplyToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+ rmsBean.setRMVersion(Sandesha2Constants.SPEC_VERSIONS.v1_1);
+ rmsBean.setClientCompletedMessages(new RangeString());
+ rmsBean.setNextMessageNumber(1);
+
+ // Create a transaction and insert the RMSBean
+ Transaction tran = storageManager.getTransaction();
+
+ rmsBeanMgr.insert(rmsBean);
+
+ tran.commit();
+
+ // Open a connection to the endpoint, using the sequence ack as the action
+ HttpURLConnection connection =
+ FaultTestUtils.getHttpURLConnection("http://127.0.0.1:"
+ serverPort + "/axis2/services/RMSampleService",
+
"http://docs.oasis-open.org/ws-rx/wsrm/200608/SequenceAcknowledgement");
+
+ OutputStream tmpOut2 = connection.getOutputStream();
+ byte ar[] = getAppMessageAsBytes(seqID);
+
+ // Send the message to the socket.
+ tmpOut2.write(ar);
+ tmpOut2.flush();
+
+ // Get the response message from the connection
+ String message =
FaultTestUtils.retrieveResponseMessage(connection);
+
+ // Check that the fault message isn't null
+ assertNotNull(message);
+
+ // Check that the response contains the InvalidAcknowledgement tag
+ assertTrue(message.indexOf("wsrm:InvalidAcknowledgement") > -1);
+
+ // Check that the <wsrm:Identifier>seqID</wsrm:Identifier> matches the
sequence ID specified
+ String faultID = message.substring(message.indexOf("<wsrm:Identifier>") +
17, message.indexOf("</wsrm:Identifier>"));
+ assertEquals(seqID, faultID);
+
+ // Disconnect at the end of the test
+ connection.disconnect();
+ }
+
+ /**
+ * Sends an ACK message to an RM Source that will be refused and should
be
+ * rejected with an InvalidAck fault
+ *
+ * We mock up a RMS sequence on the server, this is for us to then use
for the fault.
+ * Mock up a couple of SenderBeans which match the 1, 2, 3 message
numbers
+ * Set the highest out message number to be 3
+ *
+ * Send an ack range in for 1 - 3, Indicate that message 1 has been
sent, but no more.
+ *
+ * @throws Exception
+ */
+ public void testInvalidAcknowledgementFromBeanNotSentSOAPFault() throws
Exception {
+
+ org.apache.log4j.BasicConfigurator.configure();
+
+ // Create an RMS on the service.
+ StorageManager storageManager =
+
SandeshaUtil.getSandeshaStorageManager(serverConfigContext,
serverConfigContext.getAxisConfiguration());
+
+ RMSBeanMgr rmsBeanMgr = storageManager.getRMSBeanMgr();
+ SenderBeanMgr senderMgr = storageManager.getSenderBeanMgr();
+
+ String seqID = SandeshaUtil.getUUID();
+
+ // Mockup an RMSBean
+ RMSBean rmsBean = new RMSBean();
+ rmsBean.setCreateSeqMsgID(SandeshaUtil.getUUID());
+ rmsBean.setSequenceID(seqID);
+
rmsBean.setInternalSequenceID(SandeshaUtil.getInternalSequenceID(seqID, null));
+ rmsBean.setToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+
rmsBean.setAcksToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+
rmsBean.setReplyToEPR(AddressingConstants.Final.WSA_ANONYMOUS_URL);
+ rmsBean.setRMVersion(Sandesha2Constants.SPEC_VERSIONS.v1_1);
+ rmsBean.setClientCompletedMessages(new RangeString());
+ rmsBean.setNextMessageNumber(4);
+ rmsBean.setHighestOutMessageNumber(3);
+
+ SenderBean bean1 = getSenderBean(seqID, 1, 1);
+ SenderBean bean2 = getSenderBean(seqID, 0, 2);
+ SenderBean bean3 = getSenderBean(seqID, 1, 3);
+
+ // Create a transaction and insert the RMSBean
+ Transaction tran = storageManager.getTransaction();
+
+ rmsBeanMgr.insert(rmsBean);
+ senderMgr.insert(bean1);
+ senderMgr.insert(bean2);
+ senderMgr.insert(bean3);
+
+ tran.commit();
+
+ // Open a connection to the endpoint, using the sequence ack as the action
+ HttpURLConnection connection =
+ FaultTestUtils.getHttpURLConnection("http://127.0.0.1:"
+ serverPort + "/axis2/services/RMSampleService",
+
"http://docs.oasis-open.org/ws-rx/wsrm/200608/SequenceAcknowledgement");
+
+ OutputStream tmpOut2 = connection.getOutputStream();
+ byte ar[] = getAppMessageAsBytes(seqID);
+
+ // Send the message to the socket.
+ tmpOut2.write(ar);
+ tmpOut2.flush();
+
+ // Get the response message from the connection
+ String message =
FaultTestUtils.retrieveResponseMessage(connection);
+
+ // Check that the fault message isn't null
+ assertNotNull(message);
+
+ // Check that the response contains the InvalidAcknowledgement tag
+ assertTrue(message.indexOf("wsrm:InvalidAcknowledgement") > -1);
+
+ // Check that the <wsrm:Identifier>seqID</wsrm:Identifier> matches the
sequence ID specified
+ String faultID = message.substring(message.indexOf("<wsrm:Identifier>") +
17, message.indexOf("</wsrm:Identifier>"));
+ assertEquals(seqID, faultID);
+
+ // Disconnect at the end of the test
+ connection.disconnect();
+ }
+
+ /**
+ * Get a SequenceAck message as bytes
+ *
+ * @return
+ */
+ private byte[] getAppMessageAsBytes(String sequenceId) throws Exception
+ {
+ SOAPFactory factory = new SOAP11Factory();
+ SOAPEnvelope dummyEnvelope = factory.getDefaultEnvelope();
+
+ // Create a "new" application message
+ MessageContext messageContext = new MessageContext();
+ messageContext.setConfigurationContext(serverConfigContext);
+
messageContext.setAxisService(serverConfigContext.getAxisConfiguration().getService("RMSampleService"));
+ messageContext.setEnvelope(dummyEnvelope);
+
+ RMMsgContext applicationRMMsg = new
RMMsgContext(messageContext);
+
+ // Generate the SequenceAck field.
+ // -------------------------------
+ String rmNamespaceValue =
SpecSpecificConstants.getRMNamespaceValue(Sandesha2Constants.SPEC_VERSIONS.v1_1);
+
+ SequenceAcknowledgement sequenceAck = new
SequenceAcknowledgement(rmNamespaceValue);
+ // Set the sequenceId
+ Identifier id = new Identifier(rmNamespaceValue);
+ id.setIndentifer(sequenceId);
+ sequenceAck.setIdentifier(id);
+
+ // Set the Invalid range!
+ AcknowledgementRange ackRange = new
AcknowledgementRange(rmNamespaceValue);
+ ackRange.setLowerValue(1);
+ ackRange.setUpperValue(3);
+ sequenceAck.addAcknowledgementRanges(ackRange);
+
+ // Set the SequenceAcknowledgement part in the message
+
applicationRMMsg.setMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT,
sequenceAck);
+ applicationRMMsg.addSOAPEnvelope();
+
+ // --------------------------------------------
+ // Finished generating SequenceAck part
+
+ // Create an RMSBean so the create sequence message can be
created
+
messageContext.setWSAAction("http://docs.oasis-open.org/ws-rx/wsrm/200608/SequenceAcknowledgement");
+
+ ByteArrayOutputStream outputStream = new
ByteArrayOutputStream();
+
+ // Serialize the application message
+
applicationRMMsg.getMessageContext().getEnvelope().serialize(outputStream);
+
+ return outputStream.toByteArray();
+ }
+
+ private static SenderBean getSenderBean(String seqID, int sendCount,
int messageNo) {
+ SenderBean bean = new SenderBean();
+
bean.setInternalSequenceID(SandeshaUtil.getInternalSequenceID(seqID, null));
+ bean.setSequenceID(seqID);
+ bean.setMessageID(SandeshaUtil.getUUID());
+ bean.setSentCount(sendCount);
+ bean.setSend(true);
+ bean.setReSend(true);
+
bean.setMessageType(Sandesha2Constants.MessageTypes.APPLICATION);
+ bean.setMessageNumber(messageNo);
+
+ return bean;
+ }
+}
+
Modified:
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/UnknownSequenceFaultTest.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/UnknownSequenceFaultTest.java?view=diff&rev=502586&r1=502585&r2=502586
==============================================================================
---
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/UnknownSequenceFaultTest.java
(original)
+++
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/faulttests/UnknownSequenceFaultTest.java
Fri Feb 2 04:12:18 2007
@@ -52,7 +52,7 @@
private ConfigurationContext serverConfigContext;
public UnknownSequenceFaultTest() {
- super("CreateSequenceProcessorTest");
+ super("UnknownSequenceFaultTest");
}
public void setUp() throws Exception {
@@ -61,11 +61,6 @@
}
/**
- * Sends a Create Sequence message to an RM Destination that will be
refused.
- *
- * @throws Exception
- */
- /**
* Sends an Application message to an RM Destination that will be
refused and should be
* rejected with an unknown sequence fault
*
@@ -156,4 +151,5 @@
return outputStream.toByteArray();
}
}
+
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]