Package

Source Code of XForwardedSupportTest

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

import org.junit.Test;

import yalp.Yalp;
import yalp.Logger;
import yalp.mvc.Http.Header;
import yalp.mvc.Http.Request;
import yalp.mvc.Http.Response;
import yalp.test.FunctionalTest;


public class XForwardedSupportTest extends FunctionalTest {
    private static final String xForwardedFor = "10.10.10.10";
    private static final String PAGE_URL = "/users/list";
    private static final String HEADER_XFORWARDED_FOR = "x-forwarded-for";
    private static final String CONFIG_XFORWARD_SUPPORT = "XForwardedSupport";

    @Test
    public void testValidXForwards() throws Exception {
      //Values from application.conf (with commas and comma-spaces for delimiters)
      //XForwardedSupport=127.0.0.1,1.2.3.4, 5.5.5.5
      //These are valid remoteAddresses

      String remoteAddress = "1.2.3.4";
    assertValidTest(remoteAddress, xForwardedFor);

      remoteAddress = "127.0.0.1";
    assertValidTest(remoteAddress, xForwardedFor);

      remoteAddress = "5.5.5.5";
    assertValidTest(remoteAddress, xForwardedFor);
  }
 
  @Test
    public void testInvalidXForwards() throws Exception {
      String remoteAddress = "1.2.3.5";
    assertInvalidTest(remoteAddress, xForwardedFor);

      remoteAddress = "6.6.6.6";
    assertInvalidTest(remoteAddress, xForwardedFor);
    }

    @Test
    public void testAllForwardSupoprt(){
  // modify play configuration, to test ALL
  String prev = null;
  try{
      prev = Yalp.configuration.getProperty(CONFIG_XFORWARD_SUPPORT);
      Yalp.configuration.setProperty(CONFIG_XFORWARD_SUPPORT, "ALL");

      // These are valid if you set XFowardedSupport to ALL
      String remoteAddress = "1.2.3.5";
      assertValidTest(remoteAddress, xForwardedFor);

      remoteAddress = "6.6.6.6";
      assertValidTest(remoteAddress, xForwardedFor);

      remoteAddress = "16.16.16.16";
      assertValidTest(remoteAddress, xForwardedFor);

  }finally{
      //restore
      Yalp.configuration.setProperty(CONFIG_XFORWARD_SUPPORT, prev);
  }
    }

  private void assertValidTest(String remoteAddress, String xForwardedFor) {
    Request request = getRequest(remoteAddress, xForwardedFor);
    Response response = GET(request, PAGE_URL);
    assertIsOk(response);
   
    //remoteAddress should be changed to xForwardedFor address
    assertEquals(xForwardedFor, request.remoteAddress);
  }

  private void assertInvalidTest(String remoteAddress, String xForwardedFor) {
    try {
      Request request = getRequest(remoteAddress, xForwardedFor);
      Response response = GET(request, PAGE_URL);
      fail("XForwarded request should have thrown a runtime exception.");
    } catch (RuntimeException re) {
      assertTrue(re.getMessage().contains(remoteAddress));
    }
  }

  private Request getRequest(String remoteAddress, String xForwardedFor) {
        Map<String, Header> headers = new HashMap<String, Header>();

        Header header = new Header();
        header.name = HEADER_XFORWARDED_FOR;
        header.values = Arrays.asList(new String[]{xForwardedFor});

        headers.put(HEADER_XFORWARDED_FOR, header);

    Request request = Request.createRequest(
                remoteAddress,
                "GET",
                "/",
                "",
                null,
                null,
                null,
                null,
                false,
                80,
                "localhost",
                false,
                headers,
                null
        );
     return request;
  }
}
TOP

Related Classes of XForwardedSupportTest

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.