- {#if flash['message']}
-
- {flash['message']['text']}
+ {#if flash.message??}
+
+ {flash.message.text}
@@ -82,7 +82,7 @@
- {#include logmanagerNav}{/include}
+ {#include logmanagerNav /}
- {#include logmanagerModals}{/include}
- {#include testsModals}{/include}
+ {#include logmanagerModals /}
+ {#include testsModals /}
diff --git a/extensions/vertx-http/deployment/src/main/resources/dev-templates/tags/actionableExtension.html b/extensions/vertx-http/deployment/src/main/resources/dev-templates/tags/actionableExtension.html
index 82f2240cc5fde..901e71e148324 100644
--- a/extensions/vertx-http/deployment/src/main/resources/dev-templates/tags/actionableExtension.html
+++ b/extensions/vertx-http/deployment/src/main/resources/dev-templates/tags/actionableExtension.html
@@ -3,24 +3,24 @@
- {#if it['metadata'] && it['metadata']['status'] == 'experimental'}
+ {#if it.metadata.status?? == 'experimental'}
EXPERIMENTAL
{/if}
- {it['description']}
+ {it.description}
- {#if it['_dev']}
- {it['_dev'].raw}
+ {#if it._dev??}
+ {it._dev.raw}
{/if}
diff --git a/extensions/vertx-http/deployment/src/main/resources/dev-templates/tags/nonActionableExtension.html b/extensions/vertx-http/deployment/src/main/resources/dev-templates/tags/nonActionableExtension.html
index b6f90b92513a5..a583ca0fdfb49 100644
--- a/extensions/vertx-http/deployment/src/main/resources/dev-templates/tags/nonActionableExtension.html
+++ b/extensions/vertx-http/deployment/src/main/resources/dev-templates/tags/nonActionableExtension.html
@@ -1,27 +1,27 @@
-{#if it['metadata'] && it['metadata']['unlisted'] != true}
+{#if it.metadata?? && !it.metadata.unlisted??}
- {#if it['metadata'] && it['metadata']['status'] == 'experimental'}
+ {#if it.metadata.status?? == 'experimental'}
EXPERIMENTAL
{/if}
- {it['description']}
+ {it.description}
- {#if it['_dev']}
- {it['_dev'].raw}
+ {#if it._dev??}
+ {it._dev.raw}
{/if}
diff --git a/integration-tests/devmode/pom.xml b/integration-tests/devmode/pom.xml
index 924511e1e5393..1e6992a7f87f2 100644
--- a/integration-tests/devmode/pom.xml
+++ b/integration-tests/devmode/pom.xml
@@ -13,11 +13,40 @@
Quarkus - Integration Tests - Dev Mode
-
io.quarkus
- quarkus-resteasy-deployment
+ quarkus-resteasy-reactive-deployment
+ test
+
+
+ io.quarkus
+ quarkus-scheduler-deployment
+ test
+
+
+ io.quarkus
+ quarkus-grpc-deployment
+ test
+
+
+ io.quarkus
+ quarkus-qute-deployment
+ test
+
+
+ io.quarkus
+ quarkus-smallrye-reactive-messaging-deployment
+ test
+
+
+ io.quarkus
+ quarkus-cache-deployment
+ test
+
+
+ io.quarkus
+ quarkus-container-image-docker-deployment
test
@@ -33,7 +62,41 @@
+
+
+ kr.motd.maven
+ os-maven-plugin
+
+
+
+ org.xolstice.maven.plugins
+ protobuf-maven-plugin
+ 0.6.1
+
+ com.google.protobuf:protoc:${protoc.version}:exe:${os.detected.classifier}
+ grpc-java
+ io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}
+
+
+ quarkus-grpc-protoc-plugin
+ io.quarkus
+ quarkus-grpc-protoc-plugin
+ ${project.version}
+ io.quarkus.grpc.protoc.plugin.MutinyGrpcGenerator
+
+
+
+
+
+ test-compile
+
+ test-compile
+ test-compile-custom
+
+
+
+
maven-compiler-plugin
diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleArcSmokeTest.java b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleArcSmokeTest.java
new file mode 100644
index 0000000000000..e6200af03b290
--- /dev/null
+++ b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleArcSmokeTest.java
@@ -0,0 +1,60 @@
+package io.quarkus.test.devconsole;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.event.Observes;
+import javax.inject.Named;
+
+import org.hamcrest.Matchers;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.quarkus.test.QuarkusDevModeTest;
+import io.restassured.RestAssured;
+
+/**
+ * Note that this test cannot be placed under the relevant {@code -deployment} module because then the DEV UI processor would
+ * not be able to locate the template resources correctly.
+ */
+public class DevConsoleArcSmokeTest {
+
+ @RegisterExtension
+ static final QuarkusDevModeTest test = new QuarkusDevModeTest()
+ .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
+ .addClasses(Foo.class));
+
+ @Test
+ public void testPages() {
+ RestAssured
+ .get("q/dev/io.quarkus.quarkus-arc/beans")
+ .then()
+ .statusCode(200).body(Matchers.containsString("io.quarkus.test.devconsole.DevConsoleArcSmokeTest$Foo"));
+ RestAssured
+ .get("q/dev/io.quarkus.quarkus-arc/observers")
+ .then()
+ .statusCode(200)
+ .body(Matchers.containsString("io.quarkus.test.devconsole.DevConsoleArcSmokeTest$Foo#onStr"));
+ RestAssured
+ .get("q/dev/io.quarkus.quarkus-arc/events")
+ .then()
+ .statusCode(200).body(Matchers.containsString("io.quarkus.runtime.StartupEvent"));
+ RestAssured
+ .get("q/dev/io.quarkus.quarkus-arc/invocations")
+ .then()
+ .statusCode(200);
+ RestAssured
+ .get("q/dev/io.quarkus.quarkus-arc/removed-beans")
+ .then()
+ .statusCode(200).body(Matchers.containsString("org.jboss.logging.Logger"));
+ }
+
+ @Named
+ @ApplicationScoped
+ public static class Foo {
+
+ void onStr(@Observes String event) {
+ }
+
+ }
+}
diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleCacheSmokeTest.java b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleCacheSmokeTest.java
new file mode 100644
index 0000000000000..fba09a816b8a2
--- /dev/null
+++ b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleCacheSmokeTest.java
@@ -0,0 +1,42 @@
+package io.quarkus.test.devconsole;
+
+import javax.inject.Singleton;
+
+import org.hamcrest.Matchers;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.quarkus.cache.CacheResult;
+import io.quarkus.test.QuarkusDevModeTest;
+import io.restassured.RestAssured;
+
+/**
+ * Note that this test cannot be placed under the relevant {@code -deployment} module because then the DEV UI processor would
+ * not be able to locate the template resources correctly.
+ */
+public class DevConsoleCacheSmokeTest {
+
+ @RegisterExtension
+ static final QuarkusDevModeTest config = new QuarkusDevModeTest()
+ .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class).addClass(MyBean.class));
+
+ @Test
+ public void testCaches() {
+ RestAssured.get("q/dev/io.quarkus.quarkus-cache/caches")
+ .then()
+ .statusCode(200).body(Matchers.containsString("myCache"));
+ }
+
+ @Singleton
+ public static class MyBean {
+
+ @CacheResult(cacheName = "myCache")
+ String ping() {
+ return "foo";
+ }
+
+ }
+
+}
diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleConfigSmokeTest.java b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleConfigSmokeTest.java
new file mode 100644
index 0000000000000..a76ba7a3f4abf
--- /dev/null
+++ b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleConfigSmokeTest.java
@@ -0,0 +1,29 @@
+package io.quarkus.test.devconsole;
+
+import org.hamcrest.Matchers;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.quarkus.test.QuarkusDevModeTest;
+import io.restassured.RestAssured;
+
+/**
+ * Note that this test cannot be placed under the relevant {@code -deployment} module because then the DEV UI processor would
+ * not be able to locate the template resources correctly.
+ */
+public class DevConsoleConfigSmokeTest {
+
+ @RegisterExtension
+ static final QuarkusDevModeTest config = new QuarkusDevModeTest()
+ .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class));
+
+ @Test
+ public void testConfigEditor() {
+ RestAssured.get("q/dev/io.quarkus.quarkus-vertx-http/config")
+ .then()
+ .statusCode(200).body(Matchers.containsString("Config Editor"));
+
+ }
+}
diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleContainerImageSmokeTest.java b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleContainerImageSmokeTest.java
new file mode 100644
index 0000000000000..b00f2a86c5fe5
--- /dev/null
+++ b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleContainerImageSmokeTest.java
@@ -0,0 +1,29 @@
+package io.quarkus.test.devconsole;
+
+import org.hamcrest.Matchers;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.quarkus.test.QuarkusDevModeTest;
+import io.restassured.RestAssured;
+
+/**
+ * Note that this test cannot be placed under the relevant {@code -deployment} module because then the DEV UI processor would
+ * not be able to locate the template resources correctly.
+ */
+public class DevConsoleContainerImageSmokeTest {
+
+ @RegisterExtension
+ static final QuarkusDevModeTest config = new QuarkusDevModeTest()
+ .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class));
+
+ @Test
+ public void testCaches() {
+ RestAssured.get("q/dev/io.quarkus.quarkus-container-image/build")
+ .then()
+ .statusCode(200).body(Matchers.containsString("Build Type"));
+ }
+
+}
diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleGrpcSmokeTest.java b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleGrpcSmokeTest.java
new file mode 100644
index 0000000000000..5ef32caa2036e
--- /dev/null
+++ b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleGrpcSmokeTest.java
@@ -0,0 +1,46 @@
+package io.quarkus.test.devconsole;
+
+import org.hamcrest.Matchers;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.grpc.examples.helloworld.Greeter;
+import io.grpc.examples.helloworld.HelloReply;
+import io.grpc.examples.helloworld.HelloRequest;
+import io.quarkus.grpc.GrpcService;
+import io.quarkus.test.QuarkusDevModeTest;
+import io.restassured.RestAssured;
+import io.smallrye.mutiny.Uni;
+
+/**
+ * Note that this test cannot be placed under the relevant {@code -deployment} module because then the DEV UI processor would
+ * not be able to locate the template resources correctly.
+ */
+public class DevConsoleGrpcSmokeTest {
+
+ @RegisterExtension
+ static final QuarkusDevModeTest config = new QuarkusDevModeTest()
+ .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class).addPackage(Greeter.class.getPackage())
+ .addClass(TestGreeter.class))
+ .setCodeGenSources("proto");
+
+ @Test
+ public void testServices() {
+ RestAssured.get("q/dev/io.quarkus.quarkus-grpc/services")
+ .then()
+ .statusCode(200).body(Matchers.containsString("helloworld.Greeter"));
+ }
+
+ @GrpcService
+ public static class TestGreeter implements Greeter {
+
+ @Override
+ public Uni sayHello(HelloRequest request) {
+ return Uni.createFrom().item(HelloReply.newBuilder().setMessage("Hola!").build());
+ }
+
+ }
+
+}
diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleQuteSmokeTest.java b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleQuteSmokeTest.java
new file mode 100644
index 0000000000000..4ba3409a830f0
--- /dev/null
+++ b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleQuteSmokeTest.java
@@ -0,0 +1,32 @@
+package io.quarkus.test.devconsole;
+
+import org.hamcrest.Matchers;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.quarkus.test.QuarkusDevModeTest;
+import io.restassured.RestAssured;
+
+/**
+ * Note that this test cannot be placed under the relevant {@code -deployment} module because then the DEV UI processor would
+ * not be able to locate the template resources correctly.
+ */
+public class DevConsoleQuteSmokeTest {
+
+ @RegisterExtension
+ static final QuarkusDevModeTest config = new QuarkusDevModeTest()
+ .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class).addAsResource(new StringAsset(
+ "{hello}"),
+ "templates/hello.txt"));
+
+ @Test
+ public void testTemplates() {
+ RestAssured.get("q/dev/io.quarkus.quarkus-qute/templates")
+ .then()
+ .statusCode(200).body(Matchers.containsString("hello.txt"));
+ }
+
+}
diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleReactiveMessagingSmokeTest.java b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleReactiveMessagingSmokeTest.java
new file mode 100644
index 0000000000000..2eaa736753d34
--- /dev/null
+++ b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleReactiveMessagingSmokeTest.java
@@ -0,0 +1,35 @@
+package io.quarkus.test.devconsole;
+
+import org.hamcrest.Matchers;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.quarkus.test.QuarkusDevModeTest;
+import io.restassured.RestAssured;
+
+/**
+ * Note that this test cannot be placed under the relevant {@code -deployment} module because then the DEV UI processor would
+ * not be able to locate the template resources correctly.
+ */
+public class DevConsoleReactiveMessagingSmokeTest {
+
+ @RegisterExtension
+ static final QuarkusDevModeTest config = new QuarkusDevModeTest()
+ .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class).addClasses(MyProcessor.class, DummyConnector.class)
+ .addAsResource(
+ new StringAsset(
+ "mp.messaging.incoming.input.connector=dummy\n"
+ + "mp.messaging.incoming.input.values=hallo"),
+ "application.properties"));
+
+ @Test
+ public void testProcessor() {
+ RestAssured.get("q/dev/io.quarkus.quarkus-smallrye-reactive-messaging/channels")
+ .then()
+ .statusCode(200).body(Matchers.containsString("io.quarkus.test.devconsole.MyProcessor#process"));
+ }
+
+}
diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleResteastyReactiveSmokeTest.java b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleResteastyReactiveSmokeTest.java
new file mode 100644
index 0000000000000..9ad1ed8c23c26
--- /dev/null
+++ b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleResteastyReactiveSmokeTest.java
@@ -0,0 +1,32 @@
+package io.quarkus.test.devconsole;
+
+import org.hamcrest.Matchers;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.quarkus.test.QuarkusDevModeTest;
+import io.restassured.RestAssured;
+
+/**
+ * Note that this test cannot be placed under the relevant {@code -deployment} module because then the DEV UI processor would
+ * not be able to locate the template resources correctly.
+ */
+public class DevConsoleResteastyReactiveSmokeTest {
+
+ @RegisterExtension
+ static final QuarkusDevModeTest config = new QuarkusDevModeTest()
+ .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class).addClass(MyResource.class));
+
+ @Test
+ public void testTemplates() {
+ RestAssured.get("q/dev/io.quarkus.quarkus-resteasy-reactive/endpoints")
+ .then()
+ .statusCode(200).body(Matchers.containsString("GET /me/message"));
+ RestAssured.get("q/dev/io.quarkus.quarkus-resteasy-reactive/scores")
+ .then()
+ .statusCode(200).body(Matchers.containsString("GET /me/message"));
+ }
+
+}
diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleSchedulerSmokeTest.java b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleSchedulerSmokeTest.java
new file mode 100644
index 0000000000000..fdfae4c6dd863
--- /dev/null
+++ b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleSchedulerSmokeTest.java
@@ -0,0 +1,43 @@
+package io.quarkus.test.devconsole;
+
+import java.util.concurrent.TimeUnit;
+
+import org.hamcrest.Matchers;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.quarkus.scheduler.Scheduled;
+import io.quarkus.test.QuarkusDevModeTest;
+import io.restassured.RestAssured;
+
+/**
+ * Note that this test cannot be placed under the relevant {@code -deployment} module because then the DEV UI processor would
+ * not be able to locate the template resources correctly.
+ */
+public class DevConsoleSchedulerSmokeTest {
+
+ @RegisterExtension
+ static final QuarkusDevModeTest config = new QuarkusDevModeTest()
+ .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class).addClass(Jobs.class));
+
+ @Test
+ public void testScheduler() {
+ RestAssured.get("q/dev")
+ .then()
+ .statusCode(200).body(Matchers.containsString("Schedules"));
+ RestAssured.get("q/dev/io.quarkus.quarkus-scheduler/schedules")
+ .then()
+ .statusCode(200).body(Matchers.containsString("Scheduler is running"));
+ }
+
+ public static class Jobs {
+
+ @Scheduled(every = "2h", delay = 2, delayUnit = TimeUnit.HOURS)
+ public void run() {
+ }
+
+ }
+
+}
diff --git a/extensions/vertx-http/deployment/src/test/java/io/quarkus/vertx/http/devconsole/DevConsoleSmokeIT.java b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleSmokeTest.java
similarity index 73%
rename from extensions/vertx-http/deployment/src/test/java/io/quarkus/vertx/http/devconsole/DevConsoleSmokeIT.java
rename to integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleSmokeTest.java
index 20830f3e88d0e..6dcdcc2a4d2cf 100644
--- a/extensions/vertx-http/deployment/src/test/java/io/quarkus/vertx/http/devconsole/DevConsoleSmokeIT.java
+++ b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DevConsoleSmokeTest.java
@@ -1,4 +1,4 @@
-package io.quarkus.vertx.http.devconsole;
+package io.quarkus.test.devconsole;
import org.hamcrest.Matchers;
import org.jboss.shrinkwrap.api.ShrinkWrap;
@@ -10,9 +10,10 @@
import io.restassured.RestAssured;
/**
- * This needs to be an integration test so the pom.properties has already been created
+ * Note that this test cannot be placed under the relevant {@code -deployment} module because then the DEV UI processor would
+ * not be able to locate the template resources correctly.
*/
-public class DevConsoleSmokeIT {
+public class DevConsoleSmokeTest {
@RegisterExtension
static final QuarkusDevModeTest config = new QuarkusDevModeTest()
diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DummyConnector.java b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DummyConnector.java
new file mode 100644
index 0000000000000..000b708afaccc
--- /dev/null
+++ b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/DummyConnector.java
@@ -0,0 +1,22 @@
+package io.quarkus.test.devconsole;
+
+import javax.enterprise.context.ApplicationScoped;
+
+import org.eclipse.microprofile.config.Config;
+import org.eclipse.microprofile.reactive.messaging.Message;
+import org.eclipse.microprofile.reactive.messaging.spi.Connector;
+import org.eclipse.microprofile.reactive.messaging.spi.IncomingConnectorFactory;
+import org.eclipse.microprofile.reactive.streams.operators.PublisherBuilder;
+import org.eclipse.microprofile.reactive.streams.operators.ReactiveStreams;
+
+@ApplicationScoped
+@Connector("dummy")
+public class DummyConnector implements IncomingConnectorFactory {
+
+ @Override
+ public PublisherBuilder extends Message>> getPublisherBuilder(Config config) {
+ String values = config.getValue("values", String.class);
+ return ReactiveStreams.of(values, values.toUpperCase())
+ .map(Message::of);
+ }
+}
diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/MyProcessor.java b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/MyProcessor.java
new file mode 100644
index 0000000000000..e6da780f8ef52
--- /dev/null
+++ b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/MyProcessor.java
@@ -0,0 +1,60 @@
+package io.quarkus.test.devconsole;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+
+import org.eclipse.microprofile.reactive.messaging.Channel;
+import org.eclipse.microprofile.reactive.messaging.Incoming;
+import org.eclipse.microprofile.reactive.messaging.Outgoing;
+import org.reactivestreams.Publisher;
+import org.reactivestreams.Subscriber;
+import org.reactivestreams.Subscription;
+
+import io.smallrye.reactive.messaging.annotations.Broadcast;
+import io.vertx.core.http.HttpServerResponse;
+import io.vertx.ext.web.Router;
+
+@ApplicationScoped
+public class MyProcessor {
+
+ @Inject
+ @Channel("processed")
+ Instance> channel;
+
+ public void init(@Observes Router router) {
+ router.get().handler(rc -> {
+ HttpServerResponse response = rc.response();
+ channel.get().subscribe(new Subscriber() {
+ @Override
+ public void onSubscribe(Subscription subscription) {
+ response.putHeader("Transfer-encoding", "chunked");
+ subscription.request(2);
+ }
+
+ @Override
+ public void onNext(String s) {
+ response.write(s);
+ }
+
+ @Override
+ public void onError(Throwable throwable) {
+ // ignore it.
+ }
+
+ @Override
+ public void onComplete() {
+ response.end();
+ }
+ });
+ });
+ }
+
+ @Incoming("input")
+ @Outgoing("processed")
+ @Broadcast
+ public String process(String input) {
+ return input.toUpperCase();
+ }
+}
diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/MyResource.java b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/MyResource.java
new file mode 100644
index 0000000000000..d372752abd26b
--- /dev/null
+++ b/integration-tests/devmode/src/test/java/io/quarkus/test/devconsole/MyResource.java
@@ -0,0 +1,17 @@
+package io.quarkus.test.devconsole;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+@Path("/me")
+public class MyResource {
+
+ @Path("message")
+ @GET
+ @Produces(MediaType.TEXT_PLAIN)
+ public String getMessage() {
+ return "hello";
+ }
+}
diff --git a/integration-tests/devmode/src/test/proto/helloworld.proto b/integration-tests/devmode/src/test/proto/helloworld.proto
new file mode 100644
index 0000000000000..fe9dd59955f1b
--- /dev/null
+++ b/integration-tests/devmode/src/test/proto/helloworld.proto
@@ -0,0 +1,24 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+option java_package = "io.grpc.examples.helloworld";
+option java_outer_classname = "HelloWorldProto";
+option objc_class_prefix = "HLW";
+
+package helloworld;
+
+// The greeting service definition.
+service Greeter {
+ // Sends a greeting
+ rpc SayHello (HelloRequest) returns (HelloReply) {}
+}
+
+// The request message containing the user's name.
+message HelloRequest {
+ string name = 1;
+}
+
+// The response message containing the greetings
+message HelloReply {
+ string message = 1;
+}
\ No newline at end of file