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

liubao pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git

commit de1abd2c8df0b6ca7e9fad7c820b8573c00117a7
Author: wujimin <[email protected]>
AuthorDate: Sun Apr 22 04:53:49 2018 +0800

    [SCB-486] add edge download test case
---
 .../servicecomb/demo/edge/business/Impl.java       | 47 ++++++++++++++++++++++
 .../servicecomb/demo/edge/consumer/Consumer.java   | 36 +++++++++++++++++
 2 files changed, 83 insertions(+)

diff --git 
a/demo/demo-edge/business-2.0.0/src/main/java/org/apache/servicecomb/demo/edge/business/Impl.java
 
b/demo/demo-edge/business-2.0.0/src/main/java/org/apache/servicecomb/demo/edge/business/Impl.java
index 3db2a7c..e24f36e 100644
--- 
a/demo/demo-edge/business-2.0.0/src/main/java/org/apache/servicecomb/demo/edge/business/Impl.java
+++ 
b/demo/demo-edge/business-2.0.0/src/main/java/org/apache/servicecomb/demo/edge/business/Impl.java
@@ -17,18 +17,39 @@
 
 package org.apache.servicecomb.demo.edge.business;
 
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.RandomAccessFile;
+import java.nio.charset.StandardCharsets;
+
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.servicecomb.demo.edge.model.AppClientDataRsp;
 import org.apache.servicecomb.demo.edge.model.ChannelRequestBase;
 import org.apache.servicecomb.demo.edge.model.ResultWithInstance;
 import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+
 @RestSchema(schemaId = "news-v2")
 @RequestMapping(path = "/business/v2")
 public class Impl {
+  File tempDir = new File("target/downloadTemp");
+
+  public Impl() throws IOException {
+    FileUtils.forceMkdir(tempDir);
+  }
+
   @RequestMapping(path = "/channel/news/subscribe", method = 
RequestMethod.POST)
   public AppClientDataRsp subscribeNewsColumn(@RequestBody ChannelRequestBase 
request) {
     AppClientDataRsp response = new AppClientDataRsp();
@@ -46,4 +67,30 @@ public class Impl {
   public ResultWithInstance dec(int x, int y) {
     return ResultWithInstance.create(x - y);
   }
+
+  @GetMapping(path = "/download")
+  @ApiResponses({
+      @ApiResponse(code = 200, response = File.class, message = ""),
+  })
+  public ResponseEntity<InputStream> download() throws IOException {
+    return ResponseEntity
+        .ok()
+        .header(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_PLAIN_VALUE)
+        .header(HttpHeaders.CONTENT_DISPOSITION, 
"attachment;filename=download.txt")
+        .body(new 
ByteArrayInputStream("download".getBytes(StandardCharsets.UTF_8)));
+  }
+
+  protected File createBigFile() throws IOException {
+    File file = new File(tempDir, "bigFile.txt");
+    file.delete();
+    RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
+    randomAccessFile.setLength(10 * 1024 * 1024);
+    randomAccessFile.close();
+    return file;
+  }
+
+  @GetMapping(path = "/bigFile")
+  public File bigFile() throws IOException {
+    return createBigFile();
+  }
 }
diff --git 
a/demo/demo-edge/consumer/src/main/java/org/apache/servicecomb/demo/edge/consumer/Consumer.java
 
b/demo/demo-edge/consumer/src/main/java/org/apache/servicecomb/demo/edge/consumer/Consumer.java
index bd2abad..284a883 100644
--- 
a/demo/demo-edge/consumer/src/main/java/org/apache/servicecomb/demo/edge/consumer/Consumer.java
+++ 
b/demo/demo-edge/consumer/src/main/java/org/apache/servicecomb/demo/edge/consumer/Consumer.java
@@ -17,11 +17,13 @@
 
 package org.apache.servicecomb.demo.edge.consumer;
 
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.servicecomb.core.Endpoint;
 import org.apache.servicecomb.core.endpoint.EndpointsCache;
@@ -34,6 +36,7 @@ import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.util.Assert;
@@ -75,6 +78,9 @@ public class Consumer {
   public void run() {
     prepareEdge();
 
+    testDownload();
+    testDownloadBigFile();
+
     invoke("/v1/add", 2, 1, addV1Result);
     invoke("/v1/add", 3, 1, addV1Result);
     invoke("/v1/add", 4, 1, addV1Result);
@@ -100,6 +106,36 @@ public class Consumer {
     checkResult("v2/dec", decV2Result, "2.0.0");
   }
 
+  protected void testDownloadBigFile() {
+    String url = edgePrefix + "/v2/bigFile";
+    AtomicInteger size = new AtomicInteger();
+
+    template.execute(url, HttpMethod.GET, req -> {
+    }, resp -> {
+      byte[] buf = new byte[1 * 1024 * 1024];
+      try (InputStream is = resp.getBody()) {
+        for (;;) {
+          int len = is.read(buf);
+          if (len == -1) {
+            break;
+          }
+
+          size.addAndGet(len);
+        }
+      }
+      return null;
+    });
+    Assert.isTrue(size.get() == 10 * 1024 * 1024);
+    System.out.println("test download bigFile finished");
+  }
+
+  protected void testDownload() {
+    String url = edgePrefix + "/v2/download";
+    String content = template.getForObject(url, String.class);
+    Assert.isTrue("download".equals(content));
+    System.out.println("test download finished");
+  }
+
   private void checkResult(String name, List<ResultWithInstance> results, 
String... expectedVersions) {
     Set<String> versions = new HashSet<>();
     Set<String> remained = new HashSet<>(Arrays.asList(expectedVersions));

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to