SLING-10860 ignore server retries if response status code is in the expected status
diff --git a/src/main/java/org/apache/sling/testing/Constants.java b/src/main/java/org/apache/sling/testing/Constants.java
index 37e2aee..f671cae 100644
--- a/src/main/java/org/apache/sling/testing/Constants.java
+++ b/src/main/java/org/apache/sling/testing/Constants.java
@@ -32,4 +32,9 @@
      */
     public static final String PARAMETER_CHARSET = "_charset_";
     public static final String CHARSET_UTF8 = "utf-8";
+
+    /**
+     * Http Context Attributes
+     */
+    public static final String EXPECTED_STATUS = "expected_status";
 }
diff --git a/src/main/java/org/apache/sling/testing/clients/AbstractSlingClient.java b/src/main/java/org/apache/sling/testing/clients/AbstractSlingClient.java
index 59622c8..ba0f0c4 100644
--- a/src/main/java/org/apache/sling/testing/clients/AbstractSlingClient.java
+++ b/src/main/java/org/apache/sling/testing/clients/AbstractSlingClient.java
@@ -37,6 +37,8 @@
 import java.util.Map;
 import java.util.UUID;
 
+import static org.apache.sling.testing.Constants.EXPECTED_STATUS;
+
 /**
  * The abstract base client for all implementing integration test clients.
  */
@@ -309,6 +311,7 @@
             throws ClientException {
         // create context from config
         HttpClientContext context = createHttpClientContextFromConfig();
+        context.setAttribute(EXPECTED_STATUS, expectedStatus);
 
         // add headers
         if (headers != null) {
@@ -360,6 +363,7 @@
             throws ClientException {
         // create context from config
         HttpClientContext context = createHttpClientContextFromConfig();
+        context.setAttribute(EXPECTED_STATUS, expectedStatus);
 
         HttpHost host = new HttpHost(getUrl().getHost(), getUrl().getPort(), getUrl().getScheme());
         HttpRequest request = new BasicHttpRequest(method, uri);
diff --git a/src/main/java/org/apache/sling/testing/clients/util/ServerErrorRetryStrategy.java b/src/main/java/org/apache/sling/testing/clients/util/ServerErrorRetryStrategy.java
index 0ba972e..5ae0903 100644
--- a/src/main/java/org/apache/sling/testing/clients/util/ServerErrorRetryStrategy.java
+++ b/src/main/java/org/apache/sling/testing/clients/util/ServerErrorRetryStrategy.java
@@ -29,6 +29,7 @@
 import java.util.Collection;
 
 import static org.apache.http.HttpStatus.*;
+import static org.apache.sling.testing.Constants.EXPECTED_STATUS;
 
 /**
  * {code ServiceUnavailableRetryStrategy} strategy for retrying request in case of a 5XX response code
@@ -43,8 +44,8 @@
 
     @Override
     public boolean retryRequest(final HttpResponse response, final int executionCount, final HttpContext context) {
-        boolean needsRetry = executionCount <= SystemPropertiesConfig.getHttpRetries() && responseRetryCondition(response);
-
+        int[] expectedStatus = (int[]) context.getAttribute(EXPECTED_STATUS);
+        boolean needsRetry = executionCount <= SystemPropertiesConfig.getHttpRetries() && responseRetryCondition(response, expectedStatus);
         if (SystemPropertiesConfig.isHttpLogRetries() && needsRetry && LOG.isWarnEnabled()) {
             LOG.warn("Request retry needed due to service unavailable response");
             LOG.warn("Response headers contained:");
@@ -64,9 +65,13 @@
         return SystemPropertiesConfig.getHttpRetriesDelay();
     }
 
-    private boolean responseRetryCondition(final HttpResponse response) {
+    private boolean responseRetryCondition(final HttpResponse response, int... expectedStatus) {
         final Integer statusCode = response.getStatusLine().getStatusCode();
         final Collection<Integer> errorCodes = SystemPropertiesConfig.getHttpRetriesErrorCodes();
+        if ((expectedStatus != null) && (expectedStatus.length > 0) &&
+                Arrays.stream(expectedStatus).anyMatch(expected -> statusCode == expected)) {
+            return true;
+        }
         if (errorCodes != null && !errorCodes.isEmpty()) {
             return errorCodes.contains(statusCode);
         } else {