@ParameterizedTest
    @ArgumentsSource(SerializationFormatProvider.class)
    void testMultipleInheritance(SerializationFormat defaultSerializationFormat) throws Exception {
        final NameService.Client client1 = new NameService.Client.Factory().getClient(
                inProto(defaultSerializationFormat), outProto(defaultSerializationFormat));
        client1.send_removeMiddle(new Name(BAZ, BAR, FOO));
        assertThat(out.length()).isGreaterThan(0);

        final HttpData req1 = HttpData.wrap(out.getArray(), 0, out.length());

        out = new TMemoryBuffer(128);
        final TProtocol outProto = outProto(defaultSerializationFormat);

        final NameSortService.Client client2 =
                new NameSortService.Client.Factory().getClient(
                        inProto(defaultSerializationFormat), outProto(defaultSerializationFormat));
        client2.send_sort(Arrays.asList(NAME_C, NAME_B, NAME_A));
        assertThat(out.length()).isGreaterThan(0);

        final HttpData req2 = HttpData.wrap(out.getArray(), 0, out.length());

        final THttpService service = THttpService.of(
                (UberNameService) (names, callback) -> callback.onComplete(
                        names.stream().sorted().collect(toImmutableList())),
                defaultSerializationFormat);

        invoke0(service, req1, promise);
        invoke0(service, req2, promise2);

        final HttpData res1 = promise.get();
        final HttpData res2 = promise2.get();

        in.reset(res1.array());
        assertThat(client1.recv_removeMiddle()).isEqualTo(new Name(BAZ, null, FOO));

        in.reset(res2.array());
        assertThat(client2.recv_sort()).containsExactly(NAME_A, NAME_B, NAME_C);
    }
Tests {@link ThriftCallService} and {@link THttpService}.
<p>
The test methods have the following naming convention:

<pre><i>TestType</i>_<i>ServiceName</i>_<i>MethodName</i>[_<i>AdditionalInfo</i>]()</pre>

.. where each field has the following meaning:
<ul>
    <li>{@code TestType}
    <ul>
        <li>{@code Sync} tests an invocation of synchronous service. i.e. {@code *.Iface}</li>
        <li>{@code Async} tests an invocation of asynchronous service. i.e. {@code *.AsyncIface}</li>
        <li>{@code Identity} tests if the results of synchronous and asynchronous operations are identical
            at protocol level.</li>
        <li>{@code MultipleInheritance} tests the case where a service implementation implements
            multiple interfaces.</li>
    </ul></li>
    <li>{@code ServiceName} - the class name of the service being tested</li>
    <li>{@code MethodName} - the name of the method in the service being tested</li>
    <li>(Optional) {@code AdditionalInfo} - specified when a service method has more than one test case</li>
</ul>
</p>
thrift/thrift0.13/src/test/java/com/linecorp/armeria/server/thrift/ThriftServiceTest.java