Package com.rop.sample

Source Code of com.rop.sample.UserServiceRawClient

/**
* 版权声明:中图一购网络科技有限公司 版权所有 违者必究 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);
    }

}
TOP

Related Classes of com.rop.sample.UserServiceRawClient

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.