diff --git a/extensions/quarkus/pom.xml b/extensions/quarkus/pom.xml
index 0144304..fdb82bd 100644
--- a/extensions/quarkus/pom.xml
+++ b/extensions/quarkus/pom.xml
@@ -43,7 +43,7 @@
     </modules>
 
     <properties>
-        <quarkus.version>1.5.1.Final</quarkus.version>
+        <quarkus.version>1.5.2.Final</quarkus.version>
     </properties>
 
     <build>
diff --git a/extensions/quarkus/runtime/pom.xml b/extensions/quarkus/runtime/pom.xml
index 1b922c6..2883382 100644
--- a/extensions/quarkus/runtime/pom.xml
+++ b/extensions/quarkus/runtime/pom.xml
@@ -127,7 +127,8 @@
         <dependency>
             <groupId>org.graalvm.nativeimage</groupId>
             <artifactId>svm</artifactId>
-            <version>20.0.0</version>
+            <version>20.1.0</version>
+            <scope>provided</scope>
         </dependency>
     </dependencies>
 
diff --git a/extensions/quarkus/showcase/pom.xml b/extensions/quarkus/showcase/pom.xml
index 6c8dc96..d3c3a61 100644
--- a/extensions/quarkus/showcase/pom.xml
+++ b/extensions/quarkus/showcase/pom.xml
@@ -25,7 +25,7 @@
     <name>Apache MyFaces Core 2.3-next - Extensions - Quarkus - Showcase</name>
 
     <properties>
-        <quarkus.version>1.5.1.Final</quarkus.version>
+        <quarkus.version>1.5.2.Final</quarkus.version>
         <myfaces.version>2.3-next-SNAPSHOT</myfaces.version>
         <failsafe.version>2.22.0</failsafe.version>
         <surefire.version>2.22.0</surefire.version>
@@ -86,7 +86,7 @@
         <dependency>
             <groupId>net.sourceforge.htmlunit</groupId>
             <artifactId>htmlunit</artifactId>
-            <version>2.35.0</version>
+            <version>2.41.0</version>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/extensions/quarkus/showcase/src/test/java/org/apache/myfaces/core/extensions/quarkus/showcase/QuarkusMyFacesShowcaseTest.java b/extensions/quarkus/showcase/src/test/java/org/apache/myfaces/core/extensions/quarkus/showcase/QuarkusMyFacesShowcaseTest.java
index 0f595bc..c9ac66e 100644
--- a/extensions/quarkus/showcase/src/test/java/org/apache/myfaces/core/extensions/quarkus/showcase/QuarkusMyFacesShowcaseTest.java
+++ b/extensions/quarkus/showcase/src/test/java/org/apache/myfaces/core/extensions/quarkus/showcase/QuarkusMyFacesShowcaseTest.java
@@ -21,12 +21,18 @@
 import com.gargoylesoftware.htmlunit.BrowserVersion;
 import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
 import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.DomElement;
 import com.gargoylesoftware.htmlunit.html.HtmlDivision;
 import com.gargoylesoftware.htmlunit.html.HtmlPage;
+import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
 import io.quarkus.test.common.http.TestHTTPResource;
 import io.quarkus.test.junit.QuarkusTest;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
+import java.io.IOException;
 import java.net.URL;
 
 import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
@@ -37,25 +43,48 @@
     @TestHTTPResource
     URL url;
 
-    @Test
-    public void shouldOpenIndexPage() throws Exception {
-        try (final WebClient webClient = new WebClient(BrowserVersion.CHROME)) {
-            webClient.getOptions().setJavaScriptEnabled(true);
-            webClient.getOptions().setCssEnabled(false);
-            webClient.getOptions().setUseInsecureSSL(true);
-            webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
-            webClient.getCookieManager().setCookiesEnabled(true);
-            webClient.setAjaxController(new NicelyResynchronizingAjaxController());
-            webClient.getCookieManager().setCookiesEnabled(true);
+    private static WebClient webClient;
 
-            final HtmlPage page = webClient.getPage(url + "/index.xhtml");
+    @BeforeAll
+    public static void initWebClient() {
+        webClient = new WebClient(BrowserVersion.CHROME);
+        webClient.getOptions().setJavaScriptEnabled(true);
+        webClient.getOptions().setCssEnabled(false);
+        webClient.getOptions().setUseInsecureSSL(true);
+        webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
+        webClient.getCookieManager().setCookiesEnabled(true);
+        webClient.setAjaxController(new NicelyResynchronizingAjaxController());
+    }
 
-            final HtmlDivision datatable = (HtmlDivision) page.getElementById("form:carTable");
-
-            assertThat(datatable).isNotNull();
-            assertThat(datatable.getByXPath("//tr[contains(@role,'row') and contains(@class,'ui-datatable-selectable')]"))
-                    .hasSize(10);
-
+    @AfterAll
+    public static void closeWebClient() {
+        if (webClient != null) {
+            webClient.close();
         }
     }
+
+
+    @Test
+    public void shouldOpenIndexPage() throws Exception {
+        final HtmlPage page = webClient.getPage(url + "/index.xhtml");
+        final HtmlDivision datatable = (HtmlDivision) page.getElementById("form:carTable");
+        assertThat(datatable).isNotNull();
+        assertThat(datatable.getByXPath("//tr[contains(@role,'row') and contains(@class,'ui-datatable-selectable')]"))
+                .hasSize(10);
+    }
+
+    @Test
+    @Disabled("Check HtmlUnit websocket support, for now this test is not working")
+    public void shouldCallWebSocket() throws IOException {
+        HtmlPage page = webClient.getPage(url + "/socket.xhtml");
+        final HtmlSubmitInput sendMessageBtn = (HtmlSubmitInput) page.getElementById("form:sendMessage");
+        page = sendMessageBtn.click();
+        webClient.waitForBackgroundJavaScript(5000);
+        DomElement message = page.getElementById("message");
+        assertThat(message.asXml())
+                .contains("hello at");
+
+    }
+
+
 }
