### Question:
PipelineVerticle extends ConfigurableVerticle<PipelineOptions> implements SignalEmitter, SignalReceiver { @Override public EventBus eventBus() { return eventBus; }  @Override ValidationResult validate(JsonObject config); @Override PipelineOptions readConfiguration(JsonObject config); @Override Completable configure(PipelineOptions config); @Override Completable shutdown(); @Override String controlChannel(); @Override Completable onSignal(Signal signal); @Override void emitSignal(Signal signal); @Override ExchangeOptions exchange(); @Override EventBus eventBus();  }### Answer:
@Test @DisplayName("Test timer shutdown signal triggers pipeline verticle signal.") void testTimerShutdown(Vertx vertx, VertxTestContext ctx) throws InterruptedException { DeploymentOptions options = getDeploymentOptions("timer-shutdown-test"); vertx.eventBus().<String>consumer("test-shutdown", message -> { assertThat(message.headers().get("action")).isEqualTo("undeploy"); assertThat(message.body()).isEqualTo("timer-shutdown-test"); ctx.completeNow(); }); vertx.deployVerticle(PIPELINE_VERTICLE, options, ctx.succeeding()); ctx.awaitCompletion(15, TimeUnit.SECONDS); }
@Test @DisplayName("Test counter shutdown signal triggers pipeline verticle signal.") void testCounterShutdown(Vertx vertx, VertxTestContext ctx) throws InterruptedException { DeploymentOptions options = getDeploymentOptions("counter-shutdown-test"); vertx.eventBus().<String>consumer("test-shutdown", message -> { assertThat(message.headers().get("action")).isEqualTo("undeploy"); assertThat(message.body()).isEqualTo("counter-shutdown-test"); ctx.completeNow(); }); vertx.deployVerticle(PIPELINE_VERTICLE, options, ctx.succeeding()); ctx.awaitCompletion(15, TimeUnit.SECONDS); }