@Override
    public void start() {
        try {
            createAndStartGrpcServer();
        } catch (final IOException e) {
            throw new IllegalStateException("Failed to start the grpc server", e);
        }
    }
@Test
    void testNoGraceShutdown() {
        // The server takes 5s seconds to shutdown
        final TestServer server = new TestServer(5000);
        when(this.factory.createServer()).thenReturn(server);

        // But we won't wait
        final GrpcServerLifecycle lifecycle = new GrpcServerLifecycle(this.factory, ZERO, this.eventPublisher);

        lifecycle.start();
        verify(this.eventPublisher).publishEvent(ArgumentMatchers.any(GrpcServerStartedEvent.class));

        assertFalse(server.isShutdown());
        assertFalse(server.isTerminated());

        // So the shutdown should complete near instantly
        assertTimeoutPreemptively(ofMillis(100), (Executable) lifecycle::stop);
        verify(this.eventPublisher).publishEvent(ArgumentMatchers.any(GrpcServerShutdownEvent.class));
        verify(this.eventPublisher).publishEvent(ArgumentMatchers.any(GrpcServerTerminatedEvent.class));

        assertTrue(server.isShutdown());
        assertTrue(server.isTerminated());
    }