ppalaga commented on a change in pull request #2548:
URL: https://github.com/apache/camel-quarkus/pull/2548#discussion_r625355121



##########
File path: 
integration-tests/file/src/main/java/org/apache/camel/quarkus/component/file/it/FileResource.java
##########
@@ -26,36 +29,102 @@
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.ConsumerTemplate;
 import org.apache.camel.Exchange;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.component.mock.MockEndpoint;
 
 @Path("/file")
 @ApplicationScoped
 public class FileResource {
 
+    public static String CONSUME_BATCH = "consumeBatch";
+    public static String SORT_BY = "sortBy";
+    public static String SEPARATOR = ";";
+
     @Inject
     ProducerTemplate producerTemplate;
 
     @Inject
     ConsumerTemplate consumerTemplate;
 
+    @Inject
+    CamelContext context;
+
     @Path("/get/{folder}/{name}")
-    @GET
+    @POST

Review comment:
       ```suggestion
       @GET
   ```
   
   No body seems to be sent, so GET is enough, isn't it?

##########
File path: 
integration-tests/file/src/test/java/org/apache/camel/quarkus/component/file/it/FileTest.java
##########
@@ -99,36 +200,78 @@ public void fileReadLock_minLength() throws Exception {
         Thread.sleep(10_000L);
 
         // Read the file that should not be there
-        RestAssured
-                .get("/file/get/{folder}/{name}", FileRoutes.READ_LOCK_OUT, 
Paths.get(fileName).getFileName())
+        RestAssured.given()
+                .post("/file/get/{folder}/{name}", FileRoutes.READ_LOCK_OUT, 
Paths.get(fileName).getFileName())
                 .then()
                 .statusCode(204);
     }
 
     @Test
     public void quartzSchedulerFilePollingConsumer() throws 
InterruptedException {
-        String fileName = RestAssured.given()
-                .contentType(ContentType.TEXT)
-                .body(FILE_BODY)
-                .post("/file/create/quartz")
-                .then()
-                .statusCode(201)
-                .extract()
-                .body()
-                .asString();
+        String fileName = createFile(FILE_BODY, "/file/create/quartz");
 
         String targetFileName = Paths.get(fileName).toFile().getName();
         await().atMost(10, TimeUnit.SECONDS).until(() -> {
             return Files.exists(Paths.get("target/quartz/out", 
targetFileName));
         });
 
         RestAssured
-                .get("/file/get/{folder}/{name}", "quartz/out", targetFileName)
+                .given()
+                .post("/file/get/{folder}/{name}", "quartz/out", 
targetFileName)
                 .then()
                 .statusCode(200)
                 .body(equalTo(FILE_BODY));
     }
 
+    private static String createFile(String content, String path) {
+        return createFile(content.getBytes(), path, null, null);

Review comment:
       String.getBytes() uses the platform default encoding - I guess there are 
platforms there in the wild having strange default encodings that might make 
these tests fail. So it is perhaps better to pass an explicit encoding, e.g. 
String.getBytes(StandardEncodings.UTF_8) to make the test robust across 
platforms and locales.

##########
File path: 
integration-tests/file/src/main/java/org/apache/camel/quarkus/component/file/it/FileResource.java
##########
@@ -26,36 +29,102 @@
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.ConsumerTemplate;
 import org.apache.camel.Exchange;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.component.mock.MockEndpoint;
 
 @Path("/file")
 @ApplicationScoped
 public class FileResource {
 
+    public static String CONSUME_BATCH = "consumeBatch";
+    public static String SORT_BY = "sortBy";
+    public static String SEPARATOR = ";";
+
     @Inject
     ProducerTemplate producerTemplate;
 
     @Inject
     ConsumerTemplate consumerTemplate;
 
+    @Inject
+    CamelContext context;
+
     @Path("/get/{folder}/{name}")
-    @GET
+    @POST
     @Produces(MediaType.TEXT_PLAIN)
-    public String getFile(@PathParam("folder") String folder, 
@PathParam("name") String name) throws Exception {
-        return consumerTemplate.receiveBodyNoWait("file:target/" + folder + 
"?fileName=" + name, String.class);
+    public String getFile(@PathParam("folder") String folder, 
@PathParam("name") String name,
+            @QueryParam("charset") String charset) throws Exception {
+        StringBuilder url = new 
StringBuilder(String.format("file:target/%s?fileName=%s", folder, name));
+        if (charset != null && !charset.equals("")) {
+            url.append("&charset=").append(charset);
+        }
+        String s = consumerTemplate.receiveBodyNoWait(url.toString(), 
String.class);
+        System.out.println(s);

Review comment:
       ```suggestion
   ```

##########
File path: 
integration-tests/file/src/test/java/org/apache/camel/quarkus/component/file/it/FileTest.java
##########
@@ -99,36 +200,78 @@ public void fileReadLock_minLength() throws Exception {
         Thread.sleep(10_000L);
 
         // Read the file that should not be there
-        RestAssured
-                .get("/file/get/{folder}/{name}", FileRoutes.READ_LOCK_OUT, 
Paths.get(fileName).getFileName())
+        RestAssured.given()
+                .post("/file/get/{folder}/{name}", FileRoutes.READ_LOCK_OUT, 
Paths.get(fileName).getFileName())
                 .then()
                 .statusCode(204);
     }
 
     @Test
     public void quartzSchedulerFilePollingConsumer() throws 
InterruptedException {
-        String fileName = RestAssured.given()
-                .contentType(ContentType.TEXT)
-                .body(FILE_BODY)
-                .post("/file/create/quartz")
-                .then()
-                .statusCode(201)
-                .extract()
-                .body()
-                .asString();
+        String fileName = createFile(FILE_BODY, "/file/create/quartz");
 
         String targetFileName = Paths.get(fileName).toFile().getName();
         await().atMost(10, TimeUnit.SECONDS).until(() -> {
             return Files.exists(Paths.get("target/quartz/out", 
targetFileName));
         });
 
         RestAssured
-                .get("/file/get/{folder}/{name}", "quartz/out", targetFileName)
+                .given()
+                .post("/file/get/{folder}/{name}", "quartz/out", 
targetFileName)
                 .then()
                 .statusCode(200)
                 .body(equalTo(FILE_BODY));
     }
 
+    private static String createFile(String content, String path) {
+        return createFile(content.getBytes(), path, null, null);
+    }
+
+    private static String createFile(String content, String path, String 
charset, String prefix)
+            throws UnsupportedEncodingException {
+        return createFile(content.getBytes(), path, charset, prefix);
+    }
+
+    private static String createFile(byte[] content, String path, String 
charset, String fileName) {
+        return RestAssured.given()
+                .urlEncodingEnabled(true)
+                .queryParam("charset", charset)
+                .contentType(ContentType.TEXT)

Review comment:
       Hm... you pass byte[] content using text/plain. Maybe it would be 
cleaner for future readers to send using application/octet-stream.

##########
File path: 
integration-tests/file/src/test/java/org/apache/camel/quarkus/component/file/it/FileTest.java
##########
@@ -17,48 +17,150 @@
 package org.apache.camel.quarkus.component.file.it;
 
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 
 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.hamcrest.Matcher;
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
 
+import static 
org.apache.camel.quarkus.component.file.it.FileResource.CONSUME_BATCH;
+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.awaitility.Awaitility.await;
 import static org.hamcrest.core.IsEqual.equalTo;
+import static org.hamcrest.core.IsNot.not;
 
 @QuarkusTest
 class FileTest {
 
     private static final String FILE_BODY = "Hello Camel Quarkus";
+    private static final String FILE_CONTENT_01 = "Hello1";
+    private static final String FILE_CONTENT_02 = "Hello2";
+    private static final String FILE_CONTENT_03 = "Hello3";
+    private static final String FILE_BODY_UTF8 = "Hello World \u4f60\u597d";
+
+    private List<Path> pathsToDelete = new LinkedList<>();
+
+    @AfterEach
+    public void afterEach() {
+        pathsToDelete.stream().forEach(p -> {
+            try {
+                Files.delete(p);
+            } catch (IOException e) {
+                //ignore
+            }
+        });
+
+        pathsToDelete.clear();
+    }
 
     @Test
     public void file() {
         // Create a new file
-        String fileName = RestAssured.given()
-                .contentType(ContentType.TEXT)
-                .body(FILE_BODY)
-                .post("/file/create/in")
-                .then()
-                .statusCode(201)
-                .extract()
-                .body()
-                .asString();
+        String fileName = createFile(FILE_BODY, "/file/create/in");
 
         // Read the file
         RestAssured
-                .get("/file/get/in/" + Paths.get(fileName).getFileName())
+                .post("/file/get/in/" + Paths.get(fileName).getFileName())
                 .then()
                 .statusCode(200)
                 .body(equalTo(FILE_BODY));
     }
 
+    @Test
+    public void consumerCharset() throws UnsupportedEncodingException {
+        // Create a new file
+        createFile(FILE_BODY_UTF8, "/file/create/charsetUTF8", "UTF-8", null);
+        createFile(FILE_BODY_UTF8, "/file/create/charsetISO", "UTF-8", null);
+
+        await().atMost(10, TimeUnit.SECONDS).until(() -> 
getFromMock("charsetUTF8", equalTo(FILE_BODY_UTF8)));
+
+        await().atMost(10, TimeUnit.SECONDS).until(() -> {
+            // File content read as ISO-8859-1 has to have different content 
(because file contains some unknown characters)
+            return getFromMock("charsetISO", not(equalTo(FILE_BODY_UTF8)));

Review comment:
       I think we can be a bit more specific about what we expect here. We want 
to see that the given encoding was applied correctly. If we used characters 
that make sense in both UTF8 and ISO latin 2, such as ľščťžýďáíéäňô in 
FILE_BODY_UTF8, we could assert that the binary content is 
"ľščťžýďáíéäňô".getBytes("iso-8859-2")




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to