This is an automated email from the ASF dual-hosted git repository. zhfeng pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push: new 771d92245f Migrate file watch tests to new harness #3584 (#5840) 771d92245f is described below commit 771d92245f602cfefaa7206ce2ee716c640f578b Author: Alexandre Gallice <aldettin...@gmail.com> AuthorDate: Wed Mar 6 02:27:41 2024 +0100 Migrate file watch tests to new harness #3584 (#5840) --- .../camel/quarkus/component/file/it/FileIT.java | 24 ------ .../camel/quarkus/component/file/it/FileTest.java | 88 ---------------------- .../component/file/it/NonFlakyFileTest.java | 74 +++++++++++++++++- 3 files changed, 73 insertions(+), 113 deletions(-) diff --git a/integration-tests/file/src/test/java/org/apache/camel/quarkus/component/file/it/FileIT.java b/integration-tests/file/src/test/java/org/apache/camel/quarkus/component/file/it/FileIT.java deleted file mode 100644 index 62dda77376..0000000000 --- a/integration-tests/file/src/test/java/org/apache/camel/quarkus/component/file/it/FileIT.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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.camel.quarkus.component.file.it; - -import io.quarkus.test.junit.QuarkusIntegrationTest; - -@QuarkusIntegrationTest -class FileIT extends FileTest { - -} diff --git a/integration-tests/file/src/test/java/org/apache/camel/quarkus/component/file/it/FileTest.java b/integration-tests/file/src/test/java/org/apache/camel/quarkus/component/file/it/FileTest.java deleted file mode 100644 index 12238e8cc6..0000000000 --- a/integration-tests/file/src/test/java/org/apache/camel/quarkus/component/file/it/FileTest.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * 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.camel.quarkus.component.file.it; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.concurrent.TimeUnit; - -import io.quarkus.test.junit.QuarkusTest; -import io.restassured.RestAssured; -import io.restassured.path.json.JsonPath; -import io.restassured.response.ValidatableResponse; -import org.apache.camel.quarkus.core.util.FileUtils; -import org.junit.jupiter.api.Test; - -import static org.awaitility.Awaitility.await; - -@QuarkusTest -class FileTest { - - @Test - public void fileWatchCreateUpdate() throws IOException { - final Path dir = Files.createTempDirectory(FileTest.class.getSimpleName()).toRealPath(); - RestAssured.given() - .queryParam("path", dir.toString()) - .get("/file-watch/get-events") - .then() - .statusCode(204); - - final Path file = dir.resolve("file.txt"); - Files.write(file, "a file content".getBytes(StandardCharsets.UTF_8)); - - awaitEvent(dir, file, "CREATE"); - - Files.write(file, "changed content".getBytes(StandardCharsets.UTF_8)); - - awaitEvent(dir, file, "MODIFY"); - - Files.delete(file); - - awaitEvent(dir, file, "DELETE"); - } - - private static void awaitEvent(final Path dir, final Path file, final String type) { - await() - .pollInterval(10, TimeUnit.MILLISECONDS) - .atMost(20, TimeUnit.SECONDS) - .until(() -> { - final ValidatableResponse response = RestAssured.given() - .queryParam("path", dir.toString()) - .get("/file-watch/get-events") - .then(); - switch (response.extract().statusCode()) { - case 204: - /* - * the event may come with some delay through all the OS and Java layers so it is - * rather normal to get 204 before getting the expected event - */ - return false; - case 200: - final JsonPath json = response - .extract() - .jsonPath(); - String expectedPath = FileUtils.nixifyPath(file); - String actualPath = json.getString("path"); - return expectedPath.equals(actualPath) && type.equals(json.getString("type")); - default: - throw new RuntimeException("Unexpected status code " + response.extract().statusCode()); - } - }); - } -} diff --git a/integration-tests/file/src/test/java/org/apache/camel/quarkus/component/file/it/NonFlakyFileTest.java b/integration-tests/file/src/test/java/org/apache/camel/quarkus/component/file/it/NonFlakyFileTest.java index 6854d55288..77a1afd429 100644 --- a/integration-tests/file/src/test/java/org/apache/camel/quarkus/component/file/it/NonFlakyFileTest.java +++ b/integration-tests/file/src/test/java/org/apache/camel/quarkus/component/file/it/NonFlakyFileTest.java @@ -17,6 +17,7 @@ package org.apache.camel.quarkus.component.file.it; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -28,12 +29,35 @@ import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; +import io.restassured.path.json.JsonPath; +import io.restassured.response.ValidatableResponse; +import org.apache.camel.quarkus.core.util.FileUtils; import org.hamcrest.Matchers; import org.junit.jupiter.api.Test; import static org.apache.camel.quarkus.component.file.it.FileResource.SEPARATOR; import static org.apache.camel.quarkus.component.file.it.FileResource.SORT_BY; -import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.*; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.BATCH_FILE_NAME_1_CONTENT; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.BATCH_FILE_NAME_2_CONTENT; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.CHARSET_READ_FILE_CONTENT; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.CHARSET_WRITE_FILE_CONTENT; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.CHARSET_WRITE_FILE_CREATION_FOLDER; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.CHARSET_WRITE_FILE_NAME; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.FILE_CREATION_FILE_CONTENT; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.FILE_CREATION_FILE_NAME; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.FILE_CREATION_FOLDER; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.FILTER_NON_SKIPPED_FILE_CONTENT; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.IDEMPOTENT_FILE_CONTENT; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.IDEMPOTENT_FILE_NAME; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.POLL_ENRICH_FILE_CONTENT; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.QUARTZ_SCHEDULED_FILE_CONTENT; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.READ_LOCK_FILE_NAME; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.READ_LOCK_FOLDER_IN; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.READ_LOCK_FOLDER_OUT; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.SORT_BY_NAME_1_CONTENT; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.SORT_BY_NAME_2_CONTENT; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.SORT_BY_NAME_3_CONTENT; +import static org.apache.camel.quarkus.component.file.it.NonFlakyFileTestResource.TEST_FILES_FOLDER; import static org.apache.commons.io.FileUtils.readFileToString; import static org.awaitility.Awaitility.await; import static org.hamcrest.core.IsEqual.equalTo; @@ -208,4 +232,52 @@ class NonFlakyFileTest { equalTo(SORT_BY_NAME_3_CONTENT + SEPARATOR + SORT_BY_NAME_2_CONTENT + SEPARATOR + SORT_BY_NAME_1_CONTENT)); } + @Test + public void fileWatchShouldCatchCreateModifyAndDeleteEvents() throws IOException { + final Path fileWatchDirectory = Files.createTempDirectory(NonFlakyFileTest.class.getSimpleName()).toRealPath(); + RestAssured.given() + .queryParam("path", fileWatchDirectory.toString()) + .get("/file-watch/get-events") + .then() + .statusCode(204); + + final Path watchedFilePath = fileWatchDirectory.resolve("watched-file.txt"); + Files.write(watchedFilePath, "a file content".getBytes(StandardCharsets.UTF_8)); + awaitEvent(fileWatchDirectory, watchedFilePath, "CREATE"); + + Files.write(watchedFilePath, "changed content".getBytes(StandardCharsets.UTF_8)); + awaitEvent(fileWatchDirectory, watchedFilePath, "MODIFY"); + + Files.delete(watchedFilePath); + awaitEvent(fileWatchDirectory, watchedFilePath, "DELETE"); + } + + private static void awaitEvent(final Path fileWatchDirectory, final Path watchedFile, final String extepecteEventType) { + await() + .pollInterval(100, TimeUnit.MILLISECONDS) + .atMost(20, TimeUnit.SECONDS) + .until(() -> { + final ValidatableResponse getEventsResponse = RestAssured.given() + .queryParam("path", fileWatchDirectory.toString()) + .get("/file-watch/get-events") + .then(); + switch (getEventsResponse.extract().statusCode()) { + case 204: + /* + * the event may come with some delay through all the OS and Java layers so it is + * rather normal to get 204 before getting the expected event + */ + return false; + case 200: + final JsonPath json = getEventsResponse.extract().jsonPath(); + + String expectedPath = FileUtils.nixifyPath(watchedFile); + String actualPath = json.getString("path"); + return expectedPath.equals(actualPath) && extepecteEventType.equals(json.getString("type")); + default: + throw new RuntimeException("Unexpected status code " + getEventsResponse.extract().statusCode()); + } + }); + } + }