/**
* 版权声明:中图一购网络科技有限公司 版权所有 违者必究 2012
* 日 期:12-2-29
*/
package com.rop.sample;
import com.rop.request.UploadFile;
import com.rop.security.MainErrorType;
import com.rop.utils.RopUtils;
import org.apache.commons.codec.binary.Base64;
import org.springframework.core.io.ClassPathResource;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.HashMap;
import java.util.Map;
import static org.testng.Assert.assertTrue;
/**
* <pre>
* 功能说明:
* </pre>
*
* @author 陈雄华
* @version 1.0
*/
public class UserServiceRawClient {
public static final String SERVER_URL = "http://localhost:8088/router";
private String sessionId;
/**
* 创建一个服务端的会话
*/
// @Test
@BeforeClass
public void createSession() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.getSession");
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("userName", "tomson");
form.add("locale", "en");
//对请求参数列表进行签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
// assertTrue(response.indexOf("<logonResponse sessionId=\"mockSessionId1\"/>") > -1);
}
/**
* 在一切正确的情况下,返回正确的服务报文 (user.add + 1.0)
*/
@Test
public void testAddUserByVersion1() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.add");//<--指定方法名称
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("locale", "en");
// form.add("messageFormat", "json");
form.add("userName", "tomson");
form.add("salary", "2,500.00");
form.add("date", "20140101010101");
// form.add("fileType", "EXCEL");
//对请求参数列表进行签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf("<createUserResponse") > -1);
}
/**
* 测试过期版本的服务
*/
@Test
public void testAddUserByVersion0_9() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.add");//<--指定方法名称
form.add("appKey", "00001");
form.add("v", "0.9");
form.add("sessionId", "mockSessionId1");
form.add("locale", "en");
form.add("userName", "tomson");
form.add("salary", "2,500.00");
//对请求参数列表进行签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf("code=\"" + MainErrorType.METHOD_OBSOLETED.value() + "\"") > -1);
}
/**
* 显式指定返回的报文类型,在配置文件中已经显式指定了 报文格式参数的名称为format
*/
@Test
public void testAddUserWithJsonFormat() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.add");//<--指定方法名称
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("locale", "en");
form.add("messageFormat", "json");
form.add("userName", "tomson");
form.add("salary", "2,500.00");
//对请求参数列表进行签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf("{\"userId\":\"1\",") > -1);
}
/**
* 在一切正确的情况下,返回正确的服务报文 (user.add + 1.0)
*/
@Test
public void testAddUserByVersion2() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.add");//<--指定方法名称
form.add("appKey", "00001");
form.add("v", "2.0");
form.add("sessionId", "mockSessionId1");
form.add("locale", "en");
form.add("userName", "tomson");
form.add("salary", "2,500.00");
//对请求参数列表进行签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf("<createUserResponse ") > -1);
}
/**
* 在一切正确的情况下,返回正确的服务报文 (user.add + 1.0)
*/
@Test
public void testQueryUserByUserId() {
RestTemplate restTemplate = new RestTemplate();
Map<String, String> form = new HashMap<String, String>();
form.put("method", "user.query");//<--指定方法名称
form.put("appKey", "00001");
form.put("v", "1.0");
form.put("sessionId", "mockSessionId1");
form.put("locale", "en");
form.put("userId", "userId1");
//对请求参数列表进行签名
String sign = RopUtils.sign(form, "abcdeabcdeabcdeabcdeabcde");
form.put("sign", sign);
//使用GET获取:正确返回
String response = restTemplate.getForObject(
SERVER_URL +
"?method={method}&appKey={appKey}&v={v}&sessionId={sessionId}&locale={locale}" +
"&userId={userId}&sign={sign}",
String.class, form);
System.out.println("response:" + response);
assertTrue(response.indexOf("user.query") > -1 && response.indexOf("userId1") > -1);
}
/**
* 测试自定义的类型转换器{@link com.rop.sample.converter.TelephoneConverter}
*/
@Test
public void testCustomConverter() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.customConverter");//<--指定方法名称
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("locale", "en");
form.add("userName", "tomson");
form.add("salary", "2,500.00");
form.add("telephone", "0592-12345678");
//对请求参数列表进行签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf("0592#12345678") > -1);
}
/**
* 验证内部格式为XML的请求参数会正确绑定到RopRequest的内部属性对象中,参见{@link com.rop.sample.request.CreateUserRequest#address}
*
* @see com.rop.sample.request.Address
*/
@Test
public void testServiceXmlRequestAttr() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.add");//<--指定方法名称
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("userName", "tomson");
form.add("salary", "2,500.00");
//address会正确绑定
form.add("address",
"<address zoneCode=\"0001\" doorCode=\"002\">\n" +
" <streets>\n" +
" <street no=\"001\" name=\"street1\"/>\n" +
" <street no=\"002\" name=\"street2\"/>\n" +
" </streets>\n" +
"</address>");
//对请求参数列表进行签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
// System.out.println("response:\n" + response);
// assertTrue(response.indexOf("<createUserResponse createTime=\"20120101010101\" userId=\"1\">") > -1);
}
@Test
public void testServiceJsonRequestAttr() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.add");//<--指定方法名称
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("userName", "tomson");
form.add("salary", "2,500.00");
form.add("messageFormat", "json");
//address会正确绑定
form.add("address",
"{\"zoneCode\":\"0001\",\n" +
" \"doorCode\":\"002\",\n" +
" \"codes\":[\"aa\",\"bb\",\"cc\"],\n"+
" \"streets\":[{\"no\":\"001\",\"name\":\"street1\"},\n" +
" {\"no\":\"002\",\"name\":\"street2\"}]}");
// form.add("favorites", "\"aa\",\"bb\",\"cc\"");
form.add("addresses",
"[{\"zoneCode\":\"0001\",\n" +
" \"doorCode\":\"002\",\n" +
" \"codes\":[\"aa\",\"bb\",\"cc\"],\n"+
" \"streets\":[{\"no\":\"001\",\"name\":\"street1\"},\n" +
" {\"no\":\"002\",\"name\":\"street2\"}]}]");
form.add("addresses",
"[{\"zoneCode\":\"0001\"},{\"zoneCode\":\"0001\"}]");
form.add("favorites", "\"aa\",\"bb\",\"cc\"");
form.add("attachMap", "{\"key1\":\"value1\",\"key2\":\"value2\"}");
//对请求参数列表进行签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf("\"userId\":\"1\"") > -1);
}
/**
* 由于{@link com.rop.sample.request.CreateUserRequest#password}标注了{@link com.rop.annotation.IgnoreSign},所以Rop
* 会忽略对password请求参数进行签名验证。
*/
@Test
public void testIngoreSignParamOfPassword() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.add");//<--指定方法名称
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("userName", "tomsony");
form.add("salary", "2,500.00");
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
form.add("password", "123456"); //password无需签名,所以放在最后
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf("<createUserResponse") > -1);
}
/**
* 忽略对 user.add#4.0服务的会话验证功能
*/
@Test
public void testIngoreSession() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("appKey", "00001");
form.add("method", "user.add");//<--指定方法名称
form.add("v", "4.0");
form.add("userName", "tomsony");
form.add("salary", "2,500.00");
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
String response = restTemplate.postForObject(SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf("userId=\"4\"") > -1);
}
/**
* 忽略对user.add#5.0服务的签名验证功能
*/
@Test
public void testIngoreSign() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("appKey", "00001");
form.add("method", "user.add");//<--指定方法名称
form.add("v", "5.0");
form.add("userName", "tomsony");
form.add("sessionId", "mockSessionId1");
form.add("salary", "2,500.00");
// String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
// form.add("sign", sign);
String response = restTemplate.postForObject(SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf("userId=\"4\"") > -1);
}
/**
* 请求参数违反合法性校验限制时,返回相应的错误报文
* 服务端限制salary的格式必须是“#,###.##”,且必须在1000.00和100000.00之间,
* 参见{@link com.rop.sample.request.CreateUserRequest#salary}
*/
@Test
public void testParamConstrainViolation() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.add");//<--指定方法名称
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("userName", "tom");
form.add("salary", "aaa");
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf("isv.parameters-mismatch:salary") > -1);
}
/**
* 在类路径的rop.appSecret.properties中我们定义了两个合法的appKey,分别是:
* 00001=abcdeabcdeabcdeabcdeabcde
* 00002=abcdeabcdeabcdeabcdeaaaaa
* 我们使用一个错误的appKey以验证是否会返回正确的错误报文。
*/
@Test
public void testInvalidSysParams() {
RestTemplate restTemplate = new RestTemplate();
Map<String, String> form = new HashMap<String, String>();
form.put("method", "user.get");//<--指定方法名称
form.put("appKey", "00001");
form.put("v", "1.0");
form.put("sessionId", "mockSessionId1");
form.put("locale", "en");
form.put("userName", "tomson");
form.put("salary", "2,500.00");
//对请求参数列表进行签名
String sign = RopUtils.sign(form, "abcdeabcdeabcdeabcdeabcde");
form.put("sign", sign);
//使用GET获取:正确返回
String response = restTemplate.getForObject(
SERVER_URL +
"?appKey={appKey}&locale={locale}&method={method}&salary={salary}&sessionId={sessionId}" +
"&userName={userName}&v={v}&sign={sign}",
String.class, form);
System.out.println("response:" + response);
}
@Test
public void testI18nErrorMessage() {
RestTemplate restTemplate = new RestTemplate();
Map<String, String> form = new HashMap<String, String>();
form.put("method", "user.add");//<--指定方法名称
form.put("appKey", "00001");
form.put("v", "1.0");
form.put("sessionId", "mockSessionId1");
form.put("locale", "en");
form.put("userName", "tomson");
form.put("salary", "aaa");
//对请求参数列表进行签名
form.put("sign", RopUtils.sign(form, "abcdeabcdeabcdeabcdeabcde"));
//使用GET获取:正确返回
String response = restTemplate.getForObject(
SERVER_URL +
"?appKey={appKey}&locale={locale}&method={method}&salary={salary}&sessionId={sessionId}" +
"&userName={userName}&v={v}&sign={sign}",
String.class, form);
System.out.println("response:" + response);
form.clear();
form.put("method", "user.add");//<--指定方法名称
form.put("appKey", "00001");
form.put("v", "1.0");
form.put("sessionId", "mockSessionId1");
form.put("locale", "zh_CN");
form.put("userName", "tomson");
form.put("salary", "aaa");
//对请求参数列表进行签名
form.put("sign", RopUtils.sign(form, "abcdeabcdeabcdeabcdeabcde"));
//使用GET获取:正确返回
response = restTemplate.getForObject(
SERVER_URL +
"?appKey={appKey}&locale={locale}&method={method}&salary={salary}&sessionId={sessionId}" +
"&userName={userName}&v={v}&sign={sign}",
String.class, form);
System.out.println("response:" + response);
}
/**
* 请求参数违反合法性校验限制时,返回相应的错误报文
* 服务端限制salary的格式必须是“#,###.##”,且必须在1000.00和100000.00之间,
* 参见{@link com.rop.sample.request.CreateUserRequest#salary}
*/
@Test
public void testInvalidSign() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.add");//<--指定方法名称
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("userName", "tomson");
form.add("salary", "2,500.00");
//设置一个错误的签名
String sign = "xxx";
form.add("sign", sign);
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf("code=\"" + MainErrorType.INVALID_SIGNATURE.value() + "\"") > -1);
}
/**
* 在{@link SampleAppSecretManager}中,我们模拟让sessionId为mockSessionId1拥有访问
* {@link UserService#addUser(com.rop.sample.request.CreateUserRequest)}的权限,而sessionId为mockSessionId2时则没有这个权限。
* 将返回会话错误的响应报文。
*/
@Test
public void testInvalidSessionId() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.add");
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId2"); //<--模拟一个错误的sessionId
form.add("userName", "tomson");
form.add("salary", "2,500.00");
//设置一个错误的签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf("code=\"" + MainErrorType.INVALID_SESSION.value() + "\"") > -1);
}
/**
* 在{@link SampleSessionChecker}中,我们模拟了一个合法的sessionId,即 mockSessionId1,使用其它的sessionId,
* 将返回会话错误的响应报文。
*/
@Test
public void testViolationServiceAccessController() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.add");
form.add("appKey", "00003");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("userName", "tomsony");
form.add("salary", "2,500.00");
//设置一个错误的签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeaaaaa");
form.add("sign", sign);
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf("code=\"" + MainErrorType.INSUFFICIENT_ISV_PERMISSIONS.value() + "\"") > -1);
}
/**
* 违反应用最大服务调用次数的限制
*/
@Test
public void testViolationInvokeTimesController() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.add");
form.add("appKey", "00002");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("userName", "tomsony");
form.add("salary", "2,500.00");
//设置一个错误的签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeaaaaa");
form.add("sign", sign);
for (int i = 0; i < 11; i++) {
restTemplate.postForObject(SERVER_URL, form, String.class);
}
String response = restTemplate.postForObject(SERVER_URL, form, String.class);
System.out.println("response1:" + response);
assertTrue(response.indexOf("code=\"" + MainErrorType.EXCEED_APP_INVOKE_LIMITED.value() + "\"") > -1);
}
/**
* “jhon”是{@link UserService#addUser(com.rop.sample.request.CreateUserRequest)} 服务方法预留的用户名,
* 验证其会返回正确的业务错误码。
*/
@Test
public void testBusinessServiceError() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.add");//<--指定方法名称
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("userName", "jhon");
form.add("salary", "2,500.00");
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
form.add("password", "123456"); //password无需签名,所以放在最后
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
//返回业务的错误报文
assertTrue(response.indexOf("isv.user-add-service-error:USER_NAME_RESERVED") > 0);
}
/**
* 测试被拦截器阻截服务的情况 (user.add + 1.0)
*/
@Test
public void testAddUserWithInterceptorViolidateReservedUserName() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.add");//<--指定方法名称
form.add("appKey", "00001");
form.add("v", "2.0");
form.add("sessionId", "mockSessionId1");
form.add("locale", "en");
form.add("userName", "jhonson");//这个用户名会被ReservedUserNameInterceptor拦截器驳回
form.add("salary", "2,500.00");
//对请求参数列表进行签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf("the userName can't be jhonson!") > -1);
}
/**
* user.timeout 服务方法必须在1秒内执行完成,我们在服务端故意让user.timeout过期,看是否会返回正确的错误报文
*/
@Test
public void testServiceWhenExceedTimeout() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.timeout");//<--指定方法名称
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("locale", "zh_CN");
form.add("userName", "tomson");
form.add("salary", "2,500.00");
//对请求参数列表进行签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:" + response);
assertTrue(response.indexOf("isp.user-timeout-service-timeout") > -1);
}
/**
* user.get 获取用户的信息
*/
@Test
public void testGetUserWithGET() {
RestTemplate restTemplate = new RestTemplate();
Map<String, String> form = new HashMap<String, String>();
form.put("method", "user.get");//<--指定方法名称
form.put("appKey", "00001");
form.put("v", "1.0");
form.put("sessionId", "mockSessionId1");
form.put("locale", "en");
form.put("userId", "1");
//对请求参数列表进行签名
String sign = RopUtils.sign(form, "abcdeabcdeabcdeabcdeabcde");
form.put("sign", sign);
//使用GET获取:正确返回
String response = restTemplate.getForObject(
SERVER_URL +
"?method={method}&appKey={appKey}&v={v}&sessionId={sessionId}&locale={locale}" +
"&userId={userId}&sign={sign}",
String.class, form);
System.out.println("response:" + response);
assertTrue(response.indexOf("user.get") > -1);
}
/**
* user.get 获取用户的信息
*/
@Test
public void testGetUserWithPOST() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.get");//<--指定方法名称
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("locale", "en");
form.add("userId", "2");
//对请求参数列表进行签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf("code=\"5\"") > -1);
}
@Test
public void testGetUserOf9999() {
RestTemplate restTemplate = new RestTemplate();
Map<String, String> form = new HashMap<String, String>();
form.put("method", "user.get");//<--指定方法名称
form.put("appKey", "00001");
form.put("v", "1.0");
form.put("sessionId", "mockSessionId1");
form.put("locale", "en");
form.put("userId", "9999");
form.put("salary", "2,500.00");
//对请求参数列表进行签名
String sign = RopUtils.sign(form, "abcdeabcdeabcdeabcdeabcde");
form.put("sign", sign);
//使用GET获取:正确返回
String response = restTemplate.getForObject(
SERVER_URL +
"?method={method}&appKey={appKey}&v={v}&sessionId={sessionId}&locale={locale}" +
"&userId={userId}&salary={salary}&sign={sign}",
String.class, form);
System.out.println("response:" + response);
assertTrue(response.indexOf("isv.user-not-exist") > -1);
}
/**
* 测试多次执行的服务性能: 100次调用,在1秒内完成!
*/
@Test(timeOut = 2000)
public void testMultiTimeRun() {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.add");//<--指定方法名称
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("locale", "en");
form.add("userName", "tomson");
form.add("salary", "2,500.00");
//对请求参数列表进行签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
long begin = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
assertTrue(response.indexOf("<createUserResponse") > -1);
}
System.out.println("time elapsed:" + (System.currentTimeMillis() - begin));
}
/**
* 测试文件上传
*/
@Test
public void testUploadUserPhoto() throws Throwable {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.upload.photo");
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("locale", "en");
form.add("userId", "1");
ClassPathResource resource = new ClassPathResource("photo.png");
UploadFile uploadFile = new UploadFile(resource.getFile());
//对请求参数列表进行签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
form.add("photo", "png@" + Base64.encodeBase64String(uploadFile.getContent())); //文件不进行签名
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf("png") > -1);
}
/**
* 上传文件类型不允许
*/
@Test
public void testUploadErrorFileType() throws Throwable {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.upload.photo");
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("locale", "en");
form.add("userId", "1");
ClassPathResource resource = new ClassPathResource("photo.png");
UploadFile uploadFile = new UploadFile(resource.getFile());
//对请求参数列表进行签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
form.add("photo", "exe@" + Base64.encodeBase64String(uploadFile.getContent())); //文件不进行签名
String response = restTemplate.postForObject(
SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf(MainErrorType.UPLOAD_FAIL.value()) > -1);
}
/**
* 测试文件大小超限
*
* @throws Throwable
*/
@Test
public void testUploadExceedMaxSizeError() throws Throwable {
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.add("method", "user.upload.photo");
form.add("appKey", "00001");
form.add("v", "1.0");
form.add("sessionId", "mockSessionId1");
form.add("locale", "en");
form.add("userId", "1");
ClassPathResource resource = new ClassPathResource("exceedMaxSize.png");
UploadFile uploadFile = new UploadFile(resource.getFile());
//对请求参数列表进行签名
String sign = RopUtils.sign(form.toSingleValueMap(), "abcdeabcdeabcdeabcdeabcde");
form.add("sign", sign);
form.add("photo", "png@" + Base64.encodeBase64String(uploadFile.getContent())); //文件不进行签名
String response = restTemplate.postForObject(SERVER_URL, form, String.class);
System.out.println("response:\n" + response);
assertTrue(response.indexOf(MainErrorType.UPLOAD_FAIL.value()) > -1);
}
@Test
public void testStreamOutput() {
RestTemplate restTemplate = new RestTemplate();
Map<String, String> form = new HashMap<String, String>();
form.put("method", "img.get");//<--指定方法名称
form.put("appKey", "00001");
form.put("v", "1.0");
form.put("locale", "en");
form.put("sessionId", "mockSessionId1");
form.put("messageFormat", "stream");
//对请求参数列表进行签名
String sign = RopUtils.sign(form, "abcdeabcdeabcdeabcdeabcde");
form.put("sign", sign);
//使用GET获取:正确返回
String response = restTemplate.getForObject(
SERVER_URL +
"?method={method}&appKey={appKey}&v={v}&sessionId={sessionId}&locale={locale}" +
"&messageFormat={messageFormat}&sign={sign}",
String.class, form);
// System.out.println("response:" + response);
// assertTrue(response.indexOf("Is StreamOutput!") > -1);
}
}