blob: ff0af2973e911c4add984a629af0ad5bebcb0882 [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.base;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
import org.apache.servicecomb.foundation.common.Holder;
import org.apache.servicecomb.it.Consumers;
import org.apache.servicecomb.it.schema.Generic;
import org.apache.servicecomb.it.schema.User;
import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.springframework.http.HttpStatus;
public class TestGeneric {
interface GenericIntf {
Holder<User> holderUser(Holder<User> input);
Generic<User> genericUser(Generic<User> input);
Generic<Long> genericLong(Generic<Long> input);
Generic<Date> genericDate(Generic<Date> input);
Generic<HttpStatus> genericEnum(Generic<HttpStatus> input);
Generic<Generic<User>> genericGenericUser(Generic<Generic<User>> input);
Generic<Map<String, String>> genericMap(Generic<Map<String, String>> mapGeneric);
Generic<Map<String, List<String>>> genericMapList(Generic<Map<String, List<String>>> mapListGeneric);
Generic<Map<String, List<User>>> genericMapListUser(Generic<Map<String, List<User>>> mapListUserGeneric);
List<List<String>> genericNestedListString(List<List<String>> nestedListString);
List<List<User>> genericNestedListUser(List<List<User>> nestedListUser);
}
private static Consumers<GenericIntf> consumers = new Consumers<>("generic", GenericIntf.class);
private String expectUserStr = "{\"name\":\"nameA\",\"age\":100,\"index\":0,\"names\":null}";
private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
@Test
public void testHolderUser_intf() {
Holder<User> holder = new Holder<>(new User());
Holder<User> result = consumers.getIntf().holderUser(holder);
Assertions.assertEquals(result.value.jsonString(), expectUserStr);
}
@Test
public void testHolderUser_rt() {
Holder<User> holder = new Holder<>(new User());
@SuppressWarnings("unchecked")
Holder<User> result = consumers.getSCBRestTemplate().postForObject("/holderUser", holder, Holder.class);
Assertions.assertEquals(result.value.jsonString(), expectUserStr);
}
@Test
public void testGenericUser_intf() {
Generic<User> generic = new Generic<>();
generic.value = new User();
Generic<User> result = consumers.getIntf().genericUser(generic);
Assertions.assertEquals(result.value.jsonString(), expectUserStr);
}
@Test
public void testGenericUser_rt() {
Generic<User> generic = new Generic<>();
generic.value = new User();
@SuppressWarnings("unchecked")
Generic<User> result = consumers.getSCBRestTemplate().postForObject("/genericUser", generic, Generic.class);
Assertions.assertEquals(result.value.jsonString(), expectUserStr);
}
@Test
public void testGenericLong_intf() {
Generic<Long> generic = new Generic<>();
generic.value = 100L;
Generic<Long> result = consumers.getIntf().genericLong(generic);
Assertions.assertEquals(Long.class, result.value.getClass());
Assertions.assertEquals(100L, (long) result.value);
}
@Test
public void testGenericLong_rt() {
Generic<Long> generic = new Generic<>();
generic.value = 100L;
@SuppressWarnings("unchecked")
Generic<Long> result = consumers.getSCBRestTemplate().postForObject("/genericLong", generic, Generic.class);
Assertions.assertEquals(Long.class, result.value.getClass());
Assertions.assertEquals(100L, (long) result.value);
}
@Test
public void testGenericDate_intf() {
Generic<Date> generic = new Generic<>();
generic.value = new Date(1001);
Generic<Date> result = consumers.getIntf().genericDate(generic);
Assertions.assertEquals(result.value.getClass(), Date.class);
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Assertions.assertEquals("1970-01-01T00:00:01.001Z", simpleDateFormat.format(result.value));
}
@Test
public void testGenericDate_rt() {
Generic<Date> generic = new Generic<>();
generic.value = new Date(1001);
@SuppressWarnings("unchecked")
Generic<Date> result = consumers.getSCBRestTemplate().postForObject("/genericDate", generic, Generic.class);
Assertions.assertEquals(result.value.getClass(), Date.class);
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Assertions.assertEquals("1970-01-01T00:00:01.001Z", simpleDateFormat.format(result.value));
}
@Test
public void testGenericEnum_intf() {
Generic<HttpStatus> generic = new Generic<>();
generic.value = HttpStatus.OK;
Generic<HttpStatus> result = consumers.getIntf().genericEnum(generic);
Assertions.assertEquals(HttpStatus.class, result.value.getClass());
Assertions.assertEquals(HttpStatus.OK, result.value);
}
@Test
public void testGenericEnum_rt() {
Generic<HttpStatus> generic = new Generic<>();
generic.value = HttpStatus.OK;
@SuppressWarnings("unchecked")
Generic<HttpStatus> result = consumers.getSCBRestTemplate().postForObject("/genericEnum", generic, Generic.class);
Assertions.assertEquals(HttpStatus.class, result.value.getClass());
Assertions.assertEquals(HttpStatus.OK, result.value);
}
@Test
public void testGenericGenericUser_intf() {
Generic<Generic<User>> generic = new Generic<>();
generic.value = new Generic<>();
generic.value.value = new User();
Generic<Generic<User>> result = consumers.getIntf().genericGenericUser(generic);
Assertions.assertEquals(result.value.value.jsonString(), expectUserStr);
}
@Test
public void testGenericGenericUser_rt() {
Generic<Generic<User>> generic = new Generic<>();
generic.value = new Generic<>();
generic.value.value = new User();
@SuppressWarnings("unchecked")
Generic<Generic<User>> result = consumers.getSCBRestTemplate()
.postForObject("/genericGenericUser", generic, Generic.class);
Assertions.assertEquals(result.value.value.jsonString(), expectUserStr);
}
@Test
public void testGenericMap_intf() {
Generic<Map<String, String>> mapGeneric = new Generic<>();
Map<String, String> map = new HashMap<>();
map.put("test", "hello");
mapGeneric.value = map;
Generic<Map<String, String>> result = consumers.getIntf().genericMap(mapGeneric);
String test = result.value.get("test");
Assertions.assertEquals(test, "hello");
}
@Test
public void testGenericMap_rt() {
Generic<Map<String, String>> mapGeneric = new Generic<>();
Map<String, String> map = new HashMap<>();
map.put("test", "hello");
mapGeneric.value = map;
@SuppressWarnings("unchecked")
Generic<Map<String, String>> result = consumers.getSCBRestTemplate()
.postForObject("/genericMap", mapGeneric, Generic.class);
String test = result.value.get("test");
Assertions.assertEquals(test, "hello");
}
@Test
public void testGenericListMap_intf() {
Generic<Map<String, List<String>>> mapListGeneric = new Generic<>();
Map<String, List<String>> map = new HashMap<>();
List<String> list = new ArrayList<>();
list.add("hello");
map.put("test", list);
mapListGeneric.value = map;
Generic<Map<String, List<String>>> result = consumers.getIntf().genericMapList(mapListGeneric);
String test = result.value.get("test").get(0);
Assertions.assertEquals(test, "hello");
}
@Test
public void testGenericListMap_rt() {
Generic<Map<String, List<String>>> mapListGeneric = new Generic<>();
Map<String, List<String>> map = new HashMap<>();
List<String> list = new ArrayList<>();
list.add("hello");
map.put("test", list);
mapListGeneric.value = map;
@SuppressWarnings("unchecked")
Generic<Map<String, List<String>>> result = consumers.getSCBRestTemplate()
.postForObject("/genericMapList", mapListGeneric, Generic.class);
String test = result.value.get("test").get(0);
Assertions.assertEquals(test, "hello");
}
@Test
public void testGenericListUserMap_intf() {
Generic<Map<String, List<User>>> mapListUserGeneric = new Generic<>();
Map<String, List<User>> map = new HashMap<>();
List<User> list = new ArrayList<>();
list.add(new User());
map.put("test", list);
mapListUserGeneric.value = map;
Generic<Map<String, List<User>>> result = consumers.getIntf().genericMapListUser(mapListUserGeneric);
String test = result.value.get("test").get(0).jsonString();
Assertions.assertEquals(test, expectUserStr);
}
@Test
public void testGenericListUserMap_rt() {
Generic<Map<String, List<User>>> mapListUserGeneric = new Generic<>();
Map<String, List<User>> map = new HashMap<>();
List<User> list = new ArrayList<>();
list.add(new User());
map.put("test", list);
mapListUserGeneric.value = map;
@SuppressWarnings("unchecked")
Generic<Map<String, List<User>>> result = consumers.getSCBRestTemplate()
.postForObject("/genericMapListUser", mapListUserGeneric, Generic.class);
String test = result.value.get("test").get(0).jsonString();
Assertions.assertEquals(test, expectUserStr);
}
@Test
public void testGenericNestedListString_intfAndRt() {
ArrayList<List<String>> nestedListString = new ArrayList<>();
nestedListString.add(Arrays.asList("abc", "def"));
nestedListString.add(Arrays.asList("ghi", "jkl"));
List<List<String>> response = consumers.getIntf().genericNestedListString(nestedListString);
Assertions.assertEquals(2, response.size());
MatcherAssert.assertThat(response.get(0), Matchers.contains("abc", "def"));
MatcherAssert.assertThat(response.get(1), Matchers.contains("ghi", "jkl"));
@SuppressWarnings("unchecked")
List<List<String>> response2 = consumers.getSCBRestTemplate()
.postForObject("/genericNestedListString", nestedListString, List.class);
Assertions.assertEquals(2, response2.size());
MatcherAssert.assertThat(response2.get(0), Matchers.contains("abc", "def"));
MatcherAssert.assertThat(response2.get(1), Matchers.contains("ghi", "jkl"));
}
@Test
public void testGenericNestedListUser_intfAndRt() {
User user1 = new User();
user1.setAge(1);
user1.setIndex(1);
user1.setName("abc");
user1.setNames(new String[] {"1", "2", "3"});
User user2 = new User();
user2.setAge(2);
user2.setIndex(2);
user2.setName("def");
user2.setNames(new String[] {"4", "5"});
User user3 = new User();
user3.setAge(3);
user3.setIndex(3);
user3.setName("ghi");
user3.setNames(new String[] {"6", "7"});
User user4 = new User();
user4.setAge(4);
user4.setIndex(4);
user4.setName("jkl");
user4.setNames(new String[] {"8", "9", "10"});
ArrayList<List<User>> nestedListUser = new ArrayList<>();
nestedListUser.add(Arrays.asList(user1, user2));
nestedListUser.add(Arrays.asList(user3, user4));
List<List<User>> response = consumers.getIntf().genericNestedListUser(nestedListUser);
Assertions.assertEquals(2, response.size());
MatcherAssert.assertThat(response.get(0), Matchers.contains(user1, user2));
MatcherAssert.assertThat(response.get(1), Matchers.contains(user3, user4));
@SuppressWarnings("unchecked")
List<List<User>> response2 = consumers.getSCBRestTemplate()
.postForObject("/genericNestedListUser", nestedListUser, List.class);
Assertions.assertEquals(2, response2.size());
MatcherAssert.assertThat(response2.get(0), Matchers.contains(user1, user2));
MatcherAssert.assertThat(response2.get(1), Matchers.contains(user3, user4));
}
}