blob: aaf8233df3e7025804fd4ff80c773aa55c022eab [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.demo.zeroconfig.tests;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import org.apache.servicecomb.demo.CategorizedTestCase;
import org.apache.servicecomb.demo.TestMgr;
import org.apache.servicecomb.provider.springmvc.reference.RestTemplateBuilder;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import io.vertx.core.json.JsonObject;
@Component
public class ServerTest implements CategorizedTestCase {
RestTemplate template = RestTemplateBuilder.create();
@Override
public void testRestTransport() throws Exception {
testServerGetName();
testGetAllMicroservice();
testJsonObject();
testString();
testDateForEdge();
testContextMapper();
}
private void testContextMapper() throws URISyntaxException {
MultiValueMap<String, String> headers = new HttpHeaders();
headers.add("clientHeader", "v1");
headers.add("gatewayHeader", "v2");
RequestEntity<Void> requestEntity = new RequestEntity<>(headers, HttpMethod.GET,
new URI("cse://demo-zeroconfig-schemadiscovery-registry-edge/register/url/prefix/contextMapper?clientQuery=v3&"
+ "gatewayQuery=v4"));
ResponseEntity<String> response = template.exchange(requestEntity, String.class);
TestMgr.check(response.getBody(), "success");
}
@SuppressWarnings("unchecked")
private void testDateForEdge() {
for (int i = 0; i < 3; i++) {
ClientModel clientModelReq = new ClientModel();
Date date = new Date(1663590135202L);
clientModelReq.setUpdateDate(date);
Map<String, Object> response = template
.postForObject(
"cse://demo-zeroconfig-schemadiscovery-registry-edge"
+ "/register/url/prefix/postModel", clientModelReq,
Map.class);
Object result = response.get("updateDate");
// TODO: highway and rest Date field will give different result
// we can not change this now, because it is incompatible
if (result instanceof Long) {
TestMgr.check(response.get("updateDate"), 1663590135202L);
} else {
TestMgr.check(response.get("updateDate"), "2022-09-19T12:22:15.202+00:00");
}
}
}
private void testServerGetName() throws Exception {
// invoke demo-zeroconfig-schemadiscovery-registry-client
TestMgr.check("world", template
.getForObject(
"cse://demo-zeroconfig-schemadiscovery-registry-client/register/url/prefix/getName?name=world",
String.class));
// invoke demo-zeroconfig-schemadiscovery-registry-edge
// create many threads to test event-loop not blocking
int thread = 32;
CountDownLatch latch = new CountDownLatch(thread);
for (int i = 0; i < thread; i++) {
new Thread(() -> {
for (int j = 0; j < 20; j++) {
try {
TestMgr.check("world", template
.getForObject(
"cse://demo-zeroconfig-schemadiscovery-registry-edge/register/url/prefix/getName?name=world",
String.class));
} catch (Exception e) {
TestMgr.failed("test failed", e);
}
}
latch.countDown();
}).start();
}
latch.await();
}
@SuppressWarnings("rawTypes")
private void testGetAllMicroservice() {
// invoke demo-zeroconfig-schemadiscovery-registry-client
TestMgr.check("2", template
.getForObject(
"cse://demo-zeroconfig-schemadiscovery-registry-client"
+ "/register/url/prefix/getRegisteredMicroservice",
List.class).size());
// invoke demo-zeroconfig-schemadiscovery-registry-edge
TestMgr.check("2", template
.getForObject(
"cse://demo-zeroconfig-schemadiscovery-registry-edge"
+ "/register/url/prefix/getRegisteredMicroservice",
List.class).size());
}
private void testJsonObject() {
JsonObject in = new JsonObject();
JsonObject inner = new JsonObject();
//调用者需要按照swagger传参
inner.put("hello", "world");
in.put("map", inner);
JsonObject result = template
.postForObject(
"cse://demo-zeroconfig-schemadiscovery-registry-client"
+ "/register/url/prefix/jsonObject", in, JsonObject.class);
TestMgr.check(inner.toString(), result.toString());
TestMgr.check(result.getString("hello"), "world");
}
private void testString() {
String in = "{\"hello\":\"world\"}";
String result = template
.postForObject(
"cse://demo-zeroconfig-schemadiscovery-registry-client"
+ "/register/url/prefix/getString", in, String.class);
TestMgr.check(in, result);
}
}