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]

Reply via email to