@Test
  public void testAnonymous() throws Exception {
    Filter filter = new FalconAuthenticationFilter();

    synchronized (StartupProperties.get()) {
      filter.init(mockConfig);
    }

    CurrentUser.authenticate("nouser");
    Assert.assertEquals(CurrentUser.getUser(), "nouser");

    CurrentUser.authenticate(FalconTestUtil.TEST_USER_2);
    Mockito.when(mockRequest.getRemoteUser()).thenReturn(FalconTestUtil.TEST_USER_2);
    filter.doFilter(mockRequest, mockResponse, mockChain);
    Assert.assertEquals(CurrentUser.getUser(), FalconTestUtil.TEST_USER_2);
  }
  @Test
  public void testDoFilterWithEmptyDoAsUser() throws Exception {
    Filter filter = new FalconAuthenticationFilter();
    synchronized (StartupProperties.get()) {
      filter.init(mockConfig);
    }

    CurrentUser.authenticate(FalconTestUtil.TEST_USER_2);
    Mockito.when(mockRequest.getMethod()).thenReturn("POST");
    Mockito.when(mockRequest.getQueryString())
        .thenReturn("user.name=" + FalconTestUtil.TEST_USER_2);
    Mockito.when(mockRequest.getRemoteUser()).thenReturn(FalconTestUtil.TEST_USER_2);
    Mockito.when(mockRequest.getParameter(FalconAuthenticationFilter.DO_AS_PARAM)).thenReturn("");
    filter.doFilter(mockRequest, mockResponse, mockChain);
    Assert.assertEquals(CurrentUser.getUser(), FalconTestUtil.TEST_USER_2);
  }
  @Test
  public void testDoFilterWithDoAsUser() throws Exception {
    Filter filter = new FalconAuthenticationFilter();
    HostnameFilter.HOSTNAME_TL.set("localhost");
    synchronized (StartupProperties.get()) {
      filter.init(mockConfig);
    }

    CurrentUser.authenticate("foo");
    Mockito.when(mockRequest.getMethod()).thenReturn("POST");
    Mockito.when(mockRequest.getQueryString()).thenReturn("user.name=foo");
    Mockito.when(mockRequest.getRemoteUser()).thenReturn("foo");
    Mockito.when(mockRequest.getParameter(FalconAuthenticationFilter.DO_AS_PARAM))
        .thenReturn("doAsProxyUser");
    Mockito.when(mockRequest.getMethod()).thenReturn("POST");
    filter.doFilter(mockRequest, mockResponse, mockChain);
    Assert.assertEquals(CurrentUser.getUser(), "doAsProxyUser");
  }
  @Test(
      expectedExceptions = AccessControlException.class,
      expectedExceptionsMessageRegExp = "User .* not defined as proxyuser.*")
  public void testDoFilterWithInvalidProxyUser() throws Exception {
    Filter filter = new FalconAuthenticationFilter();
    HostnameFilter.HOSTNAME_TL.set("localhost");
    synchronized (StartupProperties.get()) {
      filter.init(mockConfig);
    }

    CurrentUser.authenticate(FalconTestUtil.TEST_USER_2);
    Mockito.when(mockRequest.getMethod()).thenReturn("POST");
    Mockito.when(mockRequest.getQueryString())
        .thenReturn("user.name=" + FalconTestUtil.TEST_USER_2);
    Mockito.when(mockRequest.getRemoteUser()).thenReturn(FalconTestUtil.TEST_USER_2);
    Mockito.when(mockRequest.getParameter(FalconAuthenticationFilter.DO_AS_PARAM))
        .thenReturn("doAsProxyUser");
    Mockito.when(mockRequest.getMethod()).thenReturn("POST");
    filter.doFilter(mockRequest, mockResponse, mockChain);
    Assert.assertEquals(CurrentUser.getUser(), "doAsProxyUser");
  }