From 4264fb5e3c79b2c6db02cf349ed11fba6776f88d Mon Sep 17 00:00:00 2001 From: Will Morrison Date: Thu, 24 Aug 2023 17:14:38 -0400 Subject: [PATCH] Migrate to junit 5 --- gateway-ha/pom.xml | 20 ++++- .../gateway/ha/security/LbLdapClientTest.java | 41 +++++---- .../gateway/ha/security/TestLbFilter.java | 84 +++++++++++-------- pom.xml | 38 ++++++++- .../gateway/proxyserver/TestProxyServer.java | 0 5 files changed, 125 insertions(+), 58 deletions(-) rename proxyserver/src/test/{ => java}/io/trino/gateway/proxyserver/TestProxyServer.java (100%) diff --git a/gateway-ha/pom.xml b/gateway-ha/pom.xml index 9048b9ce7..81f5603d6 100644 --- a/gateway-ha/pom.xml +++ b/gateway-ha/pom.xml @@ -148,28 +148,44 @@ 42.6.0 + + org.junit.jupiter + junit-jupiter-api + test + + org.testng testng test + com.github.tomakehurst wiremock 2.24.0 test + + + org.mockito + mockito-core + 5.4.0 + test + org.mockito - mockito-all - 1.10.19 + mockito-junit-jupiter + 5.5.0 test + com.h2database h2 1.4.192 + com.squareup.okhttp3 okhttp diff --git a/gateway-ha/src/test/java/io/trino/gateway/ha/security/LbLdapClientTest.java b/gateway-ha/src/test/java/io/trino/gateway/ha/security/LbLdapClientTest.java index 674d773c6..68682a2b6 100644 --- a/gateway-ha/src/test/java/io/trino/gateway/ha/security/LbLdapClientTest.java +++ b/gateway-ha/src/test/java/io/trino/gateway/ha/security/LbLdapClientTest.java @@ -1,5 +1,7 @@ package io.trino.gateway.ha.security; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.any; import static org.mockito.Mockito.eq; @@ -8,17 +10,19 @@ import org.apache.directory.api.ldap.model.message.SearchScope; import org.apache.directory.ldap.client.template.LdapConnectionTemplate; import org.apache.directory.ldap.client.template.exception.PasswordException; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.Spy; -import org.testng.Assert; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; +import org.mockito.junit.jupiter.MockitoExtension; @Slf4j -public class LbLdapClientTest extends junit.framework.TestCase { +@ExtendWith(MockitoExtension.class) +public class LbLdapClientTest { class DummyPasswordWarning implements org.apache.directory.ldap.client.template.PasswordWarning { @Override public int getTimeBeforeExpiration() { @@ -40,29 +44,30 @@ public boolean isChangeAfterReset() { LdapConnectionTemplate ldapConnectionTemplate; @Spy - LdapConfiguration ldapConfig; + LdapConfiguration ldapConfig = + LdapConfiguration.load("src/test/resources/auth/ldapTestConfig.yml"); @InjectMocks - LbLdapClient lbLdapClient; + LbLdapClient lbLdapClient = + new LbLdapClient(LdapConfiguration.load("src/test/resources/auth/ldapTestConfig.yml")); LbLdapClientTest() { } - @BeforeMethod + @BeforeEach public void initMocks() { log.info("initializing test"); - ldapConfig = LdapConfiguration.load("src/test/resources/auth/ldapTestConfig.yml"); org.mockito.MockitoAnnotations.initMocks(this); } - @AfterMethod + @AfterEach public void resetMocks() { log.info("resetting mocks"); Mockito.reset(ldapConnectionTemplate); Mockito.reset(ldapConfig); } - @Test(enabled = false) + @Test public void testAuthenticate() { String user = "user1"; String password = "pass1"; @@ -78,7 +83,7 @@ public void testAuthenticate() { .thenReturn(null); //Success case - Assert.assertTrue(lbLdapClient.authenticate(user, password)); + assertTrue(lbLdapClient.authenticate(user, password)); Mockito .when(ldapConnectionTemplate.authenticate(ldapConfig.getLdapUserBaseDn(), @@ -88,7 +93,7 @@ public void testAuthenticate() { .thenReturn(new LbLdapClientTest.DummyPasswordWarning()); //Warning case - Assert.assertTrue(lbLdapClient.authenticate(user, password)); + assertTrue(lbLdapClient.authenticate(user, password)); Mockito @@ -99,7 +104,7 @@ public void testAuthenticate() { .thenThrow(PasswordException.class); //failure case - Assert.assertFalse(lbLdapClient.authenticate(user, password)); + assertFalse(lbLdapClient.authenticate(user, password)); Mockito .when(ldapConnectionTemplate.authenticate(ldapConfig.getLdapUserBaseDn(), @@ -112,11 +117,11 @@ public void testAuthenticate() { } catch (PasswordException ex) { log.error("This should not fail"); //Force the test to fail - Assert.assertFalse(false); + assertFalse(false); } } - @Test(enabled = false) + @Test public void testMemberof() { String user = "user1"; String[] attributes = new String[]{"memberOf"}; @@ -137,7 +142,7 @@ public void testMemberof() { String ret = lbLdapClient.getMemberOf(user); log.info("ret is {}", ret); - Assert.assertTrue(ret.equals("Admin,User")); + assertTrue(ret.equals("Admin,User")); org.mockito.Mockito .when(ldapConnectionTemplate.search(eq(ldapConfig.getLdapUserBaseDn()), @@ -148,7 +153,7 @@ public void testMemberof() { .thenReturn(null); //failure case - Assert.assertFalse(lbLdapClient.getMemberOf(user).equals("Admin,User")); + assertFalse(lbLdapClient.getMemberOf(user).equals("Admin,User")); } } \ No newline at end of file diff --git a/gateway-ha/src/test/java/io/trino/gateway/ha/security/TestLbFilter.java b/gateway-ha/src/test/java/io/trino/gateway/ha/security/TestLbFilter.java index ff15fa574..8723ba1dd 100644 --- a/gateway-ha/src/test/java/io/trino/gateway/ha/security/TestLbFilter.java +++ b/gateway-ha/src/test/java/io/trino/gateway/ha/security/TestLbFilter.java @@ -1,5 +1,9 @@ package io.trino.gateway.ha.security; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + import com.auth0.jwt.interfaces.Claim; import io.trino.gateway.ha.config.AuthorizationConfiguration; import java.util.Map; @@ -12,16 +16,14 @@ import javax.ws.rs.core.SecurityContext; import lombok.extern.slf4j.Slf4j; -import org.junit.Assert; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; -import org.testng.annotations.BeforeClass; - @Slf4j -@Ignore +@TestInstance(TestInstance.Lifecycle.PER_CLASS) public class TestLbFilter { private static final String USER = "username"; @@ -32,7 +34,7 @@ public class TestLbFilter { private AuthorizationManager authorizationManager; private ContainerRequestContext requestContext; - @BeforeClass(alwaysRun = true) + @BeforeAll public void setup() throws Exception { // Set authentication manager mock with 'sub' claim @@ -44,18 +46,21 @@ public void setup() throws Exception { Mockito .when(oauthManager.getClaimsFromIdToken(ID_TOKEN)) .thenReturn(Optional.of(Map.of("sub", claim))); + Mockito.when(oauthManager.getUserIdField()).thenReturn("sub"); // Set authorization manager with membership authorizationManager = Mockito.mock(AuthorizationManager.class); Mockito .when(authorizationManager.searchMemberOf(USER)) .thenReturn(MEMBER_OF); + Mockito + .when(authorizationManager.getPrivileges(USER)) + .thenReturn(MEMBER_OF); // Request context for the auth filter requestContext = Mockito.mock(ContainerRequestContext.class); } - @Test public void testSuccessfulCookieAuthentication() throws Exception { @@ -71,9 +76,11 @@ public void testSuccessfulCookieAuthentication() throws Exception { Mockito .when(requestContext.getHeaders()) .thenReturn(new MultivaluedHashMap()); + LbAuthenticator authenticator = new LbAuthenticator( oauthManager, authorizationManager); + LbAuthorizer authorizer = new LbAuthorizer(configuration); LbFilter lbFilter = new LbFilter.Builder() .setAuthenticator(authenticator) @@ -91,8 +98,8 @@ public void testSuccessfulCookieAuthentication() throws Exception { .setSecurityContext(secContextCaptor.capture()); // Checks authorization for authenticated principal - Assert.assertTrue(secContextCaptor.getValue().isUserInRole("USER")); - Assert.assertFalse(secContextCaptor.getValue().isUserInRole("ADMIN")); + assertTrue(secContextCaptor.getValue().isUserInRole("USER")); + assertFalse(secContextCaptor.getValue().isUserInRole("ADMIN")); } @Test @@ -126,38 +133,41 @@ public void testSuccessfulHeaderAuthentication() throws Exception { lbFilter.filter(requestContext); // SecurityContext must be set with the right authorizer at authentication - Mockito.verify(requestContext, Mockito.times(1)).setSecurityContext(secContextCaptor.capture()); + Mockito.verify(requestContext, Mockito.atLeast(1)) + .setSecurityContext(secContextCaptor.capture()); // Checks authorization for authenticated principal - Assert.assertTrue(secContextCaptor.getValue().isUserInRole("USER")); - Assert.assertTrue(secContextCaptor.getValue().isUserInRole("ADMIN")); + assertTrue(secContextCaptor.getValue().isUserInRole("USER")); + assertTrue(secContextCaptor.getValue().isUserInRole("ADMIN")); } - @Test(expected = WebApplicationException.class) + @Test public void testMissingAuthenticationToken() throws WebApplicationException { - AuthorizationConfiguration configuration = new AuthorizationConfiguration(); - - MultivaluedHashMap headers = new MultivaluedHashMap<>(); - - Mockito - .when(requestContext.getCookies()) - .thenReturn(Map.of()); - Mockito - .when(requestContext.getHeaders()) - .thenReturn(headers); - LbAuthenticator authenticator = new LbAuthenticator( - oauthManager, - authorizationManager); - LbAuthorizer authorizer = new LbAuthorizer(configuration); - LbFilter lbFilter = new LbFilter.Builder() - .setAuthenticator(authenticator) - .setAuthorizer(authorizer) - .setPrefix("Bearer") - .buildAuthFilter(); - - // Exception is thrown when the authentication fails - lbFilter.filter(requestContext); - + assertThrows(WebApplicationException.class, () -> { + + AuthorizationConfiguration configuration = new AuthorizationConfiguration(); + + MultivaluedHashMap headers = new MultivaluedHashMap<>(); + + Mockito + .when(requestContext.getCookies()) + .thenReturn(Map.of()); + Mockito + .when(requestContext.getHeaders()) + .thenReturn(headers); + LbAuthenticator authenticator = new LbAuthenticator( + oauthManager, + authorizationManager); + LbAuthorizer authorizer = new LbAuthorizer(configuration); + LbFilter lbFilter = new LbFilter.Builder() + .setAuthenticator(authenticator) + .setAuthorizer(authorizer) + .setPrefix("Bearer") + .buildAuthFilter(); + + // Exception is thrown when the authentication fails + lbFilter.filter(requestContext); + }); } } diff --git a/pom.xml b/pom.xml index 7287bc692..467a3c99d 100644 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,11 @@ 6.10 1.2.1 + + 3.1.2 + 5.10.0 + + 3.0.0 7.7 NonEmptyAtclauseDescription,JavadocMethod,AbbreviationAsWordInName,MemberName @@ -79,12 +84,20 @@ compile - + + + org.junit.jupiter + junit-jupiter-api + 5.10.0 + test + + org.testng testng ${testng.version} + com.squareup.okhttp mockwebserver @@ -138,6 +151,29 @@ + + org.apache.maven.plugins + maven-surefire-plugin + ${dep.plugin.surefire.version} + + + + org.apache.maven.surefire + surefire-junit-platform + ${dep.plugin.surefire.version} + + + org.apache.maven.surefire + surefire-testng + ${dep.plugin.surefire.version} + + + org.junit.jupiter + junit-jupiter-engine + ${dep.junit.version} + + + diff --git a/proxyserver/src/test/io/trino/gateway/proxyserver/TestProxyServer.java b/proxyserver/src/test/java/io/trino/gateway/proxyserver/TestProxyServer.java similarity index 100% rename from proxyserver/src/test/io/trino/gateway/proxyserver/TestProxyServer.java rename to proxyserver/src/test/java/io/trino/gateway/proxyserver/TestProxyServer.java