blob: 07e8e3c54a1a75d7cb4ba8f6c187450bcd8647ce [file] [log] [blame]
/*
* 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.servicecomb.it.testcase;
import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.anyOf;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.catchThrowable;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import org.apache.servicecomb.core.Endpoint;
import org.apache.servicecomb.core.invocation.endpoint.EndpointUtils;
import org.apache.servicecomb.it.Consumers;
import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
import org.assertj.core.api.Condition;
import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
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 io.netty.channel.ConnectTimeoutException;
public class TestUpload {
private FileSystemResource fileSystemResource1;
private FileSystemResource fileSystemResource2;
private FileSystemResource fileSystemResource3;
private FileSystemResource fileSystemResource4;
private static final String message = "cseMessage";
interface UploadIntf {
Map<String, String> uploadMultiformMix(Endpoint endpoint, Resource file,
List<Resource> fileList,
String str,
List<String> strList);
default Map<String, String> uploadMultiformMix(Resource file,
List<Resource> fileList,
String str,
List<String> strList) {
return uploadMultiformMix(null, file, fileList, str, strList);
}
}
private static Consumers<UploadIntf> consumersSpringmvc = new Consumers<>("uploadSpringmvcSchema",
UploadIntf.class);
private static Consumers<UploadIntf> consumersJaxrs = new Consumers<>("uploadJaxrsSchema",
UploadIntf.class);
@BeforeEach
public void init() {
try {
File file1 = File.createTempFile("jaxrstest1", ".txt");
File file2 = File.createTempFile("测试啊", ".txt");
File file3 = File.createTempFile("files", ".yaml");
File file4 = File.createTempFile("files4", ".yaml");
FileUtils.writeStringToFile(file1, "hello1", StandardCharsets.UTF_8, false);
FileUtils.writeStringToFile(file2, "中文 2", StandardCharsets.UTF_8, false);
FileUtils.writeStringToFile(file3, "cse3", StandardCharsets.UTF_8, false);
FileUtils.writeStringToFile(file4, "cse4", StandardCharsets.UTF_8, false);
fileSystemResource1 = new FileSystemResource(file1);
fileSystemResource2 = new FileSystemResource(file2);
fileSystemResource3 = new FileSystemResource(file3);
fileSystemResource4 = new FileSystemResource(file4);
} catch (IOException e) {
Assertions.fail("Failed to create temp file");
}
}
@Test
public void should_failed_when_connect_failed() {
Throwable throwable = catchThrowable(
() -> consumersJaxrs.getIntf()
.uploadMultiformMix(EndpointUtils.parse(EndpointUtils.formatFromUri("http://149.159.169.179:54321")),
fileSystemResource1, singletonList(fileSystemResource2), message, singletonList("2.中文测试")));
assertThat(throwable)
.isInstanceOf(InvocationException.class);
assertThat(throwable.toString())
.is(anyOf(
new Condition<>(v -> v.equals(
"InvocationException: code=500;msg=CommonExceptionData{code='SCB.00000000', message='connection timed out.', dynamic={}}"),
"for filter"),
new Condition<>(v -> v.equals(
"InvocationException: code=490;msg=CommonExceptionData [message=Unexpected consumer error, please check logs for details]"),
"for handler")
));
assertThat(throwable.getCause())
.isInstanceOf(ConnectTimeoutException.class)
.hasMessage("connection timed out: /149.159.169.179:54321");
}
@Test
public void testJarxUpload1() {
Map<String, Object> map = new HashMap<>();
map.put("file1", fileSystemResource1);
map.put("file2", fileSystemResource2);
String result = consumersJaxrs.getSCBRestTemplate().postForObject("/upload1", new HttpEntity<>(map), String.class);
Assertions.assertTrue(containsAll(result, "hello1", "中文 2"));
}
@Test
public void testJarxUploadArray1() {
Map<String, Object> map = new HashMap<>();
FileSystemResource[] arrays = {fileSystemResource1, fileSystemResource2};
map.put("file1", arrays);
map.put("file2", fileSystemResource3);
String result = consumersJaxrs.getSCBRestTemplate()
.postForObject("/uploadArray1", new HttpEntity<>(map), String.class);
Assertions.assertTrue(containsAll(result, "hello1", "中文 2", "cse3"));
}
@Test
public void testJarxUploadList1() {
Map<String, Object> map = new HashMap<>();
List<FileSystemResource> list = new ArrayList<>();
list.add(fileSystemResource1);
list.add(fileSystemResource2);
map.put("file1", list);
map.put("file2", fileSystemResource3);
String result = consumersJaxrs.getSCBRestTemplate()
.postForObject("/uploadList1", new HttpEntity<>(map), String.class);
Assertions.assertTrue(containsAll(result, "hello1", "中文 2", "cse3"));
}
@Test
public void testJarxUpload2() {
Map<String, Object> map = new HashMap<>();
map.put("file1", fileSystemResource1);
map.put("message", message);
String result = consumersJaxrs.getSCBRestTemplate()
.postForObject("/upload2", new HttpEntity<>(map), String.class);
Assertions.assertTrue(containsAll(result, "hello1", message));
}
@Test
public void testJarxUploadArray2() {
Map<String, Object> map = new HashMap<>();
FileSystemResource[] arrays = {fileSystemResource1, fileSystemResource2};
map.put("file1", arrays);
map.put("message", message);
String result = consumersJaxrs.getSCBRestTemplate()
.postForObject("/uploadArray2", new HttpEntity<>(map), String.class);
Assertions.assertTrue(containsAll(result, "hello1", "中文 2", message));
}
@Test
public void testJarxUploadList2() {
Map<String, Object> map = new HashMap<>();
List<FileSystemResource> list = new ArrayList<>();
list.add(fileSystemResource2);
list.add(fileSystemResource3);
map.put("file1", list);
map.put("message", message);
String result = consumersJaxrs.getSCBRestTemplate()
.postForObject("/uploadList2", new HttpEntity<>(map), String.class);
Assertions.assertTrue(containsAll(result, "cse3", "中文 2", message));
}
@Test
public void testJarxUploadMix() {
Map<String, Object> map = new HashMap<>();
List<FileSystemResource> list = new ArrayList<>();
list.add(fileSystemResource4);
list.add(fileSystemResource3);
FileSystemResource[] arrays = {fileSystemResource1, fileSystemResource2};
map.put("file1", list);
map.put("file2", arrays);
map.put("message", message);
String result = consumersJaxrs.getSCBRestTemplate()
.postForObject("/uploadMix", new HttpEntity<>(map), String.class);
Assertions.assertTrue(containsAll(result, "hello1", "cse4", "cse3", "中文 2", message));
}
//springmvc
@Test
public void testFileUpload() {
Map<String, Object> map = new HashMap<>();
map.put("file1", fileSystemResource1);
map.put("file2", fileSystemResource2);
map.put("name", message);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
String result = consumersSpringmvc.getSCBRestTemplate().postForObject("/upload",
new HttpEntity<>(map, headers), String.class);
Assertions.assertTrue(containsAll(result, "hello1", "中文 2", message));
}
@Test
public void testFileUploadArray() {
Map<String, Object> map = new HashMap<>();
FileSystemResource[] array1 = {fileSystemResource1, fileSystemResource2};
FileSystemResource[] array2 = {fileSystemResource3, fileSystemResource4};
map.put("file1", array1);
map.put("file2", array2);
map.put("name", message);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
String result = consumersSpringmvc.getSCBRestTemplate()
.postForObject("/uploadArray", new HttpEntity<>(map, headers), String.class);
Assertions.assertTrue(containsAll(result, "hello1", "cse4", "cse3", "中文 2", message));
}
@Test
public void testFileUploadList() {
Map<String, Object> map = new HashMap<>();
List<FileSystemResource> list1 = new ArrayList<>();
List<FileSystemResource> list2 = new ArrayList<>();
list1.add(fileSystemResource1);
list1.add(fileSystemResource2);
list2.add(fileSystemResource3);
list2.add(fileSystemResource4);
map.put("file1", list1);
map.put("file2", list2);
map.put("name", message);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
String result = consumersSpringmvc.getSCBRestTemplate()
.postForObject("/uploadList", new HttpEntity<>(map, headers), String.class);
Assertions.assertTrue(containsAll(result, "hello1", "cse4", "cse3", "中文 2", message));
}
@Test
public void testFileUploadWithoutAnnotation() {
Map<String, Object> map = new HashMap<>();
map.put("file1", fileSystemResource1);
map.put("file2", fileSystemResource2);
map.put("name", message);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
String result = consumersSpringmvc.getSCBRestTemplate().postForObject("/uploadWithoutAnnotation",
new HttpEntity<>(map, headers), String.class);
Assertions.assertTrue(containsAll(result, "hello1", "中文 2", message));
}
@Test
public void testFileUploadArrayWithoutAnnotation() {
Map<String, Object> map = new HashMap<>();
FileSystemResource[] array1 = {fileSystemResource1, fileSystemResource2};
FileSystemResource[] array2 = {fileSystemResource3, fileSystemResource4};
map.put("file1", array1);
map.put("file2", array2);
map.put("name", message);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
String result = consumersSpringmvc.getSCBRestTemplate()
.postForObject("/uploadArrayWithoutAnnotation", new HttpEntity<>(map, headers), String.class);
Assertions.assertTrue(containsAll(result, "hello1", "cse4", "cse3", "中文 2", message));
}
@Test
public void testFileUploadListWithoutAnnotation() {
Map<String, Object> map = new HashMap<>();
List<FileSystemResource> list1 = new ArrayList<>();
List<FileSystemResource> list2 = new ArrayList<>();
list1.add(fileSystemResource1);
list1.add(fileSystemResource2);
list2.add(fileSystemResource3);
list2.add(fileSystemResource4);
map.put("file1", list1);
map.put("file2", list2);
map.put("name", message);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
String result = consumersSpringmvc.getSCBRestTemplate()
.postForObject("/uploadListArrayWithoutAnnotation", new HttpEntity<>(map, headers), String.class);
Assertions.assertTrue(containsAll(result, "hello1", "cse4", "cse3", "中文 2", message));
}
@Test
public void testFileUploadMixWithoutAnnotation() {
Map<String, Object> map = new HashMap<>();
List<FileSystemResource> list1 = new ArrayList<>();
list1.add(fileSystemResource1);
list1.add(fileSystemResource2);
FileSystemResource[] array2 = {fileSystemResource3, fileSystemResource4};
map.put("file1", list1);
map.put("file2", array2);
map.put("name", message);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
String result = consumersSpringmvc.getSCBRestTemplate()
.postForObject("/uploadMix", new HttpEntity<>(map, headers), String.class);
Assertions.assertTrue(containsAll(result, "hello1", "cse4", "cse3", "中文 2", message));
}
@Test
public void testUploadMultiformMix_RestTemplate_SpringMVC() {
Map<String, Object> map = new HashMap<>();
List<Resource> fileList = new ArrayList<>();
fileList.add(fileSystemResource2);
map.put("file", fileSystemResource1);
map.put("fileList", fileList);
map.put("str", message);
map.put("strList", singletonList("2.中文测试"));
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
ResponseEntity<Map<String, String>> response =
consumersSpringmvc.getSCBRestTemplate().exchange("/uploadMultiformMix", HttpMethod.POST,
new HttpEntity<>(map, headers), new ParameterizedTypeReference<Map<String, String>>() {
});
Map<String, String> responseBody = response.getBody();
Assertions.assertNotNull(responseBody);
MatcherAssert.assertThat(responseBody.get("file"), Matchers.is("hello1"));
MatcherAssert.assertThat(responseBody.get("fileList"), Matchers.is("中文 2"));
MatcherAssert.assertThat(responseBody.get("str"), Matchers.is("cseMessage"));
MatcherAssert.assertThat(responseBody.get("strList"), Matchers.is("[2.中文测试]"));
}
@Test
public void testUploadMultiformMix_Rpc_SpringMVC() {
List<Resource> fileList = new ArrayList<>();
fileList.add(fileSystemResource2);
Map<String, String> responseBody =
consumersSpringmvc.getIntf().uploadMultiformMix(
fileSystemResource1, fileList, message, singletonList("2.中文测试"));
MatcherAssert.assertThat(responseBody.get("file"), Matchers.is("hello1"));
MatcherAssert.assertThat(responseBody.get("fileList"), Matchers.is("中文 2"));
MatcherAssert.assertThat(responseBody.get("str"), Matchers.is("cseMessage"));
MatcherAssert.assertThat(responseBody.get("strList"), Matchers.is("[2.中文测试]"));
}
@Test
public void testUploadMultiformMix_RestTemplate_JAXRS() {
Map<String, Object> map = new HashMap<>();
List<FileSystemResource> fileList = new ArrayList<>();
fileList.add(fileSystemResource2);
map.put("file", fileSystemResource1);
map.put("fileList", fileList);
map.put("str", message);
map.put("strList", singletonList("2.中文测试"));
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
ResponseEntity<Map<String, String>> response =
consumersJaxrs.getSCBRestTemplate().exchange("/uploadMultiformMix", HttpMethod.POST,
new HttpEntity<>(map, headers), new ParameterizedTypeReference<Map<String, String>>() {
});
Map<String, String> responseBody = response.getBody();
MatcherAssert.assertThat(responseBody, Matchers.notNullValue());
MatcherAssert.assertThat(responseBody.get("file"), Matchers.is("hello1"));
MatcherAssert.assertThat(responseBody.get("fileList"), Matchers.is("中文 2"));
MatcherAssert.assertThat(responseBody.get("str"), Matchers.is("cseMessage"));
MatcherAssert.assertThat(responseBody.get("strList"), Matchers.is("[2.中文测试]"));
}
@Test
public void testUploadMultiformMix_Rpc_JAXRS() {
List<Resource> fileList = new ArrayList<>();
fileList.add(fileSystemResource2);
Map<String, String> responseBody =
consumersJaxrs.getIntf().uploadMultiformMix(
fileSystemResource1, fileList, message, singletonList("2.中文测试"));
MatcherAssert.assertThat(responseBody.get("file"), Matchers.is("hello1"));
MatcherAssert.assertThat(responseBody.get("fileList"), Matchers.is("中文 2"));
MatcherAssert.assertThat(responseBody.get("str"), Matchers.is("cseMessage"));
MatcherAssert.assertThat(responseBody.get("strList"), Matchers.is("[2.中文测试]"));
}
private static boolean containsAll(String str, String... strings) {
for (String string : strings) {
if (!str.contains(string)) {
return false;
}
}
return true;
}
}