@Test
public void extractUriForNettyRequests() {

  //@formatter:off (Eclipse formatter)
  //CHECKSTYLE:OFF (Maven checkstyle)
  String [][] uris = {
      /* 0: cp         1: sr          2: od       3: qp        4: spl  */
      {  "",           "",          "",          "",         "0"},
      {  "",           "",          "/",         "",         "0"},
      {  "",           "",          "/od",       "",         "0"},
      {  "",           "",          "/od/",      "",         "0"},
      {  "/cp",        "",          "",          "",         "0"},
      {  "/cp",        "",          "/",         "",         "0"},
      {  "/cp",        "",          "/od",       "",         "0"},
      {  "",           "/sr",       "",          "",         "1"},
      {  "",           "/sr",       "/",         "",         "1"},
      {  "",           "/sr",       "/od",       "",         "1"},
      {  "",           "/sr/sr",    "",          "",         "2"},
      {  "",           "/sr/sr",    "/",         "",         "2"},
      {  "",           "/sr/sr",    "/od",       "",         "2"},
      {  "/cp",        "/sr",       "/",         "",         "1"},
      {  "/cp",        "/sr",       "/od",       "",         "1"},
      
      {  "",           "",          "",          "qp",       "0"},
      {  "",           "",          "/",         "qp",       "0"},
      {  "/cp",        "/sr",       "/od",       "qp",       "1"},
      {  "/c%20p",     "/s%20r",    "/o%20d",    "p+q",      "1"},
  };
  //@formatter:on
  // CHECKSTYLE:on
  for (String[] p : uris) {
    HttpRequest hr = mock(HttpRequest.class);
    String requestUrl = p[0] + p[1] + p[2];
    if (!p[3].equals("") || p[3].length() > 0) {
  	  requestUrl += "?$" + p[3];
    }
    when(hr.uri()).thenReturn(requestUrl);
    
    ODataRequest odr = new ODataRequest();
    ODataNettyHandlerImpl.fillUriInformationFromHttpRequest(odr, hr, Integer.parseInt(p[4]), p[0]);
    String rawBaseUri = p[0] + p[1];
    String rawODataPath = p[2];
    String rawQueryPath = "".equals(p[3]) ? null : "$" + p[3];
    String rawRequestUri = p[0] + p[1] + p[2] + ("".equals(p[3]) ? "" : "?$" + p[3]);
    String rawServiceResolutionUri = "".equals(p[1]) ? null : p[1];
    assertEquals(rawBaseUri, odr.getRawBaseUri());
    assertEquals(rawODataPath, odr.getRawODataPath());
    assertEquals(rawQueryPath, odr.getRawQueryPath());
    assertEquals(rawRequestUri, odr.getRawRequestUri());
    assertEquals(rawServiceResolutionUri, odr.getRawServiceResolutionUri());
  }
}