blob: 380b2c3c40e284c2a18828b2d4267a29b0b64809 [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.dubbo.rpc;
import org.apache.dubbo.common.URL;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class RpcContextTest {
@Test
public void testGetContext() {
RpcContext rpcContext = RpcContext.getContext();
Assertions.assertNotNull(rpcContext);
RpcContext.removeContext();
// if null, will return the initialize value.
//Assertions.assertNull(RpcContext.getContext());
Assertions.assertNotNull(RpcContext.getContext());
Assertions.assertNotEquals(rpcContext, RpcContext.getContext());
RpcContext serverRpcContext = RpcContext.getServerContext();
Assertions.assertNotNull(serverRpcContext);
RpcContext.removeServerContext();
Assertions.assertNotEquals(serverRpcContext, RpcContext.getServerContext());
}
@Test
public void testAddress() {
RpcContext context = RpcContext.getContext();
context.setLocalAddress("127.0.0.1", 20880);
Assertions.assertEquals(20880, context.getLocalAddress().getPort());
Assertions.assertEquals("127.0.0.1:20880", context.getLocalAddressString());
context.setRemoteAddress("127.0.0.1", 20880);
Assertions.assertEquals(20880, context.getRemoteAddress().getPort());
Assertions.assertEquals("127.0.0.1:20880", context.getRemoteAddressString());
context.setRemoteAddress("127.0.0.1", -1);
context.setLocalAddress("127.0.0.1", -1);
Assertions.assertEquals(0, context.getRemoteAddress().getPort());
Assertions.assertEquals(0, context.getLocalAddress().getPort());
Assertions.assertEquals("127.0.0.1", context.getRemoteHostName());
Assertions.assertEquals("127.0.0.1", context.getLocalHostName());
}
@Test
public void testCheckSide() {
RpcContext context = RpcContext.getContext();
//TODO fix npe
//context.isProviderSide();
context.setUrl(URL.valueOf("test://test:11/test?accesslog=true&group=dubbo&version=1.1"));
Assertions.assertFalse(context.isConsumerSide());
Assertions.assertTrue(context.isProviderSide());
context.setUrl(URL.valueOf("test://test:11/test?accesslog=true&group=dubbo&version=1.1&side=consumer"));
Assertions.assertTrue(context.isConsumerSide());
Assertions.assertFalse(context.isProviderSide());
}
@Test
public void testAttachments() {
RpcContext context = RpcContext.getContext();
Map<String, Object> map = new HashMap<>();
map.put("_11", "1111");
map.put("_22", "2222");
map.put(".33", "3333");
context.setObjectAttachments(map);
Assertions.assertEquals(map, context.getObjectAttachments());
Assertions.assertEquals("1111", context.getAttachment("_11"));
context.setAttachment("_11", "11.11");
Assertions.assertEquals("11.11", context.getAttachment("_11"));
context.setAttachment(null, "22222");
context.setAttachment("_22", null);
Assertions.assertEquals("22222", context.getAttachment(null));
Assertions.assertNull(context.getAttachment("_22"));
Assertions.assertNull(context.getAttachment("_33"));
Assertions.assertEquals("3333", context.getAttachment(".33"));
context.clearAttachments();
Assertions.assertNull(context.getAttachment("_11"));
}
@Test
public void testObject() {
RpcContext context = RpcContext.getContext();
Map<String, Object> map = new HashMap<String, Object>();
map.put("_11", "1111");
map.put("_22", "2222");
map.put(".33", "3333");
map.forEach(context::set);
Assertions.assertEquals(map, context.get());
Assertions.assertEquals("1111", context.get("_11"));
context.set("_11", "11.11");
Assertions.assertEquals("11.11", context.get("_11"));
context.set(null, "22222");
context.set("_22", null);
Assertions.assertEquals("22222", context.get(null));
Assertions.assertNull(context.get("_22"));
Assertions.assertNull(context.get("_33"));
Assertions.assertEquals("3333", context.get(".33"));
map.keySet().forEach(context::remove);
Assertions.assertNull(context.get("_11"));
}
@Test
public void testAsync() {
RpcContext rpcContext = RpcContext.getContext();
Assertions.assertFalse(rpcContext.isAsyncStarted());
AsyncContext asyncContext = RpcContext.startAsync();
Assertions.assertTrue(rpcContext.isAsyncStarted());
asyncContext.write(new Object());
Assertions.assertTrue(((AsyncContextImpl) asyncContext).getInternalFuture().isDone());
rpcContext.stopAsync();
Assertions.assertTrue(rpcContext.isAsyncStarted());
RpcContext.removeContext();
}
@Test
public void testAsyncCall() {
CompletableFuture<String> rpcFuture = RpcContext.getContext().asyncCall(() -> {
throw new NullPointerException();
});
rpcFuture.whenComplete((rpcResult, throwable) -> {
System.out.println(throwable.toString());
Assertions.assertNull(rpcResult);
Assertions.assertTrue(throwable instanceof RpcException);
Assertions.assertTrue(throwable.getCause() instanceof NullPointerException);
});
Assertions.assertThrows(ExecutionException.class, rpcFuture::get);
rpcFuture = rpcFuture.exceptionally(throwable -> "mock success");
Assertions.assertEquals("mock success", rpcFuture.join());
}
@Test
public void testObjectAttachment() {
RpcContext rpcContext = RpcContext.getContext();
rpcContext.setAttachment("objectKey1", "value1");
rpcContext.setAttachment("objectKey2", "value2");
rpcContext.setAttachment("objectKey3", 1); // object
Assertions.assertEquals("value1", rpcContext.getObjectAttachment("objectKey1"));
Assertions.assertEquals("value2", rpcContext.getAttachment("objectKey2"));
Assertions.assertNull(rpcContext.getAttachment("objectKey3"));
Assertions.assertEquals(1, rpcContext.getObjectAttachment("objectKey3"));
Assertions.assertEquals(3, rpcContext.getObjectAttachments().size());
rpcContext.clearAttachments();
Assertions.assertEquals(0, rpcContext.getObjectAttachments().size());
HashMap<String, Object> map = new HashMap<>();
map.put("mapKey1", 1);
map.put("mapKey2", "mapValue2");
rpcContext.setObjectAttachments(map);
Assertions.assertEquals(map, rpcContext.getObjectAttachments());
}
}