@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 testInboundFilterChain() {
        final SimpleInboundFilter inbound1 = spy(new SimpleInboundFilter(true));
        final SimpleInboundFilter inbound2 = spy(new SimpleInboundFilter(false));

        final ZuulFilter[] filters = new ZuulFilter[] {inbound1, inbound2};

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

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

        runner.filter(request);

        verify(inbound1, times(1)).applyAsync(eq(request));
        verify(inbound2, never()).applyAsync(eq(request));

        verify(notifier).notify(eq(inbound1), eq(ExecutionStatus.SUCCESS));
        verify(notifier).notify(eq(inbound2), eq(ExecutionStatus.SKIPPED));
        verifyNoMoreInteractions(notifier);
    }