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