Skip to content

Refactor Example Tests and move examples/offline into /configuration/offline.apis.yaml#2833

Merged
predic8 merged 3 commits into
masterfrom
move-examples-offline
Feb 25, 2026
Merged

Refactor Example Tests and move examples/offline into /configuration/offline.apis.yaml#2833
predic8 merged 3 commits into
masterfrom
move-examples-offline

Conversation

@christiangoerdes

@christiangoerdes christiangoerdes commented Feb 25, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • Refactor
    • Removed offline launcher scripts for Windows and Unix.
    • Centralized startup: many example tests now use a common test base instead of per-test startup scripts.
    • Tests now supply command-line parameters and environment variables via new hooks, replacing per-test process-management helpers.
    • Test builder API standardized to use withParameters/withEnv for process invocation.

@coderabbitai

coderabbitai Bot commented Feb 25, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 93a8b41 and f8bb732.

📒 Files selected for processing (3)
  • distribution/src/test/java/com/predic8/membrane/examples/util/Process2.java
  • distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/OfflineExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/tutorials/AbstractMembraneTutorialTest.java
🚧 Files skipped from review as they are similar to previous changes (2)
  • distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/OfflineExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/util/Process2.java

📝 Walkthrough

Walkthrough

Removed OS-specific offline launchers; introduced test-base extension points for passing CLI parameters and env vars; Process2.Builder API renamed to withParameters/withEnv; many tests switched to a common AbstractSampleMemaneStartStopTestcase or now supply params/envs instead of starting auxiliary proxy scripts.

Changes

Cohort / File(s) Summary
Removed launchers
distribution/examples/offline/membrane.cmd, distribution/examples/offline/membrane.sh
Deleted Windows and POSIX launcher scripts that located MEMBRANE_HOME and delegated to run-membrane.
Test harness & Process2 API
distribution/src/test/java/com/predic8/membrane/examples/util/DistributionExtractingTestcase.java, distribution/src/test/java/com/predic8/membrane/examples/util/Process2.java
Added extension points getParameters() and getEnvs() to the test base; replaced Builder.parameters(String) with Builder.withParameters(String) and added Builder.withEnv(Map<String,String>); startup now applies parameters and env map from base class.
Offline example / config relocation
distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/OfflineExampleTest.java
Changed example directory to /configuration and supplies -c offline.apis.yaml via getParameters().
Tests switching to shared base / simplified startup
distribution/src/test/java/com/predic8/membrane/examples/withinternet/..., distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/... (many files)
Many tests now extend AbstractSampleMembraneStartStopTestcase or override getParameters()/getEnvs(); removed per-test Process2 proxy startups and simplified test bodies to call the running service directly (RestAssured / HttpAssertions adjustments).
Builder callsite updates
distribution/src/test/java/.../AbstractMembraneTutorialTest.java, .../EnvironmentVariablesTutorialTest.java, various example tests (e.g., OAuth2* tests, Loadbalancing health monitor)
Replaced .parameters(...) usages with .withParameters(...) and updated callsites to new Builder API..

Sequence Diagram(s)

(Skipped)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related issues

Possibly related PRs

Suggested labels

7.x

Suggested reviewers

  • predic8
  • rrayst

Poem

🐰 I hopped through scripts both .sh and .cmd,
Found params and envs tucked neat in the test bed,
Builders renamed, proxies gone from the race,
Tests now call home with a simpler embrace,
🥕 A tidy refactor — carrots for all!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 8.11% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main changes: refactoring example tests and relocating offline examples configuration, which aligns with the extensive test class hierarchy changes and file reorganization throughout the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch move-examples-offline

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@membrane-ci-server

Copy link
Copy Markdown

This pull request needs "/ok-to-test" from an authorized committer.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/OfflineExampleTest.java`:
- Around line 34-37: The startMembrane() method in OfflineExampleTest currently
overrides the lifecycle method from AbstractSampleMembraneStartStopTestcase but
lacks the `@Override` annotation; add `@Override` above the startMembrane()
declaration (keeping the existing `@BeforeEach` and throws signature) to make the
override explicit and safer during refactors, referencing the startMembrane()
method in OfflineExampleTest and the superclass
AbstractSampleMembraneStartStopTestcase.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f29fb9d and 8824f21.

📒 Files selected for processing (4)
  • distribution/examples/configuration/offline.apis.yaml
  • distribution/examples/offline/membrane.cmd
  • distribution/examples/offline/membrane.sh
  • distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/OfflineExampleTest.java
💤 Files with no reviewable changes (2)
  • distribution/examples/offline/membrane.sh
  • distribution/examples/offline/membrane.cmd

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (7)
distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/openapi/OpenAPIValidationSimpleExampleTest.java (2)

27-51: Declare test-data fields as static final constants.

These text-block literals are immutable; making them instance fields allocates them on every test instantiation without purpose.

♻️ Proposed refactor
-	final String createPersonValid = """
+	static final String createPersonValid = """
 			{"name": "Johannes Gutenberg","age": 78}
 			""";

-	final String createPersonInvalid = """
+	static final String createPersonInvalid = """
 			{"name": "Johannes Gutenberg","age": -10}
 			""";

-	final String validationResult = """
+	static final String validationResult = """
 			...
 			""";
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/openapi/OpenAPIValidationSimpleExampleTest.java`
around lines 27 - 51, The string test fixtures createPersonValid,
createPersonInvalid, and validationResult are immutable and should be declared
as static final constants to avoid per-test-instance allocation; update their
declarations in OpenAPIValidationSimpleExampleTest from instance fields to
static final fields (e.g., change the declarations of createPersonValid,
createPersonInvalid, and validationResult to static final).

58-83: Split the two scenarios into separate @Test methods.

Both scenarios are independent; bundling them in one method means a failure in the valid-path assertion silently prevents the invalid-path scenario from ever running, masking a second potential failure.

♻️ Proposed refactor
-	`@Test`
-	public void test() throws Exception {
-		// `@formatter`:off
-		// Test valid person creation
-		given()
-			.contentType(JSON)
-			.body(createPersonValid)
-		.when()
-			.post(LOCALHOST_2000 + "/persons")
-		.then()
-			.statusCode(201)
-			.body(containsString("success"));
-
-		// Test invalid person creation
-		String response =given()
-			.contentType(JSON)
-			.body(createPersonInvalid)
-		.when()
-			.post(LOCALHOST_2000 + "/persons")
-		.then()
-			.statusCode(400)
-			.extract().response().asString();
-		// `@formatter`:on
-
-		JSONAssert.assertEquals(validationResult, response, false);
-	}
+	`@Test`
+	public void validPersonCreationReturns201() {
+		// `@formatter`:off
+		given()
+			.contentType(JSON)
+			.body(createPersonValid)
+		.when()
+			.post(LOCALHOST_2000 + "/persons")
+		.then()
+			.statusCode(201)
+			.body(containsString("success"));
+		// `@formatter`:on
+	}
+
+	`@Test`
+	public void invalidPersonCreationReturns400WithValidationDetails() throws Exception {
+		// `@formatter`:off
+		String response = given()
+			.contentType(JSON)
+			.body(createPersonInvalid)
+		.when()
+			.post(LOCALHOST_2000 + "/persons")
+		.then()
+			.statusCode(400)
+			.extract().response().asString();
+		// `@formatter`:on
+
+		JSONAssert.assertEquals(validationResult, response, false);
+	}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/openapi/OpenAPIValidationSimpleExampleTest.java`
around lines 58 - 83, The single test method test() mixes two independent
scenarios; split it into two `@Test` methods (e.g., testCreatePersonValid and
testCreatePersonInvalid) so the valid-path request using
given().contentType(JSON).body(createPersonValid).when().post(...).then().statusCode(201).body(containsString("success"))
runs separately from the invalid-path request that uses
given().contentType(JSON).body(createPersonInvalid).when().post(...).then().statusCode(400).extract().response().asString()
and JSONAssert.assertEquals(validationResult, response, false); move the
JSONAssert call into the invalid test, preserve any shared setup as class fields
or a `@Before` method, and keep all request/response plumbing identical to the
original to avoid changing behavior.
distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/validation/SOAPProxyValidationExampleTest.java (1)

34-44: Add .log().ifValidationFails() for diagnostic consistency.

testInvalidCitySoapRequest() logs on failure (line 56) but testValidCitySoapRequest() does not. When the valid-request test fails in CI, there's no response body logged, making failures harder to diagnose.

♻️ Proposed fix
 	.then()
+		.log().ifValidationFails()
 		.body(not(containsString("faultcode")))
 		.statusCode(200);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/validation/SOAPProxyValidationExampleTest.java`
around lines 34 - 44, The testValidCitySoapRequest method in
SOAPProxyValidationExampleTest should mirror the diagnostic logging used in
testInvalidCitySoapRequest; update the RestAssured request chain within
testValidCitySoapRequest to include .log().ifValidationFails() before the
assertions so the response body is logged on failures (add the call in the
given()/.when() chain surrounding the existing
contentType(...).body(readFile("city-soap.xml")).post(...) sequence).
distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/test/CBRXPathExampleTest.java (1)

34-55: Make XML Content-Type explicit for all three POSTs.

At Lines 34-55, two XML requests (order.xml, import.xml) omit .contentType(APPLICATION_XML) while express.xml sets it. REST Assured does not automatically add a Content-Type header when .contentType() is not called, so making it explicit ensures consistency and clearly expresses test intent rather than relying on implicit server behavior.

Suggested patch
 		given()
+			.contentType(APPLICATION_XML)
 			.body(readFile("order.xml"))
 			.post(LOCALHOST_2000)
 		.then()
@@
 		given()
+			.contentType(APPLICATION_XML)
 			.body(readFile("import.xml"))
 			.post(LOCALHOST_2000)
 			.then()
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/test/CBRXPathExampleTest.java`
around lines 34 - 55, Two of the REST Assured requests use
given().body(readFile(...)) without setting Content-Type while express.xml does;
update the first and third POST requests (the ones calling readFile("order.xml")
and readFile("import.xml") in CBRXPathExampleTest) to include
.contentType(APPLICATION_XML) before .body(...) or before .post(LOCALHOST_2000)
so all three XML requests explicitly set the XML Content-Type header for
consistency and clarity.
distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/test/InternalProxyExampleTest.java (1)

51-52: Unused .extract().asString() return values

The extracted strings in both the second and third given/when/then chains are discarded. Unless body-inspection logic is planned, drop the .extract().asString() tails to keep the assertions concise.

♻️ Proposed cleanup
         .then()
             .statusCode(200)
-            .body(containsStringIgnoringCase("Normal"))
-            .extract()
-            .asString();
+            .body(containsStringIgnoringCase("Normal"));

Apply the same change to lines 67-69.

Also applies to: 68-69

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/test/InternalProxyExampleTest.java`
around lines 51 - 52, In InternalProxyExampleTest remove the unused
.extract().asString() calls from the second and third given/when/then chains
(they discard the return value) so the assertions read directly from the
response; locate the chains in class InternalProxyExampleTest and delete the
.extract().asString() tail occurrences (also remove the duplicate at the other
occurrence noted around the same test block) to keep assertions concise.
distribution/src/test/java/com/predic8/membrane/examples/util/Process2.java (1)

85-93: Add null-safety at the new Builder API boundary.

withEnv(null) and withParameters(null) can produce brittle runtime behavior. Guard these inputs early to avoid opaque failures later in startup.

♻️ Proposed hardening
 		public Builder withEnv(Map<String, String> envs) {
-			env.putAll(envs);
+			if (envs == null || envs.isEmpty())
+				return this;
+			env.putAll(envs);
 			return this;
 		}
 
 		public Builder withParameters(String parameters) {
-			this.parameters = parameters;
+			this.parameters = parameters == null ? "" : parameters;
 			return this;
 		}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@distribution/src/test/java/com/predic8/membrane/examples/util/Process2.java`
around lines 85 - 93, The Builder API should guard against null inputs: update
Builder.withEnv(Map<String,String> envs) to check for null before calling
env.putAll (e.g., if envs != null then env.putAll(envs)) so withEnv(null)
becomes a no-op, and update Builder.withParameters(String parameters) to
null-safe assignment (e.g., this.parameters = parameters != null ? parameters :
"" or another neutral default) so withParameters(null) won’t produce NPEs later;
keep using the existing env field and parameters field names and the same method
signatures.
distribution/src/test/java/com/predic8/membrane/examples/withinternet/test/ThrottleExampleTest.java (1)

34-36: Use a monotonic clock for elapsed-time assertion.

At lines 34 and 36, System.currentTimeMillis() can shift with system clock adjustments, producing flaky results in timing assertions. Replace with System.nanoTime(), which is monotonic and expressly designed for duration measurement.

Proposed fix
+import java.time.Duration;
@@
-		long start = System.currentTimeMillis();
+		long start = System.nanoTime();
 		when().get(LOCALHOST_2000).then().statusCode(200);
-        assertTrue(System.currentTimeMillis() - start >= 1000);
+        assertTrue(System.nanoTime() - start >= Duration.ofSeconds(1).toNanos());
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@distribution/src/test/java/com/predic8/membrane/examples/withinternet/test/ThrottleExampleTest.java`
around lines 34 - 36, In ThrottleExampleTest replace the use of
System.currentTimeMillis() for measuring elapsed time with System.nanoTime():
capture start = System.nanoTime() before the request and compute the elapsed
duration using System.nanoTime() - start, then assert against an equivalent
nanosecond threshold (e.g. >= 1_000_000_000L) or convert to milliseconds by
dividing by 1_000_000 before comparing to 1000; update the assertion that
currently references start and System.currentTimeMillis() accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/test/AccessLogExampleTest.java`:
- Around line 34-47: The test currently calls WaitableConsoleEvent.occurred()
which can return false if log output is delayed; update the assertion to use
WaitableConsoleEvent.waitFor(...) with a bounded timeout (e.g. a few seconds) to
wait for the event instead: locate the console variable in the console() test
method and replace the assertTrue(console.occurred()) call with an assertion
that checks the boolean result of console.waitFor(timeoutMillis) (use
WaitableConsoleEvent.waitFor) so the test waits deterministically for the log
event.

---

Nitpick comments:
In `@distribution/src/test/java/com/predic8/membrane/examples/util/Process2.java`:
- Around line 85-93: The Builder API should guard against null inputs: update
Builder.withEnv(Map<String,String> envs) to check for null before calling
env.putAll (e.g., if envs != null then env.putAll(envs)) so withEnv(null)
becomes a no-op, and update Builder.withParameters(String parameters) to
null-safe assignment (e.g., this.parameters = parameters != null ? parameters :
"" or another neutral default) so withParameters(null) won’t produce NPEs later;
keep using the existing env field and parameters field names and the same method
signatures.

In
`@distribution/src/test/java/com/predic8/membrane/examples/withinternet/test/ThrottleExampleTest.java`:
- Around line 34-36: In ThrottleExampleTest replace the use of
System.currentTimeMillis() for measuring elapsed time with System.nanoTime():
capture start = System.nanoTime() before the request and compute the elapsed
duration using System.nanoTime() - start, then assert against an equivalent
nanosecond threshold (e.g. >= 1_000_000_000L) or convert to milliseconds by
dividing by 1_000_000 before comparing to 1000; update the assertion that
currently references start and System.currentTimeMillis() accordingly.

In
`@distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/openapi/OpenAPIValidationSimpleExampleTest.java`:
- Around line 27-51: The string test fixtures createPersonValid,
createPersonInvalid, and validationResult are immutable and should be declared
as static final constants to avoid per-test-instance allocation; update their
declarations in OpenAPIValidationSimpleExampleTest from instance fields to
static final fields (e.g., change the declarations of createPersonValid,
createPersonInvalid, and validationResult to static final).
- Around line 58-83: The single test method test() mixes two independent
scenarios; split it into two `@Test` methods (e.g., testCreatePersonValid and
testCreatePersonInvalid) so the valid-path request using
given().contentType(JSON).body(createPersonValid).when().post(...).then().statusCode(201).body(containsString("success"))
runs separately from the invalid-path request that uses
given().contentType(JSON).body(createPersonInvalid).when().post(...).then().statusCode(400).extract().response().asString()
and JSONAssert.assertEquals(validationResult, response, false); move the
JSONAssert call into the invalid test, preserve any shared setup as class fields
or a `@Before` method, and keep all request/response plumbing identical to the
original to avoid changing behavior.

In
`@distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/test/CBRXPathExampleTest.java`:
- Around line 34-55: Two of the REST Assured requests use
given().body(readFile(...)) without setting Content-Type while express.xml does;
update the first and third POST requests (the ones calling readFile("order.xml")
and readFile("import.xml") in CBRXPathExampleTest) to include
.contentType(APPLICATION_XML) before .body(...) or before .post(LOCALHOST_2000)
so all three XML requests explicitly set the XML Content-Type header for
consistency and clarity.

In
`@distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/test/InternalProxyExampleTest.java`:
- Around line 51-52: In InternalProxyExampleTest remove the unused
.extract().asString() calls from the second and third given/when/then chains
(they discard the return value) so the assertions read directly from the
response; locate the chains in class InternalProxyExampleTest and delete the
.extract().asString() tail occurrences (also remove the duplicate at the other
occurrence noted around the same test block) to keep assertions concise.

In
`@distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/validation/SOAPProxyValidationExampleTest.java`:
- Around line 34-44: The testValidCitySoapRequest method in
SOAPProxyValidationExampleTest should mirror the diagnostic logging used in
testInvalidCitySoapRequest; update the RestAssured request chain within
testValidCitySoapRequest to include .log().ifValidationFails() before the
assertions so the response body is logged on failures (add the call in the
given()/.when() chain surrounding the existing
contentType(...).body(readFile("city-soap.xml")).post(...) sequence).

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8824f21 and 93a8b41.

📒 Files selected for processing (32)
  • distribution/src/test/java/com/predic8/membrane/examples/util/DistributionExtractingTestcase.java
  • distribution/src/test/java/com/predic8/membrane/examples/util/Process2.java
  • distribution/src/test/java/com/predic8/membrane/examples/withinternet/DistributionApisYamlExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withinternet/config/ProxiesXMLExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withinternet/rest2soap/Rest2SOAPTemplateExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withinternet/ssl/ToBackendExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withinternet/test/ACLExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withinternet/test/ConfigurationPropertiesTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withinternet/test/FileExchangeStoreExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withinternet/test/FormValidationExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withinternet/test/Loadbalancing4XmlSessionExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withinternet/test/LoggingCSVExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withinternet/test/LoggingJsonExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withinternet/test/OutgoingAPIGatewayExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withinternet/test/RewriterExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withinternet/test/SpELExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withinternet/test/ThrottleExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withinternet/test/VersioningSoapXsltExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/OfflineExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/message_transformation/Xml2JsonExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/openapi/OpenAPIValidationSimpleExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/test/AccessLogExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/test/CBRXPathExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/test/InternalProxyExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/test/Loadbalancing6HealthMonitorExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/test/OAuth2APIExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/test/OAuth2CredentialsExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/test/XMLValidationExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/validation/JSONSchemaValidationExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/validation/SOAPProxyValidationExampleTest.java
  • distribution/src/test/java/com/predic8/membrane/tutorials/AbstractMembraneTutorialTest.java
  • distribution/src/test/java/com/predic8/membrane/tutorials/advanced/EnvironmentVariablesTutorialTest.java
🚧 Files skipped from review as they are similar to previous changes (1)
  • distribution/src/test/java/com/predic8/membrane/examples/withoutinternet/OfflineExampleTest.java

@christiangoerdes christiangoerdes marked this pull request as ready for review February 25, 2026 09:42
@predic8 predic8 merged commit edc941f into master Feb 25, 2026
4 of 5 checks passed
@predic8 predic8 deleted the move-examples-offline branch February 25, 2026 09:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Move examples/offline into /examples/configuration/offline.apis.yaml

2 participants