use of org.apache.servicecomb.foundation.common.Holder in project java-chassis by ServiceComb.
the class Log4jUtilsTest method init.
@Test
public void init() {
Holder<Boolean> propertiesLoaded = new Holder<>(false);
Holder<Boolean> logConfigured = new Holder<>(false);
Holder<Boolean> mergedFileWritten = new Holder<>(false);
final Properties logProperties = new Properties();
logProperties.setProperty("paas.logs.file", "cse.log");
final ArrayList<Resource> logResList = new ArrayList<>();
new MockUp<PropertiesLoader>() {
@Mock
Properties load() {
propertiesLoaded.value = true;
return logProperties;
}
@Mock
List<Resource> getFoundResList() {
return logResList;
}
};
new MockUp<PropertyConfigurator>() {
@Mock
void configure(Properties properties) {
logConfigured.value = true;
Assert.assertSame(properties, logProperties);
}
};
new MockUp<Log4jUtils>() {
@Mock
void outputFile(List<Resource> resList, Properties properties) {
mergedFileWritten.value = true;
Assert.assertSame(logResList, resList);
Assert.assertSame(logProperties, properties);
}
};
Assert.assertFalse(Deencapsulation.getField(Log4jUtils.class, "inited"));
try {
Log4jUtils.init();
} catch (Exception e) {
fail(e.getMessage());
}
Assert.assertTrue(Deencapsulation.getField(Log4jUtils.class, "inited"));
Assert.assertTrue(propertiesLoaded.value);
Assert.assertTrue(logConfigured.value);
Assert.assertTrue(mergedFileWritten.value);
}
use of org.apache.servicecomb.foundation.common.Holder in project incubator-servicecomb-java-chassis by apache.
the class TestAbstractRestInvocation method scheduleInvocation_invocationContextDeserializeError.
@Test
public void scheduleInvocation_invocationContextDeserializeError(@Mocked AsyncContext asyncContext) {
requestEx = new AbstractHttpServletRequest() {
@Override
public String getHeader(String name) {
return "{\"x-cse-src-microservice\":'source\"}";
}
@Override
public AsyncContext getAsyncContext() {
return asyncContext;
}
};
Holder<Integer> status = new Holder<>();
Holder<String> reasonPhrase = new Holder<>();
Holder<Integer> endCount = new Holder<>(0);
responseEx = new AbstractHttpServletResponse() {
@SuppressWarnings("deprecation")
@Override
public void setStatus(int sc, String sm) {
status.value = sc;
reasonPhrase.value = sm;
}
@Override
public void flushBuffer() {
endCount.value = endCount.value + 1;
}
@Override
public void setContentType(String type) {
assertEquals("application/json; charset=utf-8", type);
}
};
restInvocation.requestEx = requestEx;
restInvocation.responseEx = responseEx;
restInvocation.scheduleInvocation();
assertEquals(Integer.valueOf(590), status.value);
assertEquals("Unexpected producer error, please check logs for details", reasonPhrase.value);
assertEquals(Integer.valueOf(1), endCount.value);
}
use of org.apache.servicecomb.foundation.common.Holder in project incubator-servicecomb-java-chassis by apache.
the class TestAbstractRestInvocation method scheduleInvocationNormal.
@Test
public void scheduleInvocationNormal(@Mocked OperationMeta operationMeta) {
Holder<InvocationStartEvent> eventHolder = new Holder<>();
Object subscriber = new ScheduleInvocationEventHandler(eventHolder);
EventManager.register(subscriber);
Executor executor = new ReactiveExecutor();
requestEx = new AbstractHttpServletRequestForTest();
requestEx.setAttribute(RestConst.REST_REQUEST, requestEx);
new Expectations(requestEx) {
{
restOperation.getOperationMeta();
result = operationMeta;
operationMeta.getExecutor();
result = executor;
requestEx.getHeader(Const.TRACE_ID_NAME);
result = "tid";
}
};
Holder<Boolean> result = new Holder<>();
restInvocation = new AbstractRestInvocationForTest() {
@Override
protected void runOnExecutor() {
result.value = true;
invocation.onFinish(Response.ok(null));
}
};
restInvocation.requestEx = requestEx;
restInvocation.restOperationMeta = restOperation;
restInvocation.scheduleInvocation();
EventManager.unregister(subscriber);
Assert.assertTrue(result.value);
assertEquals(nanoTime, invocation.getInvocationStageTrace().getStart());
assertEquals(nanoTime, invocation.getInvocationStageTrace().getStartSchedule());
Assert.assertSame(invocation, eventHolder.value.getInvocation());
assertEquals("tid", invocation.getTraceId());
}
use of org.apache.servicecomb.foundation.common.Holder in project incubator-servicecomb-java-chassis by apache.
the class TestAbstractRestInvocation method scheduleInvocation_flowControlReject.
@SuppressWarnings("deprecation")
@Test
public void scheduleInvocation_flowControlReject() {
new Expectations(operationMeta) {
{
operationMeta.getProviderQpsFlowControlHandler();
result = (Handler) (invocation, asyncResp) -> asyncResp.producerFail(new InvocationException(new HttpStatus(429, "Too Many Requests"), new CommonExceptionData("rejected by qps flowcontrol")));
}
};
Holder<Integer> status = new Holder<>();
Holder<String> reasonPhrase = new Holder<>();
Holder<Integer> endCount = new Holder<>(0);
Holder<String> responseBody = new Holder<>();
responseEx = new AbstractHttpServletResponse() {
@SuppressWarnings("deprecation")
@Override
public void setStatus(int sc, String sm) {
status.value = sc;
reasonPhrase.value = sm;
}
@Override
public void flushBuffer() {
endCount.value = endCount.value + 1;
}
@Override
public void setContentType(String type) {
assertEquals("application/json; charset=utf-8", type);
}
@Override
public void setBodyBuffer(Buffer bodyBuffer) {
responseBody.value = bodyBuffer.toString();
}
};
initRestInvocation();
restInvocation.scheduleInvocation();
assertEquals(Integer.valueOf(429), status.value);
assertEquals("Too Many Requests", reasonPhrase.value);
assertEquals("{\"message\":\"rejected by qps flowcontrol\"}", responseBody.value);
assertEquals(Integer.valueOf(1), endCount.value);
}
use of org.apache.servicecomb.foundation.common.Holder in project incubator-servicecomb-java-chassis by apache.
the class TestObject method testObject.
@SuppressWarnings("unchecked")
private void testObject() {
// int
Object result = intf.testObject(1);
TestMgr.check(1, result);
TestMgr.check(Integer.class, result.getClass());
result = restTemplate.postForObject(prefix + "/object", 1, Integer.class);
TestMgr.check(1, result);
TestMgr.check(Integer.class, result.getClass());
// string
result = intf.testObject("str");
TestMgr.check("str", result);
TestMgr.check(String.class, result.getClass());
result = restTemplate.postForObject(prefix + "/object", "str", String.class);
TestMgr.check("str", result);
TestMgr.check(String.class, result.getClass());
// emptyObject
result = intf.testObject(new EmptyObject());
// result may not be an empty map in highway
// TestMgr.check("{}", result);
TestMgr.check(true, Map.class.isAssignableFrom(result.getClass()));
result = restTemplate.postForObject(prefix + "/object", new EmptyObject(), EmptyObject.class);
TestMgr.check(EmptyObject.class, result.getClass());
result = restTemplate.postForObject(prefix + "/object", new EmptyObject(), EmptyObject.class);
TestMgr.check(EmptyObject.class, result.getClass());
// map
Map<String, String> map = Collections.singletonMap("k", "v");
result = intf.testObject(map);
TestMgr.check("{k=v}", result);
TestMgr.check(true, Map.class.isAssignableFrom(result.getClass()));
result = restTemplate.postForObject(prefix + "/object", map, Map.class);
TestMgr.check("{k=v}", result);
TestMgr.check(true, Map.class.isAssignableFrom(result.getClass()));
// list
List<String> list = Collections.singletonList("v");
result = intf.testObject(list);
TestMgr.check("[v]", result);
TestMgr.check(true, List.class.isAssignableFrom(result.getClass()));
result = restTemplate.postForObject(prefix + "/object", list, List.class);
TestMgr.check("[v]", result);
TestMgr.check(true, List.class.isAssignableFrom(result.getClass()));
// generic
Holder<String> holder = new Holder<>("v");
result = intf.testObject(holder);
TestMgr.check("v", ((Map<String, String>) result).get("value"));
TestMgr.check(LinkedHashMap.class, result.getClass());
result = restTemplate.postForObject(prefix + "/object", holder, Holder.class);
TestMgr.check("v", ((Map<String, String>) result).get("value"));
TestMgr.check(LinkedHashMap.class, result.getClass());
}
Aggregations