@Override
    public void filter(final T inMesg) {
        try (TaskCloseable ignored = PerfMark.traceTask(this, s -> s.getClass().getSimpleName() + ".filter")) {
            addPerfMarkTags(inMesg);
            runFilters(inMesg, initRunningFilterIndex(inMesg));
        }
    }
@Test
    void testOutboundFilterChain() {
        final SimpleOutboundFilter outbound1 = spy(new SimpleOutboundFilter(true));
        final SimpleOutboundFilter outbound2 = spy(new SimpleOutboundFilter(false));

        final ZuulFilter[] filters = new ZuulFilter[] {outbound1, outbound2};

        final FilterUsageNotifier notifier = mock(FilterUsageNotifier.class);
        final Registry registry = mock(Registry.class);

        final ZuulFilterChainRunner runner = new ZuulFilterChainRunner(filters, notifier, registry);

        runner.filter(response);

        verify(outbound1, times(1)).applyAsync(any());
        verify(outbound2, never()).applyAsync(any());

        verify(notifier).notify(eq(outbound1), eq(ExecutionStatus.SUCCESS));
        verify(notifier).notify(eq(outbound2), eq(ExecutionStatus.SKIPPED));
        verifyNoMoreInteractions(notifier);
    }