@Test
    void orElseToString() {
        final Authorizer<Object> a = new NamedAuthorizer<>("A");
        final Authorizer<Object> b = new NamedAuthorizer<>("B");
        final Authorizer<Object> c = new NamedAuthorizer<>("C");
        final Authorizer<Object> d = new NamedAuthorizer<>("D");
        final Authorizer<Object> e = new NamedAuthorizer<>("E");

        // A + B
        assertThat(a.orElse(b).toString()).isEqualTo("[A, B]");
        // A + B + C
        assertThat(a.orElse(b).orElse(c).toString()).isEqualTo("[A, B, C]");
        // A + B + (C + D) + E
        assertThat(a.orElse(b).orElse(c.orElse(d)).orElse(e).toString()).isEqualTo("[A, B, C, D, E]");
    }
When the first {@link Authorizer} returns a {@link CompletionStage} that fulfills with {@code null},
the second {@link Authorizer} shouldn't be invoked.
core/src/test/java/com/linecorp/armeria/server/auth/AuthorizerTest.java