From 2ff99d29bc8873afa9c7cd9da57a7a7cf2072ea5 Mon Sep 17 00:00:00 2001 From: Georg Pfuetzenreuter Date: Fri, 13 May 2022 20:09:42 +0200 Subject: Init unit tests Signed-off-by: Georg Pfuetzenreuter --- pom.xml | 15 +++- .../libertacasa/pubsh/web/WebApplicationTest.java | 81 ++++++++++++++++++++++ .../libertacasa/pubsh/web/WebApplicationTests.java | 13 ---- src/test/resources/application.properties | 11 +++ src/test/resources/schema.sql | 14 ++++ 5 files changed, 120 insertions(+), 14 deletions(-) create mode 100644 src/test/java/net/libertacasa/pubsh/web/WebApplicationTest.java delete mode 100644 src/test/java/net/libertacasa/pubsh/web/WebApplicationTests.java create mode 100644 src/test/resources/application.properties create mode 100644 src/test/resources/schema.sql diff --git a/pom.xml b/pom.xml index 14f9b93..94abe9f 100644 --- a/pom.xml +++ b/pom.xml @@ -100,7 +100,13 @@ org.mariadb.jdbc mariadb-java-client - + + + + com.h2database + h2 + test + org.springframework.boot @@ -124,6 +130,13 @@ spring-boot-starter-logging + + com.c4-soft.springaddons + spring-addons-keycloak + 4.1.10 + test + + diff --git a/src/test/java/net/libertacasa/pubsh/web/WebApplicationTest.java b/src/test/java/net/libertacasa/pubsh/web/WebApplicationTest.java new file mode 100644 index 0000000..70a69b3 --- /dev/null +++ b/src/test/java/net/libertacasa/pubsh/web/WebApplicationTest.java @@ -0,0 +1,81 @@ +package net.libertacasa.pubsh.web; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.startsWith; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import com.c4_soft.springaddons.security.oauth2.test.annotations.Claims; +import com.c4_soft.springaddons.security.oauth2.test.annotations.OpenIdClaims; +import com.c4_soft.springaddons.security.oauth2.test.annotations.StringClaim; +import com.c4_soft.springaddons.security.oauth2.test.annotations.keycloak.WithMockKeycloakAuth; + +//@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@SpringBootTest +@AutoConfigureMockMvc +class WebApplicationTest { + + @Test + void contextLoads() { + } + + @Autowired + private MockMvc mvc; + + @Test + public void getRoot() throws Exception { + mvc.perform(MockMvcRequestBuilders.get("/")) + .andExpect(status().isFound()) + .andExpect(redirectedUrl("/portal")); + } + + @Test + public void getPortalNoAuth() throws Exception { + mvc.perform(MockMvcRequestBuilders.get("/portal")) + .andExpect(status().isFound()) + .andExpect(redirectedUrl("/sso/login")); + } + + @Test + public void getAdminNoAuth() throws Exception { + mvc.perform(MockMvcRequestBuilders.get("/admin")) + .andExpect(status().isFound()) + .andExpect(redirectedUrl("/sso/login")); + } + + @Test + @WithMockKeycloakAuth("TotallyLegitUserWithZeroAdministrativePermissions") + public void getAdminWrongAuth() throws Exception { + mvc.perform(MockMvcRequestBuilders.get("/admin")) + .andExpect(status().isForbidden()); + } + + @Test + @WithMockKeycloakAuth( + authorities = { "devel-user" }, + claims = @OpenIdClaims( + sub = "12345", + email = "regular-user@example.com", + emailVerified = true, + //nickName = "TotallyLegitUserWithSuperPowers", + //preferredUsername = "TotallyLegitUserWithSuperPowers", + otherClaims = @Claims(stringClaims = @StringClaim(name = "username", value = "regular-user")))) + public void getPortalWithAuth() throws Exception { + mvc.perform(MockMvcRequestBuilders.get("/portal")) + .andExpect(status().isOk()) + .andExpect(content().string(startsWith(""))) + .andExpect(content().string(containsString("Hello, regular-user."))) + .andExpect(content().string(containsString("Generate new throw-away shell:"))); + } + +} diff --git a/src/test/java/net/libertacasa/pubsh/web/WebApplicationTests.java b/src/test/java/net/libertacasa/pubsh/web/WebApplicationTests.java deleted file mode 100644 index ffb21f0..0000000 --- a/src/test/java/net/libertacasa/pubsh/web/WebApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package net.libertacasa.pubsh.web; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class WebApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties new file mode 100644 index 0000000..8161d6c --- /dev/null +++ b/src/test/resources/application.properties @@ -0,0 +1,11 @@ +spring.datasource.driver-class-name=org.h2.Driver +spring.datasource.jdbc-url=jdbc:h2:mem:pubshweb;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false +spring.jpa.show-sql=true +spring.jpa.generate-ddl=true +# This is a bogus endpoint, the results are mocked, but the Keycloak library does not know that: +keycloak.auth-server-url=http://127.0.0.9:98765/ +keycloak.realm=local-devel +keycloak.resource=portal-app +keycloak.public-client=true +### VERY BAD, TO-DO: mock Docker results: +lysergic.docker.endpoint=tcp://sweetsuse:2375 \ No newline at end of file diff --git a/src/test/resources/schema.sql b/src/test/resources/schema.sql new file mode 100644 index 0000000..a369f62 --- /dev/null +++ b/src/test/resources/schema.sql @@ -0,0 +1,14 @@ +CREATE TABLE scheduled_tasks ( + task_name varchar(40) not null, + task_instance varchar(100) not null, + task_data blob, + execution_time timestamp(6) not null, + picked BOOLEAN not null, + picked_by varchar(50), + last_success timestamp(6) null, + last_failure timestamp(6) null, + consecutive_failures INT, + last_heartbeat timestamp(6) null, + version BIGINT not null, + PRIMARY KEY (task_name, task_instance) +); \ No newline at end of file -- cgit v1.2.3