Skip to content

Commit aa3e236

Browse files
Refactor HeadersHandlerTests so its less flaky, had intermittent errors, so change the strategy to elimanate false positives
1 parent c8ccc88 commit aa3e236

File tree

2 files changed

+34
-6
lines changed

2 files changed

+34
-6
lines changed

modules/jaxws-integration/src/test/java/org/apache/axis2/jaxws/sample/headershandler/HeadersServerLogicalHandler.java

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,17 +129,24 @@ public boolean handleMessage(LogicalMessageContext messagecontext) {
129129

130130
LogicalMessage msg = messagecontext.getMessage();
131131
String st = getStringFromSourcePayload(msg.getPayload());
132-
String txt = String.valueOf(Integer.valueOf(getFirstArg(st)) - 1);
132+
int firstArg = Integer.valueOf(getFirstArg(st));
133+
// FIXED INTERMITTENT TEST FAILURE: Extract second parameter value to check precisely
134+
int secondArg = Integer.valueOf(getSecondArg(st));
135+
136+
String txt = String.valueOf(firstArg - 1);
133137
st = replaceFirstArg(st, txt);
134138
msg.setPayload(new StreamSource(new StringBufferInputStream(st)));
135-
139+
136140
tracker.removedHeader(acoh4);
137141
requestHeaders.remove(TestHeaders.ACOH4_HEADER_QNAME);
138142

139-
if (st.contains("66")) {
143+
// FIXED INTERMITTENT TEST FAILURE: Previously used unreliable st.contains("66")/st.contains("33")
144+
// checks on entire XML payload string, which could match XML structure/namespaces causing false positives.
145+
// Now check the actual parsed parameter values to avoid intermittent failures.
146+
if (secondArg == 66) {
140147
// test flow reversal and handleFault method ability to access/set headers
141148
throw new ProtocolException("I don't like 66");
142-
} else if (st.contains("33")) {
149+
} else if (secondArg == 33) {
143150
// test flow reversal, without handleFault flow
144151
return false;
145152
}
@@ -157,6 +164,22 @@ private static String getFirstArg(String payloadString) {
157164
return returnString;
158165
}
159166

167+
/**
168+
* Extract the second argument from the XML payload string.
169+
* Added to fix intermittent test failure - enables precise parameter value checking
170+
* instead of unreliable substring matching on entire XML payload.
171+
*/
172+
private static String getSecondArg(String payloadString) {
173+
StringTokenizer st = new StringTokenizer(payloadString, ">");
174+
st.nextToken(); // skip first token.
175+
st.nextToken(); // skip second
176+
st.nextToken(); // skip third (first arg)
177+
st.nextToken(); // skip fourth
178+
String tempString = st.nextToken();
179+
String returnString = new StringTokenizer(tempString, "<").nextToken();
180+
return returnString;
181+
}
182+
160183
private static String replaceFirstArg(String payloadString, String newArg) {
161184
String firstArg = getFirstArg(payloadString);
162185
payloadString = payloadString.replaceFirst(firstArg, newArg);

modules/jaxws-integration/src/test/java/org/apache/axis2/jaxws/sample/headershandler/HeadersServerProtocolHandler.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,15 @@ public boolean handleMessage(SOAPMessageContext messagecontext) {
7777
// this is the second server outbound handler hit
7878
Map<QName, List<String>> requestHeaders = (Map<QName, List<String>>)messagecontext.get(Constants.JAXWS_OUTBOUND_SOAP_HEADERS);
7979

80-
// if the message object contains "33", it means we reversed directions in the "next inbound" server handler
80+
// if the message contains the sum 43 (10+33), it means we reversed directions in the "next inbound" server handler
8181
// For testing purposes, we add a header here that would have been added by the previous handler in the flow.
82+
//
83+
// FIXED INTERMITTENT TEST FAILURE: Previously used unreliable contains("33") check on SOAP body string
84+
// representation, which could match XML structure/namespaces causing false positives. Now use precise
85+
// equality check for the expected result sum (10+33=43) to avoid intermittent failures.
8286
try {
83-
if (messagecontext.getMessage().getSOAPBody().getChildElements().next().toString().contains("33")) {
87+
String soapBodyText = messagecontext.getMessage().getSOAPBody().getTextContent();
88+
if (soapBodyText != null && soapBodyText.trim().equals("43")) {
8489
String acoh1 = TestHeaders.createHeaderXMLString(TestHeaders.ACOH1_HEADER_QNAME, TestHeaders.CONTENT_SMALL1);
8590
List<String> acoh1list = new ArrayList<String>();
8691
acoh1list.add(acoh1);

0 commit comments

Comments
 (0)