forked from quarkus-qe/quarkus-test-suite
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactoring of QUARKUS-2748: adding http test and improving error mes…
…sages
- Loading branch information
Showing
4 changed files
with
151 additions
and
77 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
113 changes: 113 additions & 0 deletions
113
...vanced-reactive/src/test/java/io/quarkus/ts/http/advanced/reactive/AbstractDevModeIT.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
package io.quarkus.ts.http.advanced.reactive; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertEquals; | ||
|
||
import java.io.IOException; | ||
import java.nio.file.Files; | ||
import java.util.List; | ||
import java.util.stream.Collectors; | ||
import java.util.stream.Stream; | ||
|
||
import org.jboss.logging.Logger; | ||
import org.junit.jupiter.api.AfterEach; | ||
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.Disabled; | ||
import org.junit.jupiter.api.Test; | ||
|
||
import com.gargoylesoftware.htmlunit.WebClient; | ||
import com.gargoylesoftware.htmlunit.html.DomElement; | ||
import com.gargoylesoftware.htmlunit.html.HtmlPage; | ||
|
||
import io.quarkus.test.bootstrap.RestService; | ||
import io.quarkus.test.services.URILike; | ||
import io.quarkus.test.utils.AwaitilityUtils; | ||
|
||
public abstract class AbstractDevModeIT { | ||
private static final Logger LOG = Logger.getLogger(AbstractDevModeIT.class); | ||
protected static final String PROPERTY = "qe.test.value"; | ||
protected WebClient webClient; | ||
|
||
@BeforeEach | ||
void setUp() { | ||
webClient = new WebClient(); | ||
|
||
webClient.getOptions().setRedirectEnabled(true); //required for the test case | ||
//The execution breaks without the option below | ||
webClient.getOptions().setWebSocketEnabled(false); | ||
|
||
//make sure, that the cache doesn't affect us | ||
webClient.getCookieManager().clearCookies(); | ||
webClient.getCookieManager().setCookiesEnabled(false); | ||
webClient.getCache().clear(); | ||
webClient.getCache().setMaxSize(0); | ||
|
||
//disable everything, that we don't need | ||
webClient.getOptions().setDownloadImages(false); | ||
webClient.getOptions().setGeolocationEnabled(false); | ||
webClient.getOptions().setAppletEnabled(false); | ||
webClient.getOptions().setCssEnabled(false); | ||
} | ||
|
||
@Test | ||
@Disabled("https://github.com/quarkusio/quarkus/issues/30511") | ||
public void uiChange() throws IOException { | ||
RestService app = getApp(); | ||
URILike uri = getUri(); | ||
|
||
HtmlPage before = webClient.getPage(uri.withPath("/q/dev/io.quarkus.quarkus-vertx-http/config").toString()); | ||
QuarkusUIField field = new QuarkusUIField(before.getElementById(PROPERTY)); | ||
assertEquals("42", field.getValue(), "Wrong initial value shown in UI!"); | ||
assertEquals("42", app.getProperty(PROPERTY, ""), "Properties contain wrong initial value!"); | ||
|
||
field.setValue("23"); | ||
HtmlPage saved = field.getSaveButton().click(); | ||
QuarkusUIField updated = new QuarkusUIField(saved.getElementById(PROPERTY)); | ||
assertEquals("23", updated.getValue(), "The value was not updated in UI"); | ||
|
||
AwaitilityUtils.untilIsTrue(() -> app.getLogs().stream().anyMatch(log -> log.contains("File change detected"))); | ||
try (Stream<String> lines = Files | ||
.lines(app.getServiceFolder().resolve("src/main/resources/application.properties"))) { | ||
List<String> properties = lines | ||
.filter(line -> line.contains(PROPERTY)) | ||
.collect(Collectors.toList()); | ||
if (properties.size() != 1) { | ||
LOG.warn("There should be only one property with name " + PROPERTY + ", but found these " + properties); | ||
} | ||
} | ||
assertEquals("23", app.getProperty(PROPERTY, ""), "Wrong value was read from application properties"); | ||
} | ||
|
||
protected abstract URILike getUri(); | ||
|
||
protected abstract RestService getApp(); | ||
|
||
@AfterEach | ||
void tearDown() { | ||
webClient.close(); | ||
} | ||
|
||
protected class QuarkusUIField { | ||
private final DomElement element; | ||
|
||
public QuarkusUIField(DomElement element) { | ||
this.element = element; | ||
} | ||
|
||
public String getValue() { | ||
return element.getAttribute("value"); | ||
} | ||
|
||
public void setValue(String newValue) { | ||
element.setAttribute("value", newValue); | ||
} | ||
|
||
public DomElement getSaveButton() { | ||
for (DomElement sibling : element.getParentNode().getDomElementDescendants()) { | ||
if (sibling.getAttribute("class").equals("input-group-text formInputButton")) { | ||
return sibling; | ||
} | ||
} | ||
throw new IllegalStateException("Save button was not found!"); | ||
} | ||
} | ||
} |
28 changes: 28 additions & 0 deletions
28
...p-advanced-reactive/src/test/java/io/quarkus/ts/http/advanced/reactive/DevModeHttpIT.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package io.quarkus.ts.http.advanced.reactive; | ||
|
||
import io.quarkus.test.bootstrap.DevModeQuarkusService; | ||
import io.quarkus.test.bootstrap.Protocol; | ||
import io.quarkus.test.bootstrap.RestService; | ||
import io.quarkus.test.scenarios.QuarkusScenario; | ||
import io.quarkus.test.services.DevModeQuarkusApplication; | ||
import io.quarkus.test.services.URILike; | ||
|
||
@QuarkusScenario | ||
public class DevModeHttpIT extends AbstractDevModeIT { | ||
|
||
@DevModeQuarkusApplication(ssl = false) | ||
static RestService app = new DevModeQuarkusService() | ||
.withProperty("quarkus.oidc.enabled", "false") | ||
.withProperty("quarkus.keycloak.policy-enforcer.enable", "false") | ||
.withProperty("quarkus.keycloak.devservices.enabled", "false"); | ||
|
||
@Override | ||
protected URILike getUri() { | ||
return app.getURI(Protocol.HTTP); | ||
} | ||
|
||
@Override | ||
protected RestService getApp() { | ||
return app; | ||
} | ||
} |
85 changes: 9 additions & 76 deletions
85
...-advanced-reactive/src/test/java/io/quarkus/ts/http/advanced/reactive/DevModeHttpsIT.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,104 +1,37 @@ | ||
package io.quarkus.ts.http.advanced.reactive; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertEquals; | ||
|
||
import java.io.IOException; | ||
|
||
import org.junit.jupiter.api.AfterEach; | ||
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.Test; | ||
|
||
import com.gargoylesoftware.htmlunit.WebClient; | ||
import com.gargoylesoftware.htmlunit.html.DomElement; | ||
import com.gargoylesoftware.htmlunit.html.HtmlPage; | ||
|
||
import io.quarkus.test.bootstrap.DevModeQuarkusService; | ||
import io.quarkus.test.bootstrap.Protocol; | ||
import io.quarkus.test.bootstrap.RestService; | ||
import io.quarkus.test.scenarios.QuarkusScenario; | ||
import io.quarkus.test.services.DevModeQuarkusApplication; | ||
import io.quarkus.test.services.URILike; | ||
import io.quarkus.test.utils.AwaitilityUtils; | ||
|
||
@QuarkusScenario | ||
public class DevModeHttpsIT { | ||
private static final String PROPERTY = "quarkus.qe.test.value"; | ||
public class DevModeHttpsIT extends AbstractDevModeIT { | ||
|
||
@DevModeQuarkusApplication(ssl = true) | ||
static RestService app = new DevModeQuarkusService() | ||
.withProperty("quarkus.oidc.enabled", "false") | ||
.withProperty("quarkus.keycloak.policy-enforcer.enable", "false") | ||
.withProperty("quarkus.keycloak.devservices.enabled", "false"); | ||
|
||
private WebClient webClient; | ||
|
||
@BeforeEach | ||
void setUp() { | ||
webClient = new WebClient(); | ||
|
||
webClient.getOptions().setRedirectEnabled(true); //required for the test case | ||
//The execution breaks without the two options below | ||
super.setUp(); | ||
//The execution breaks without the option below | ||
webClient.getOptions().setUseInsecureSSL(true); | ||
webClient.getOptions().setWebSocketEnabled(false); | ||
|
||
//make sure, that the cache doesn't affect us | ||
webClient.getCookieManager().clearCookies(); | ||
webClient.getCookieManager().setCookiesEnabled(false); | ||
webClient.getCache().clear(); | ||
webClient.getCache().setMaxSize(0); | ||
|
||
//disable everything, that we don't need | ||
webClient.getOptions().setDownloadImages(false); | ||
webClient.getOptions().setGeolocationEnabled(false); | ||
webClient.getOptions().setAppletEnabled(false); | ||
webClient.getOptions().setCssEnabled(false); | ||
} | ||
|
||
@AfterEach | ||
void tearDown() { | ||
webClient.close(); | ||
} | ||
|
||
@Test | ||
public void uiChange() throws IOException { | ||
URILike uri = app.getURI(Protocol.HTTPS); | ||
|
||
HtmlPage before = webClient.getPage(uri.withPath("/q/dev/io.quarkus.quarkus-vertx-http/config").toString()); | ||
QuarkusUIField field = new QuarkusUIField(before.getElementById(PROPERTY)); | ||
assertEquals("42", field.getValue()); | ||
assertEquals("42", app.getProperty(PROPERTY, "")); | ||
|
||
field.setValue("23"); | ||
HtmlPage saved = field.getSaveButton().click(); | ||
QuarkusUIField updated = new QuarkusUIField(saved.getElementById(PROPERTY)); | ||
assertEquals("23", updated.getValue()); | ||
|
||
AwaitilityUtils.untilIsTrue(() -> app.getLogs().stream().anyMatch(log -> log.contains("File change detected"))); | ||
assertEquals("23", app.getProperty(PROPERTY, "")); | ||
} | ||
} | ||
|
||
class QuarkusUIField { | ||
private final DomElement element; | ||
|
||
QuarkusUIField(DomElement element) { | ||
this.element = element; | ||
} | ||
|
||
public String getValue() { | ||
return element.getAttribute("value"); | ||
} | ||
|
||
public void setValue(String newValue) { | ||
element.setAttribute("value", newValue); | ||
@Override | ||
protected URILike getUri() { | ||
return app.getURI(Protocol.HTTPS); | ||
} | ||
|
||
public DomElement getSaveButton() { | ||
for (DomElement sibling : element.getParentNode().getDomElementDescendants()) { | ||
if (sibling.getAttribute("class").equals("input-group-text formInputButton")) { | ||
return sibling; | ||
} | ||
} | ||
throw new IllegalStateException("Save button was not found!"); | ||
@Override | ||
protected RestService getApp() { | ||
return app; | ||
} | ||
} |