blob: 74310bbb597ca401846a6034a4effee61f826e11 [file] [log] [blame]
package com.alibaba.dubbo.rpc.support;
import java.util.HashMap;
import java.util.Map;
import junit.framework.Assert;
import org.junit.Test;
import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.RpcInvocation;
public class RpcUtilsTest {
/**
* 正常场景:url中表示了方法异步调用
* 验证:1. invocationId是否正常设置,2.幂等测试
*/
@Test
public void testAttachInvocationIdIfAsync_normal() {
URL url = URL.valueOf("dubbo://localhost/?test.async=true");
Map<String,String> attachments = new HashMap<String,String>();
attachments.put("aa", "bb");
Invocation inv = new RpcInvocation("test", new Class[]{}, new String[]{}, attachments);
RpcUtils.attachInvocationIdIfAsync(url, inv);
long id1 = RpcUtils.getInvocationId(inv);
RpcUtils.attachInvocationIdIfAsync(url, inv);
long id2 = RpcUtils.getInvocationId(inv);
Assert.assertTrue( id1 == id2); //幂等操作验证
Assert.assertTrue( id1 >= 0);
Assert.assertEquals("bb", attachments.get("aa"));
}
/**
* 场景:同步调用,不默认添加acctachment
* 验证:acctachment中没有添加id属性
*/
@Test
public void testAttachInvocationIdIfAsync_sync() {
URL url = URL.valueOf("dubbo://localhost/");
Invocation inv = new RpcInvocation("test", new Class[]{}, new String[]{});
RpcUtils.attachInvocationIdIfAsync(url, inv);
Assert.assertNull(RpcUtils.getInvocationId(inv));
}
/**
* 场景:异步调用,默认添加attachement
* 验证:当原始acctachment为null时,不能报错.
*/
@Test
public void testAttachInvocationIdIfAsync_nullAttachments() {
URL url = URL.valueOf("dubbo://localhost/?test.async=true");
Invocation inv = new RpcInvocation("test", new Class[]{}, new String[]{});
RpcUtils.attachInvocationIdIfAsync(url, inv);
Assert.assertTrue(RpcUtils.getInvocationId(inv) >= 0l);
}
/**
* 场景:强制设置为不添加
* 验证:acctachment中没有添加id属性
*/
@Test
public void testAttachInvocationIdIfAsync_forceNotAttache() {
URL url = URL.valueOf("dubbo://localhost/?test.async=true&"+Constants.AUTO_ATTACH_INVOCATIONID_KEY+"=false");
Invocation inv = new RpcInvocation("test", new Class[]{}, new String[]{});
RpcUtils.attachInvocationIdIfAsync(url, inv);
Assert.assertNull(RpcUtils.getInvocationId(inv));
}
/**
* 场景:强制设置为添加
* 验证:acctachment中有添加id属性
*/
@Test
public void testAttachInvocationIdIfAsync_forceAttache() {
URL url = URL.valueOf("dubbo://localhost/?"+Constants.AUTO_ATTACH_INVOCATIONID_KEY+"=true");
Invocation inv = new RpcInvocation("test", new Class[]{}, new String[]{});
RpcUtils.attachInvocationIdIfAsync(url, inv);
Assert.assertNotNull(RpcUtils.getInvocationId(inv));
}
}