@Test
 public void testRouteProcess() {
   FilterProcessor processor = new FilterProcessor();
   processor = spy(processor);
   try {
     processor.route();
     verify(processor, times(1)).runFilters("route");
   } catch (Throwable e) {
     e.printStackTrace();
   }
 }
    @Test
    public void testProcessZuulFilter() {
      FilterProcessor processor = new FilterProcessor();
      processor = spy(processor);
      try {
        processor.processZuulFilter(filter);
        verify(processor, times(1)).processZuulFilter(filter);
        verify(filter, times(1)).runFilter();

      } catch (Throwable e) {
        e.printStackTrace();
      }
    }
    @Test
    public void testErrorException() {
      FilterProcessor processor = new FilterProcessor();
      processor = spy(processor);

      try {
        when(processor.runFilters("error")).thenThrow(new Exception("test"));
        when(filter.filterType()).thenReturn("post");
        processor.error();
        assertTrue(true);
      } catch (Throwable e) {
        assertFalse(true);
      }
    }
    @Test
    public void testProcessZuulFilterException() {
      FilterProcessor processor = new FilterProcessor();
      processor = spy(processor);

      try {
        ZuulFilterResult r = new ZuulFilterResult(ExecutionStatus.FAILED);
        r.setException(new Exception("Test"));
        when(filter.runFilter()).thenReturn(r);
        when(filter.filterType()).thenReturn("post");
        processor.processZuulFilter(filter);
        assertFalse(true);
      } catch (Throwable e) {
        assertEquals(e.getCause().getMessage(), "Test");
      }
    }
    @Test
    public void testErrorHttpException() {
      HttpServletRequest request = mock(HttpServletRequest.class);
      HttpServletResponse response = mock(HttpServletResponse.class);
      RequestContext.getCurrentContext().setRequest(request);
      RequestContext.getCurrentContext().setResponse(response);

      FilterProcessor processor = new FilterProcessor();
      processor = spy(processor);
      try {
        when(processor.runFilters("error")).thenThrow(new ZuulException("test", 400, "test"));
        when(filter.filterType()).thenReturn("post");
        processor.error();
        assertTrue(true);
      } catch (Throwable e) {
        e.printStackTrace();
        assertFalse(true);
      }
    }
    @Test
    public void testPostProcessHttpException() {
      HttpServletRequest request = mock(HttpServletRequest.class);
      HttpServletResponse response = mock(HttpServletResponse.class);
      RequestContext.getCurrentContext().setRequest(request);
      RequestContext.getCurrentContext().setResponse(response);

      FilterProcessor processor = new FilterProcessor();
      processor = spy(processor);
      try {
        when(processor.runFilters("post")).thenThrow(new ZuulException("test", 400, "test"));
        when(filter.filterType()).thenReturn("post");
        processor.postRoute();
      } catch (ZuulException e) {
        assertEquals(e.getMessage(), "test");
        assertEquals(e.nStatusCode, 400);
      } catch (Throwable e) {
        e.printStackTrace();
        assertFalse(true);
      }
    }