Package com.bj58.spat.gaea.server.core.communication.http

Source Code of com.bj58.spat.gaea.server.core.communication.http.RequestMappingTest

package com.bj58.spat.gaea.server.core.communication.http;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import junit.framework.Assert;

import org.junit.Test;

import com.bj58.spat.gaea.server.contract.annotation.HttpParameterType;
import com.bj58.spat.gaea.server.contract.annotation.HttpRequestMethod;
import com.bj58.spat.gaea.server.contract.context.Global;
import com.bj58.spat.gaea.server.contract.context.ServiceConfig;
import com.bj58.spat.gaea.server.core.communication.http.Action;
import com.bj58.spat.gaea.server.core.communication.http.Controler;
import com.bj58.spat.gaea.server.core.communication.http.HttpContext;
import com.bj58.spat.gaea.server.core.communication.http.RequestMapping;
import com.bj58.spat.gaea.server.core.communication.http.Action.Parameter;
import com.bj58.spat.gaea.server.deploy.bytecode.ClassInfo.ParamInfo;

public class RequestMappingTest {

  @SuppressWarnings("unchecked")
  private Map<String, Controler> init() throws Exception {
    ServiceConfig sc = ServiceConfig
        .getServiceConfig("E:/javaproject/bj58.gaea.server/config/demo_config_all.xml");
    Global.getSingleton().setServiceConfig(sc);
    Global.getSingleton().setRootPath("D:/gaea/server/");

    Class<?> cls = RequestMapping.class;
    Method m = cls.getDeclaredMethod("init");
    m.setAccessible(true);
    Field f = cls.getDeclaredField("urlMap");
    f.setAccessible(true);
    m.invoke(cls);

    return (Map<String, Controler>) f.get(cls);
  }

  @SuppressWarnings({ "rawtypes", "unchecked" })
  @Test
  public void testInit() throws Exception {

    Map<String, Controler> urlMap = init();

    Iterator<?> it = urlMap.entrySet().iterator();

    List<Map.Entry<String, Controler>> entryList = new ArrayList<Map.Entry<String, Controler>>();

    while (it.hasNext()) {
      entryList.add((Entry) it.next());
    }

    Assert.assertEquals("/news/(\\d+)", entryList.get(1).getKey());
    Assert.assertEquals("RestService", entryList.get(1).getValue()
        .getGetAction().getLookup());
    Assert.assertEquals("getNews", entryList.get(1).getValue()
        .getGetAction().getMethodName());
    Assert.assertEquals("newsID", entryList.get(1).getValue()
        .getGetAction().getParamList().get(0).getMapping());
    Assert.assertEquals(0, entryList.get(1).getValue().getGetAction()
        .getParamList().get(0).getMethodParaIndex());
    Assert.assertEquals(0, entryList.get(1).getValue().getGetAction()
        .getParamList().get(0).getUrlParaIndex());
    Assert.assertEquals(HttpParameterType.PathParameter, entryList.get(1)
        .getValue().getGetAction().getParamList().get(0).getParaType());

    Assert.assertEquals("/newslist/(\\d+)/(\\d+)", entryList.get(0)
        .getKey());
    Assert.assertEquals("RestService", entryList.get(0).getValue()
        .getGetAction().getLookup());
    Assert.assertEquals("getNews", entryList.get(0).getValue()
        .getGetAction().getMethodName());

    Assert.assertEquals("cateID", entryList.get(0).getValue()
        .getGetAction().getParamList().get(0).getMapping());
    Assert.assertEquals(0, entryList.get(0).getValue().getGetAction()
        .getParamList().get(0).getMethodParaIndex());
    Assert.assertEquals(0, entryList.get(0).getValue().getGetAction()
        .getParamList().get(0).getUrlParaIndex());
    Assert.assertEquals(HttpParameterType.PathParameter, entryList.get(0)
        .getValue().getGetAction().getParamList().get(0).getParaType());

    Assert.assertEquals("userID", entryList.get(0).getValue()
        .getGetAction().getParamList().get(1).getMapping());
    Assert.assertEquals(1, entryList.get(0).getValue().getGetAction()
        .getParamList().get(1).getMethodParaIndex());
    Assert.assertEquals(1, entryList.get(0).getValue().getGetAction()
        .getParamList().get(1).getUrlParaIndex());
    Assert.assertEquals(HttpParameterType.PathParameter, entryList.get(0)
        .getValue().getGetAction().getParamList().get(1).getParaType());

  }

  @Test
  public void testGetUrlParaIndex() throws Exception {
    int expected = 0;
    int actual = RequestMapping.getUrlParaIndex("/news/{newsID}/{cateID}",
        "newsID");
    Assert.assertEquals(expected, actual);
  }

  @Test
  public void testGetActionHttpContext() throws Exception {
    init();

    HttpContext hc = new HttpContext();
    hc.setUri("/news/101001");
    hc.setMethod(HttpRequestMethod.GET);

    Action action = RequestMapping.getAction(hc);
    List<Parameter> paraList = action.getParamList();

    Assert.assertEquals("RestService", action.getLookup());
    Assert.assertEquals("getNews", action.getMethodName());
    Assert.assertEquals(1, paraList.size());
    Assert.assertEquals("newsID", paraList.get(0).getMapping());
    Assert.assertEquals(0, paraList.get(0).getMethodParaIndex());
    Assert.assertEquals(0, paraList.get(0).getUrlParaIndex());
    Assert.assertEquals(101001, paraList.get(0).getValue());
    Assert.assertEquals(HttpParameterType.PathParameter, paraList.get(0)
        .getParaType());

    hc.setUri("/newslist/101002/123");
    action = RequestMapping.getAction(hc);

    Assert.assertEquals("RestService", action.getLookup());
    Assert.assertEquals("getNews", action.getMethodName());
    Assert.assertEquals(2, action.getParamList().size());

    Assert.assertEquals("cateID", action.getParamList().get(0).getMapping());
    Assert.assertEquals(0, action.getParamList().get(0)
        .getMethodParaIndex());
    Assert.assertEquals(0, action.getParamList().get(0).getUrlParaIndex());
    Assert.assertEquals(101002, action.getParamList().get(0).getValue());
    Assert.assertEquals(HttpParameterType.PathParameter, action
        .getParamList().get(0).getParaType());

    Assert.assertEquals("userID", action.getParamList().get(1).getMapping());
    Assert.assertEquals(1, action.getParamList().get(1)
        .getMethodParaIndex());
    Assert.assertEquals(1, action.getParamList().get(1).getUrlParaIndex());
    Assert.assertEquals(123, action.getParamList().get(1).getValue());
    Assert.assertEquals(HttpParameterType.PathParameter, action
        .getParamList().get(1).getParaType());
  }

  @Test
  public void testCreateRegexUrl() {
    String expected = "http://bj.58.com/infolist/(\\d+)/(\\w+)";
    String actual;

    String sourceUrl = "http://bj.58.com/infolist/{userID}/{cateName}";
    ParamInfo[] piAry = new ParamInfo[2];
    piAry[0] = new ParamInfo(0, int.class, null, "uid", "userID", null);
    piAry[1] = new ParamInfo(1, String.class, null, "cn", "cateName", null);

    actual = RequestMapping.createRegexUrl(sourceUrl, piAry);

    Assert.assertEquals(expected, actual);
  }

  @Test
  public void testRegex() {
    String regUrl = "/news/(\\d+)";
    String sourceUrl = "/news/101001";

    Pattern pattern = Pattern.compile(regUrl);
    Matcher matcher = pattern.matcher(sourceUrl);
    if (matcher.find()) {
      Assert.assertEquals("101001", matcher.group(1));
    }

    regUrl = "/news/(\\d+)/(\\w+)/(\\d+)";
    sourceUrl = "/news/101002/abc123/23456";

    pattern = Pattern.compile(regUrl);
    matcher = pattern.matcher(sourceUrl);
    if (matcher.find()) {
      Assert.assertEquals("101002", matcher.group(1));
      Assert.assertEquals("abc123", matcher.group(2));
      Assert.assertEquals("23456", matcher.group(3));
    }
  }

  @Test
  public void testConvertValue() throws Exception {
    Object expected = 101001;
    Object actual;

    String type = "int";
    String value = "101001";
    actual = RequestMapping.convertValue(type, value);
    Assert.assertEquals(expected, actual);

    expected = new Entity(101001, "hello");
    type = "com.bj58.spat.gaea.server.core.communication.http.Entity";
    value = "{\"id\":101001,\"title\":\"hello\"}";
    actual = RequestMapping.convertValue(type, value);

    Assert.assertEquals(((Entity) expected).getId(),
        ((Entity) actual).getId());
    Assert.assertEquals(((Entity) expected).getTitle(),
        ((Entity) actual).getTitle());
  }
}
TOP

Related Classes of com.bj58.spat.gaea.server.core.communication.http.RequestMappingTest

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.