This is an automated email from the ASF dual-hosted git repository.

sseifert pushed a commit to branch feature/SLING-12600-unflaky-tests
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-launchpad-integration-tests.git

commit 91f90c19c0aef1b140451186ce3e2a3752ce332f
Author: Stefan Seifert <[email protected]>
AuthorDate: Mon Nov 24 20:14:24 2025 +0100

    SLING-12600 ensure most app scripts are uploaded to unique folder with 
unique resource type
    to avoid flakyness when running integration tests on windows
---
 .../webapp/integrationtest/ForwardTest.java        |  5 ++-
 .../webapp/integrationtest/GetWithSuffixTest.java  |  6 +++-
 .../webapp/integrationtest/IncludeTest.java        |  5 ++-
 .../webapp/integrationtest/JspForwardTest.java     |  5 ++-
 .../NodeTypeBasedRenderingTest.java                |  3 +-
 .../integrationtest/NodetypeRenderingTest.java     |  5 ++-
 .../integrationtest/RequestAttributeTest.java      | 17 ++++++----
 .../integrationtest/util/UniqueResourceType.java   | 37 ++++++++++++++++++++++
 8 files changed, 70 insertions(+), 13 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/ForwardTest.java
 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/ForwardTest.java
index fa48793..825d7e4 100644
--- 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/ForwardTest.java
+++ 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/ForwardTest.java
@@ -26,6 +26,7 @@ import java.util.Set;
 
 import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.sling.commons.testing.integration.HttpTestBase;
+import 
org.apache.sling.launchpad.webapp.integrationtest.util.UniqueResourceType;
 import org.apache.sling.servlets.post.SlingPostConstants;
 
 /** Test the {link ScriptHelper#forward) functionality */
@@ -48,12 +49,14 @@ public class ForwardTest extends HttpTestBase {
 
         // Create the test nodes under a path that's specific to this class to
         // allow collisions
+        UniqueResourceType urt = new UniqueResourceType();
         final String url = HTTP_BASE_URL + "/" + getClass().getSimpleName() + 
"/" + System.currentTimeMillis()
                 + SlingPostConstants.DEFAULT_CREATE_SUFFIX;
         final Map<String, String> props = new HashMap<String, String>();
 
         // Create two test nodes and store their paths
         testTextA = "Text A " + System.currentTimeMillis();
+        props.put("sling:resourceType", urt.getResourceType());
         props.put("text", testTextA);
         nodeUrlA = testClient.createNode(url, props);
         String pathToInclude = nodeUrlA.substring(HTTP_BASE_URL.length());
@@ -87,7 +90,7 @@ public class ForwardTest extends HttpTestBase {
         toDelete.add(uploadTestScript(scriptPath, "forward-forced.esp", 
"html.esp"));
 
         // The main rendering script goes under /apps in the repository
-        scriptPath = "/apps/nt/unstructured";
+        scriptPath = urt.getScriptPath();
         testClient.mkdirs(WEBDAV_BASE_URL, scriptPath);
         toDelete.add(uploadTestScript(scriptPath, "forward-test.esp", 
"html.esp"));
     }
diff --git 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/GetWithSuffixTest.java
 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/GetWithSuffixTest.java
index f1268b9..3b8967b 100644
--- 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/GetWithSuffixTest.java
+++ 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/GetWithSuffixTest.java
@@ -24,6 +24,8 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
+import 
org.apache.sling.launchpad.webapp.integrationtest.util.UniqueResourceType;
+
 /** GET requests with a suffix should fail with a 404, otherwise
  *  we get a lot of extra possible URLs which point to the same
  *  content.
@@ -38,13 +40,15 @@ public class GetWithSuffixTest extends RenderingTestBase {
         testText = "This is a test " + System.currentTimeMillis();
 
         // create the test node, under a path that's specific to this class to 
allow collisions
+        UniqueResourceType urt = new UniqueResourceType();
         final String url = HTTP_BASE_URL + "/" + getClass().getSimpleName() + 
"_" + System.currentTimeMillis();
         final Map<String, String> props = new HashMap<String, String>();
+        props.put("sling:resourceType", urt.getResourceType());
         props.put("text", testText);
         displayUrl = testClient.createNode(url, props);
 
         // the rendering script goes under /apps in the repository
-        scriptPath = "/apps/nt/unstructured";
+        scriptPath = urt.getScriptPath();
         testClient.mkdirs(WEBDAV_BASE_URL, scriptPath);
     }
 
diff --git 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/IncludeTest.java
 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/IncludeTest.java
index 83fd029..e0e9978 100644
--- 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/IncludeTest.java
+++ 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/IncludeTest.java
@@ -26,6 +26,7 @@ import java.util.Set;
 
 import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.sling.commons.testing.integration.HttpTestBase;
+import 
org.apache.sling.launchpad.webapp.integrationtest.util.UniqueResourceType;
 import org.apache.sling.servlets.post.SlingPostConstants;
 
 /** Test the {link ScriptHelper#include) functionality */
@@ -52,7 +53,9 @@ public class IncludeTest extends HttpTestBase {
         final Map<String, String> props = new HashMap<String, String>();
 
         // Create two test nodes and store their paths
+        UniqueResourceType urt = new UniqueResourceType();
         testTextA = "Text A " + System.currentTimeMillis();
+        props.put("sling:resourceType", urt.getResourceType());
         props.put("text", testTextA);
         nodeUrlA = testClient.createNode(url, props);
         String pathToInclude = nodeUrlA.substring(HTTP_BASE_URL.length());
@@ -86,7 +89,7 @@ public class IncludeTest extends HttpTestBase {
         toDelete.add(uploadTestScript(scriptPath, "include-forced.esp", 
"html.esp"));
 
         // The main rendering script goes under /apps in the repository
-        scriptPath = "/apps/nt/unstructured";
+        scriptPath = urt.getScriptPath();
         testClient.mkdirs(WEBDAV_BASE_URL, scriptPath);
         toDelete.add(uploadTestScript(scriptPath, "include-test.esp", 
"html.esp"));
     }
diff --git 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/JspForwardTest.java
 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/JspForwardTest.java
index 9cd09ba..6dc8dbb 100644
--- 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/JspForwardTest.java
+++ 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/JspForwardTest.java
@@ -28,6 +28,7 @@ import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.sling.commons.testing.integration.HttpTest;
 import org.apache.sling.commons.testing.junit.Retry;
 import org.apache.sling.commons.testing.junit.RetryRule;
+import 
org.apache.sling.launchpad.webapp.integrationtest.util.UniqueResourceType;
 import org.apache.sling.servlets.post.SlingPostConstants;
 import org.junit.After;
 import org.junit.Before;
@@ -68,7 +69,9 @@ public class JspForwardTest {
         final Map<String, String> props = new HashMap<String, String>();
 
         // Create two test nodes and store their paths
+        UniqueResourceType urt = new UniqueResourceType();
         testTextA = "Text A " + System.currentTimeMillis();
+        props.put("sling:resourceType", urt.getResourceType());
         props.put("text", testTextA);
         nodeUrlA = H.getTestClient().createNode(url, props);
         String pathToInclude = 
nodeUrlA.substring(HttpTest.HTTP_BASE_URL.length());
@@ -108,7 +111,7 @@ public class JspForwardTest {
         toDelete.add(H.uploadTestScript(scriptPath, "forward-forced.jsp", 
"html.jsp"));
 
         // The main rendering script goes under /apps in the repository
-        scriptPath = "/apps/nt/unstructured";
+        scriptPath = urt.getScriptPath();
         H.getTestClient().mkdirs(HttpTest.WEBDAV_BASE_URL, scriptPath);
         toDelete.add(H.uploadTestScript(scriptPath, "forward-test.jsp", 
"html.jsp"));
     }
diff --git 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/NodeTypeBasedRenderingTest.java
 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/NodeTypeBasedRenderingTest.java
index 274880e..8cf2c05 100644
--- 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/NodeTypeBasedRenderingTest.java
+++ 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/NodeTypeBasedRenderingTest.java
@@ -27,7 +27,8 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 /** Test rendering resources based on their JCR node type */
 public class NodeTypeBasedRenderingTest extends RenderingTestBase {
-    public static final String TEST_PATH = "/testing/" + 
NodeTypeBasedRenderingTest.class.getSimpleName();
+    public static final String TEST_PATH =
+            "/testing/" + NodeTypeBasedRenderingTest.class.getSimpleName() + 
"/" + System.currentTimeMillis();
     private String testNodeUrl;
     private List<String> toDelete = new ArrayList<String>();
     private static AtomicInteger counter = new AtomicInteger();
diff --git 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/NodetypeRenderingTest.java
 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/NodetypeRenderingTest.java
index e84e430..fb1f75c 100644
--- 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/NodetypeRenderingTest.java
+++ 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/NodetypeRenderingTest.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
+import 
org.apache.sling.launchpad.webapp.integrationtest.util.UniqueResourceType;
 import org.apache.sling.servlets.post.SlingPostConstants;
 
 /** Test creating a Node and rendering it using scripts in
@@ -40,15 +41,17 @@ public class NodetypeRenderingTest extends 
RenderingTestBase {
         testText = "This is a test " + System.currentTimeMillis();
 
         // create the test node, under a path that's specific to this class to 
allow collisions
+        UniqueResourceType urt = new UniqueResourceType();
         secondFolderOfContentPath = "" + System.currentTimeMillis();
         final String url = HTTP_BASE_URL + "/" + getClass().getSimpleName() + 
"/" + secondFolderOfContentPath
                 + SlingPostConstants.DEFAULT_CREATE_SUFFIX;
         final Map<String, String> props = new HashMap<String, String>();
+        props.put("sling:resourceType", urt.getResourceType());
         props.put("text", testText);
         displayUrl = testClient.createNode(url, props);
 
         // the rendering script goes under /apps in the repository
-        scriptPath = "/apps/nt/unstructured";
+        scriptPath = urt.getScriptPath();
         testClient.mkdirs(WEBDAV_BASE_URL, scriptPath);
     }
 
diff --git 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/RequestAttributeTest.java
 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/RequestAttributeTest.java
index fbb7078..fbb5116 100644
--- 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/RequestAttributeTest.java
+++ 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/RequestAttributeTest.java
@@ -27,6 +27,7 @@ import java.util.Properties;
 import java.util.Set;
 
 import org.apache.sling.commons.testing.integration.HttpTestBase;
+import 
org.apache.sling.launchpad.webapp.integrationtest.util.UniqueResourceType;
 import org.apache.sling.servlets.post.SlingPostConstants;
 
 /**
@@ -36,6 +37,8 @@ import org.apache.sling.servlets.post.SlingPostConstants;
  */
 public class RequestAttributeTest extends HttpTestBase {
 
+    private UniqueResourceType urt = new UniqueResourceType();
+
     private String nodeUrlA;
 
     private String nodeUrlB;
@@ -57,16 +60,16 @@ public class RequestAttributeTest extends HttpTestBase {
 
         // Create two test nodes and store their paths
         props.put("text", "texta");
-        props.put("jcr:primaryType", "nt:unstructured");
+        props.put("sling:resourceType", urt.getResourceType());
         nodeUrlA = testClient.createNode(url, props);
 
         props.clear();
         props.put("text", "textb");
-        props.put("jcr:primaryType", "nt:unstructured");
+        props.put("sling:resourceType", urt.getResourceType());
         nodeUrlB = testClient.createNode(nodeUrlA + "/child", props);
 
         // The main rendering script goes under /apps in the repository
-        scriptPath = "/apps/nt/unstructured";
+        scriptPath = urt.getScriptPath();
         testClient.mkdirs(WEBDAV_BASE_URL, scriptPath);
         toDelete.add(uploadTestScript(scriptPath, 
"request-attribute-test.esp", "txt.esp"));
         toDelete.add(uploadTestScript(scriptPath, 
"request-attribute-test-sel1.esp", "sel1.txt.esp"));
@@ -98,17 +101,17 @@ public class RequestAttributeTest extends HttpTestBase {
         assertEquals("Request Resource 1 is null", "null", 
props.get("resource01"));
 
         // this is from sel1.txt.esp, included by txt.esp
-        assertEquals("Request Servlet 10", "/apps/nt/unstructured/txt.esp", 
props.get("servlet10"));
+        assertEquals("Request Servlet 10", urt.getScriptPath() + "/txt.esp", 
props.get("servlet10"));
         assertEquals("Request Resource 10", pA, props.get("resource10"));
-        assertEquals("Request Servlet 11", "/apps/nt/unstructured/txt.esp", 
props.get("servlet11"));
+        assertEquals("Request Servlet 11", urt.getScriptPath() + "/txt.esp", 
props.get("servlet11"));
         assertEquals("Request Resource 11", pA, props.get("resource11"));
 
         // this is from sel2.txt.esp, included by txt.esp
-        assertEquals("Request Servlet 20", "/apps/nt/unstructured/txt.esp", 
props.get("servlet20"));
+        assertEquals("Request Servlet 20", urt.getScriptPath() + "/txt.esp", 
props.get("servlet20"));
         assertEquals("Request Resource 20", pA, props.get("resource20"));
 
         // this is from sel3.txt.esp, included by sel1.txt.esp
-        assertEquals("Request Servlet 30", 
"/apps/nt/unstructured/sel1.txt.esp", props.get("servlet30"));
+        assertEquals("Request Servlet 30", urt.getScriptPath() + 
"/sel1.txt.esp", props.get("servlet30"));
         assertEquals("Request Resource 30", pB, props.get("resource30"));
     }
 }
diff --git 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/util/UniqueResourceType.java
 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/util/UniqueResourceType.java
new file mode 100644
index 0000000..2c92eb4
--- /dev/null
+++ 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/util/UniqueResourceType.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.sling.launchpad.webapp.integrationtest.util;
+
+import java.util.UUID;
+
+/**
+ * Use a unique resource type for each unit test to avoid interference 
(SLING-12600).
+ */
+public class UniqueResourceType {
+
+    private final String uid = UUID.randomUUID().toString();
+
+    public String getResourceType() {
+        return "test/rt-" + uid;
+    }
+
+    public String getScriptPath() {
+        return "/apps/" + getResourceType();
+    }
+}

Reply via email to