From a903107855fd878e9b0f3b3f92e6250a49dae0ba Mon Sep 17 00:00:00 2001 From: jenow Date: Mon, 10 Feb 2020 12:50:11 +0100 Subject: [PATCH 1/4] auth controller tests --- .travis.yml | 18 + .../sdk/API/Controllers/AuthController.java | 29 +- .../java/io/kuzzle/sdk/CoreClasses/Task.java | 41 +-- src/main/java/io/kuzzle/sdk/Kuzzle.java | 32 +- .../API/Controllers/AuthControllerTest.java | 313 ++++++++++++++++++ .../test/CoreClasses/TaskTest/TaskTests.java | 25 +- .../CoreClasses/TaskTest/TestableTask.java | 11 +- src/test/java/io/kuzzle/test/KuzzleTests.java | 2 - .../test/ProtocolTest/WebSocketTests.java | 1 - 9 files changed, 371 insertions(+), 101 deletions(-) create mode 100644 src/test/java/io/kuzzle/test/API/Controllers/AuthControllerTest.java diff --git a/.travis.yml b/.travis.yml index 0432d4b7..2737e5a1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -112,6 +112,24 @@ jobs: script: - gradle build + - stage: Unit Tests + name: Run unit tests + language: java + jdk: openjdk8 + sudo: false + before_cache: + - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock + - rm -fr $HOME/.gradle/caches/*/plugin-resolution/ + cache: + directories: + - "$HOME/.gradle/caches/" + - "$HOME/.gradle/wrapper/" + install: + - cd $TRAVIS_BUILD_DIR/ + - gradle assemble + script: + - gradle test + stages: - name: Unit Tests if: type =~ /(cron|push|pull_request)/ AND branch =~ /^master|[0-9]+-(dev|stable)$/ diff --git a/src/main/java/io/kuzzle/sdk/API/Controllers/AuthController.java b/src/main/java/io/kuzzle/sdk/API/Controllers/AuthController.java index 4255cb7c..f4ac988b 100644 --- a/src/main/java/io/kuzzle/sdk/API/Controllers/AuthController.java +++ b/src/main/java/io/kuzzle/sdk/API/Controllers/AuthController.java @@ -19,9 +19,8 @@ public AuthController(final Kuzzle kuzzle) { /** * Checks the validity of an authentication token. - * - * @param token - * An authentication token + * + * @param token An authentication token * @return a CompletableFuture * @throws NotConnectedException * @throws InternalException @@ -43,12 +42,10 @@ public CompletableFuture> checkToken( /** * Creates new credentials for the current user. - * - * @param strategy - * A String representing the strategy - * @param credentials - * A ConcurrentHashMap representing - * credentials information + * + * @param strategy A String representing the strategy + * @param credentials A ConcurrentHashMap representing + * credentials information * @return A CompletableFuture * @throws NotConnectedException * @throws InternalException @@ -75,9 +72,8 @@ public CompletableFuture> createMyCredentials( /** * Checks that the current authenticated user has credentials for the * specified authentication strategy. - * - * @param strategy - * A String representing the strategy + * + * @param strategy A String representing the strategy * @return A CompletableFuture * @throws NotConnectedException * @throws InternalException @@ -152,7 +148,8 @@ public CompletableFuture> getStrategies() throws NotConnectedException, InternalException { final KuzzleMap query = new KuzzleMap(); - query.put("controller", "auth").put("action", "getStrategies"); + query.put("controller", "auth") + .put("action", "getStrategies"); return kuzzle .query(query) @@ -176,7 +173,7 @@ public CompletableFuture> login( final KuzzleMap map = KuzzleMap .from((ConcurrentHashMap) response.result); kuzzle.setAuthenticationToken(map.getString("jwt")); - if (!map.isNull("_id")) { + if (map.getString("_id") != null) { kuzzle.trigger(Event.loginAttempt, true); } else { kuzzle.trigger(Event.loginAttempt, false); @@ -208,7 +205,7 @@ public CompletableFuture> refreshToken( query .put("controller", "auth") .put("action", "refreshToken") - .put("expiresIn", expiresIn); + .put("expiresIn", (expiresIn == null ? "1h" : expiresIn)); return kuzzle.query(query).thenApplyAsync((response) -> { final KuzzleMap map = KuzzleMap @@ -259,7 +256,7 @@ public CompletableFuture> updateSelf( } public CompletableFuture validateMyCredentials(final String strategy, - final ConcurrentHashMap credentials) + final ConcurrentHashMap credentials) throws NotConnectedException, InternalException { final KuzzleMap query = new KuzzleMap(); diff --git a/src/main/java/io/kuzzle/sdk/CoreClasses/Task.java b/src/main/java/io/kuzzle/sdk/CoreClasses/Task.java index 7980ecdf..4039187b 100644 --- a/src/main/java/io/kuzzle/sdk/CoreClasses/Task.java +++ b/src/main/java/io/kuzzle/sdk/CoreClasses/Task.java @@ -1,43 +1,15 @@ package io.kuzzle.sdk.CoreClasses; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.atomic.AtomicReference; /** * @param The object type that the task return. */ public class Task { - /** - * A countDownLatch used to lock the future. - */ - protected CountDownLatch countDownLatch; /** * A completable future. */ - protected CompletableFuture future; - - /** - * The object instance to return. - */ - protected AtomicReference atomicReference; - - /** - * Initializes a new instance of the Task. - */ - public Task() { - atomicReference = new AtomicReference(); - countDownLatch = new CountDownLatch(1); - future = CompletableFuture.supplyAsync(() -> { - try { - countDownLatch.await(); - - return atomicReference.get(); - } catch (InterruptedException e) { - return null; - } - }); - } + protected CompletableFuture future = new CompletableFuture<>(); /** * @return The associated CompletableFuture. @@ -48,7 +20,7 @@ public CompletableFuture getFuture() { /** * Set the exception of the CompletableFuture. - * + * * @param exception */ public void setException(Exception exception) { @@ -78,7 +50,7 @@ public boolean isCompletedExceptionally() { /** * Set if the future is cancelled. - * + * * @param state */ public void setCancelled(boolean state) { @@ -89,16 +61,15 @@ public void setCancelled(boolean state) { * Unlock the future. */ public void trigger() { - countDownLatch.countDown(); + future.complete(null); } /** * Unlock the future and set the object. - * + * * @param object */ public void trigger(T object) { - atomicReference.set(object); - countDownLatch.countDown(); + future.complete(object); } } diff --git a/src/main/java/io/kuzzle/sdk/Kuzzle.java b/src/main/java/io/kuzzle/sdk/Kuzzle.java index 8e10353c..3acb9446 100644 --- a/src/main/java/io/kuzzle/sdk/Kuzzle.java +++ b/src/main/java/io/kuzzle/sdk/Kuzzle.java @@ -57,9 +57,8 @@ public class Kuzzle extends EventManager { /** * Initialize a new instance of Kuzzle - * - * @param networkProtocol - * The network protocol + * + * @param networkProtocol The network protocol * @throws IllegalArgumentException */ public Kuzzle(final AbstractProtocol networkProtocol) @@ -73,15 +72,13 @@ public AuthController getAuthController() { /** * Initialize a new instance of Kuzzle - * - * @param networkProtocol - * The network protocol - * @param options - * Kuzzle options + * + * @param networkProtocol The network protocol + * @param options Kuzzle options * @throws IllegalArgumentException */ public Kuzzle(final AbstractProtocol networkProtocol, - final KuzzleOptions options) throws IllegalArgumentException { + final KuzzleOptions options) throws IllegalArgumentException { if (networkProtocol == null) { throw new IllegalArgumentException("networkProtocol can't be null"); } @@ -108,7 +105,7 @@ public Kuzzle(final AbstractProtocol networkProtocol, /** * Establish a network connection - * + * * @throws Exception */ public void connect() throws Exception { @@ -124,9 +121,8 @@ public void disconnect() { /** * Handles the ResponseReceivedEvent from the network protocol - * - * @param payload - * Raw API Response + * + * @param payload Raw API Response */ protected void onResponseReceived(final Object... payload) { @@ -178,9 +174,8 @@ protected void onStateChanged(final Object... args) { /** * Sends an API request to Kuzzle and returns the corresponding API - * - * @param query - * Kuzzle API query + * + * @param query Kuzzle API query * @return A CompletableFuture * @throws InternalException * @throws NotConnectedException @@ -242,9 +237,8 @@ public String getAuthenticationToken() { /** * Set the authentication token - * - * @param token - * Authentication token + * + * @param token Authentication token */ public void setAuthenticationToken(final String token) { if (authenticationToken == null) { diff --git a/src/test/java/io/kuzzle/test/API/Controllers/AuthControllerTest.java b/src/test/java/io/kuzzle/test/API/Controllers/AuthControllerTest.java new file mode 100644 index 00000000..70a3fe96 --- /dev/null +++ b/src/test/java/io/kuzzle/test/API/Controllers/AuthControllerTest.java @@ -0,0 +1,313 @@ +package io.kuzzle.test.API.Controllers; + +import io.kuzzle.sdk.CoreClasses.Maps.KuzzleMap; +import io.kuzzle.sdk.CoreClasses.Responses.Response; +import io.kuzzle.sdk.Events.Event; +import io.kuzzle.sdk.Exceptions.InternalException; +import io.kuzzle.sdk.Exceptions.NotConnectedException; +import io.kuzzle.sdk.Kuzzle; +import io.kuzzle.sdk.Protocol.AbstractProtocol; +import io.kuzzle.sdk.Protocol.WebSocket; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.*; + +public class AuthControllerTest { + private AbstractProtocol networkProtocol = Mockito.mock(WebSocket.class); + + @Test + public void checkTokenTest() throws NotConnectedException, InternalException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + + kuzzleSpy.getAuthController().checkToken("my-token"); + verify(kuzzleSpy, times(1)).query((KuzzleMap) arg.capture()); + + assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); + assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "checkToken"); + assertEquals("my-token", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("token").toString()); + } + + @Test + public void createMyCredentialsTest() throws NotConnectedException, InternalException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + + ConcurrentHashMap credentials = new ConcurrentHashMap<>(); + credentials.put("username", "foo"); + credentials.put("password", "foobar"); + + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + + kuzzleSpy.getAuthController().createMyCredentials("local", credentials); + verify(kuzzleSpy, times(1)).query((KuzzleMap) arg.capture()); + + assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); + assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "createMyCredentials"); + assertEquals(((KuzzleMap) arg.getValue()).getString("strategy"), "local"); + assertEquals("foo", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("username")); + assertEquals("foobar", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("password")); + } + + @Test + public void credentialsExistTest() throws NotConnectedException, InternalException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + + kuzzleSpy.getAuthController().credentialsExist("local"); + verify(kuzzleSpy, times(1)).query((KuzzleMap) arg.capture()); + + assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); + assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "credentialsExist"); + assertEquals("local", ((((KuzzleMap) arg.getValue()).getString("strategy")))); + } + + @Test + public void getMyCredentialsTest() throws NotConnectedException, InternalException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + + kuzzleSpy.getAuthController().getMyCredentials("local"); + verify(kuzzleSpy, times(1)).query((KuzzleMap) arg.capture()); + + assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); + assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "getMyCredentials"); + assertEquals("local", ((((KuzzleMap) arg.getValue()).getString("strategy")))); + } + + @Test + public void getMyRightsTest() throws NotConnectedException, InternalException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + + kuzzleSpy.getAuthController().getMyRights(); + verify(kuzzleSpy, times(1)).query((KuzzleMap) arg.capture()); + + assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); + assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "getMyRights"); + } + + @Test + public void getStrategies() throws NotConnectedException, InternalException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + + kuzzleSpy.getAuthController().getStrategies(); + verify(kuzzleSpy, times(1)).query((KuzzleMap) arg.capture()); + + assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); + assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "getStrategies"); + } + + @Test + public void loginSuccessTest() throws NotConnectedException, InternalException, InterruptedException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + CompletableFuture future = new CompletableFuture<>(); + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + Response response = new Response(); + ConcurrentHashMap result = new ConcurrentHashMap<>(); + + result.put("jwt", "my-token"); + result.put("_id", "my-id"); + response.result = result; + + doReturn(future).when(kuzzleSpy).query(any(KuzzleMap.class)); + + ConcurrentHashMap credentials = new ConcurrentHashMap<>(); + credentials.put("username", "foo"); + credentials.put("password", "foobar"); + + kuzzleSpy.getAuthController().login("local", credentials); + future.complete(response); + Thread.sleep(1000); + verify(kuzzleSpy).setAuthenticationToken(eq("my-token")); + verify(kuzzleSpy).trigger(eq(Event.loginAttempt), eq(true)); + verify(kuzzleSpy).query((KuzzleMap) arg.capture()); + + assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); + assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "login"); + assertEquals(((KuzzleMap) arg.getValue()).getString("strategy"), "local"); + assertEquals(((KuzzleMap) arg.getValue()).getString("expiresIn"), "1h"); + assertEquals("foo", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("username")); + assertEquals("foobar", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("password")); + } + + @Test + public void loginSuccessWithExpiresInTest() throws NotConnectedException, InternalException, InterruptedException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + CompletableFuture future = new CompletableFuture<>(); + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + Response response = new Response(); + ConcurrentHashMap result = new ConcurrentHashMap<>(); + + result.put("jwt", "my-token"); + result.put("_id", "my-id"); + response.result = result; + + doReturn(future).when(kuzzleSpy).query(any(KuzzleMap.class)); + + ConcurrentHashMap credentials = new ConcurrentHashMap<>(); + credentials.put("username", "foo"); + credentials.put("password", "foobar"); + + kuzzleSpy.getAuthController().login("local", credentials, "42h"); + future.complete(response); + Thread.sleep(1000); + verify(kuzzleSpy).setAuthenticationToken(eq("my-token")); + verify(kuzzleSpy).trigger(eq(Event.loginAttempt), eq(true)); + verify(kuzzleSpy).query((KuzzleMap) arg.capture()); + + assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); + assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "login"); + assertEquals(((KuzzleMap) arg.getValue()).getString("strategy"), "local"); + assertEquals(((KuzzleMap) arg.getValue()).getString("expiresIn"), "42h"); + assertEquals("foo", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("username")); + assertEquals("foobar", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("password")); + } + + @Test + public void loginFailTest() throws NotConnectedException, InternalException, InterruptedException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + CompletableFuture future = new CompletableFuture<>(); + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + Response response = new Response(); + response.result = new ConcurrentHashMap<>(); + + doReturn(future).when(kuzzleSpy).query(any(KuzzleMap.class)); + + ConcurrentHashMap credentials = new ConcurrentHashMap<>(); + credentials.put("username", "foo"); + credentials.put("password", "foobar"); + + kuzzleSpy.getAuthController().login("local", credentials); + future.complete(response); + Thread.sleep(1000); + verify(kuzzleSpy).setAuthenticationToken(eq(null)); + verify(kuzzleSpy).trigger(eq(Event.loginAttempt), eq(false)); + verify(kuzzleSpy).query((KuzzleMap) arg.capture()); + + assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); + assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "login"); + assertEquals(((KuzzleMap) arg.getValue()).getString("strategy"), "local"); + assertEquals(((KuzzleMap) arg.getValue()).getString("expiresIn"), "1h"); + assertEquals("foo", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("username")); + assertEquals("foobar", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("password")); + } + + @Test + public void refreshTokenTest() throws NotConnectedException, InternalException, InterruptedException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + CompletableFuture future = new CompletableFuture<>(); + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + Response response = new Response(); + ConcurrentHashMap result = new ConcurrentHashMap<>(); + + result.put("jwt", "my-token"); + response.result = result; + + doReturn(future).when(kuzzleSpy).query(any(KuzzleMap.class)); + + kuzzleSpy.getAuthController().refreshToken(); + future.complete(response); + Thread.sleep(1000); + verify(kuzzleSpy).setAuthenticationToken(eq("my-token")); + verify(kuzzleSpy).query((KuzzleMap) arg.capture()); + + assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); + assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "refreshToken"); + assertEquals(((KuzzleMap) arg.getValue()).getString("expiresIn"), "1h"); + } + + @Test + public void refreshTokenWithExpiresInTest() throws NotConnectedException, InternalException, InterruptedException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + CompletableFuture future = new CompletableFuture<>(); + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + Response response = new Response(); + ConcurrentHashMap result = new ConcurrentHashMap<>(); + + result.put("jwt", "my-token"); + response.result = result; + + doReturn(future).when(kuzzleSpy).query(any(KuzzleMap.class)); + + kuzzleSpy.getAuthController().refreshToken("42h"); + future.complete(response); + Thread.sleep(1000); + verify(kuzzleSpy).setAuthenticationToken(eq("my-token")); + verify(kuzzleSpy).query((KuzzleMap) arg.capture()); + + assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); + assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "refreshToken"); + assertEquals(((KuzzleMap) arg.getValue()).getString("expiresIn"), "42h"); + } + + @Test + public void updateMyCredentialsTest() throws NotConnectedException, InternalException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + + ConcurrentHashMap credentials = new ConcurrentHashMap<>(); + credentials.put("username", "foo"); + credentials.put("password", "foobar"); + + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + + kuzzleSpy.getAuthController().updateMyCredentials("local", credentials); + verify(kuzzleSpy, times(1)).query((KuzzleMap) arg.capture()); + + assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); + assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "updateMyCredentials"); + assertEquals(((KuzzleMap) arg.getValue()).getString("strategy"), "local"); + assertEquals("foo", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("username")); + assertEquals("foobar", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("password")); + } + + @Test + public void updateSelfTest() throws NotConnectedException, InternalException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + + ConcurrentHashMap credentials = new ConcurrentHashMap<>(); + credentials.put("username", "foo"); + credentials.put("password", "foobar"); + + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + + kuzzleSpy.getAuthController().updateSelf(credentials); + verify(kuzzleSpy, times(1)).query((KuzzleMap) arg.capture()); + + assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); + assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "updateSelf"); + assertEquals("foo", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("username")); + assertEquals("foobar", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("password")); + } + + @Test + public void validateMyCredentialsTest() throws NotConnectedException, InternalException { + Kuzzle kuzzleSpy = spy(new Kuzzle(networkProtocol)); + + ConcurrentHashMap credentials = new ConcurrentHashMap<>(); + credentials.put("username", "foo"); + credentials.put("password", "foobar"); + + ArgumentCaptor arg = ArgumentCaptor.forClass(KuzzleMap.class); + + kuzzleSpy.getAuthController().validateMyCredentials("local", credentials); + verify(kuzzleSpy, times(1)).query((KuzzleMap) arg.capture()); + + assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); + assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "validateMyCredentials"); + assertEquals(((KuzzleMap) arg.getValue()).getString("strategy"), "local"); + assertEquals("foo", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("username")); + assertEquals("foobar", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("password")); + } +} diff --git a/src/test/java/io/kuzzle/test/CoreClasses/TaskTest/TaskTests.java b/src/test/java/io/kuzzle/test/CoreClasses/TaskTest/TaskTests.java index cb91e79b..b2ebb046 100644 --- a/src/test/java/io/kuzzle/test/CoreClasses/TaskTest/TaskTests.java +++ b/src/test/java/io/kuzzle/test/CoreClasses/TaskTest/TaskTests.java @@ -5,9 +5,7 @@ import org.junit.Test; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicReference; import static org.mockito.Matchers.any; import static org.mockito.Mockito.*; @@ -16,10 +14,6 @@ public class TaskTests { @Test public void constructorTest() { TestableTask task = new TestableTask<>(); - Assert.assertNotNull(task.getAtomicReference()); - Assert.assertEquals(AtomicReference.class, task.getAtomicReference().getClass()); - Assert.assertNotNull(task.getCountDownLatch()); - Assert.assertEquals(CountDownLatch.class, task.getCountDownLatch().getClass()); Assert.assertNotNull(task.getFuture()); } @@ -33,7 +27,7 @@ public void getFutureTest() { @Test public void setExceptionTest() { TestableTask task = new TestableTask<>(); - task.applyMockFuture(); + task.applyMocks(); task.setException(new Exception("foobar")); @@ -43,7 +37,7 @@ public void setExceptionTest() { @Test public void isCancelledTest() { TestableTask task = new TestableTask<>(); - task.applyMockFuture(); + task.applyMocks(); when(task.mockedFuture.isCancelled()).thenReturn(true); @@ -55,7 +49,7 @@ public void isCancelledTest() { @Test public void isDoneTest() { TestableTask task = new TestableTask<>(); - task.applyMockFuture(); + task.applyMocks(); when(task.mockedFuture.isDone()).thenReturn(true); @@ -67,7 +61,7 @@ public void isDoneTest() { @Test public void isCompletedExceptionallyTest() { TestableTask task = new TestableTask<>(); - task.applyMockFuture(); + task.applyMocks(); when(task.mockedFuture.isCompletedExceptionally()).thenReturn(true); @@ -79,7 +73,7 @@ public void isCompletedExceptionallyTest() { @Test public void setCancelledTest() { TestableTask task = new TestableTask<>(); - task.applyMockFuture(); + task.applyMocks(); task.setCancelled(true); @@ -92,16 +86,13 @@ public void triggerTest() { final AtomicBoolean success = new AtomicBoolean(false); - CompletableFuture taskChain = task.getFuture().thenRun(() -> { - success.set(true); - }); + CompletableFuture taskChain = task.getFuture().thenRun(() -> success.set(true)); task.trigger(); taskChain.join(); Assert.assertTrue(success.get()); - } @Test @@ -110,9 +101,7 @@ public void triggerWithObjectTest() { final AtomicBoolean success = new AtomicBoolean(false); - CompletableFuture taskChain = task.getFuture().thenAccept((str) -> { - success.set(str.equals("foobar")); - }); + CompletableFuture taskChain = task.getFuture().thenAccept((str) -> success.set(str.equals("foobar"))); task.trigger("foobar"); diff --git a/src/test/java/io/kuzzle/test/CoreClasses/TaskTest/TestableTask.java b/src/test/java/io/kuzzle/test/CoreClasses/TaskTest/TestableTask.java index 7ac9140f..0ae5c330 100644 --- a/src/test/java/io/kuzzle/test/CoreClasses/TaskTest/TestableTask.java +++ b/src/test/java/io/kuzzle/test/CoreClasses/TaskTest/TestableTask.java @@ -16,16 +16,7 @@ public TestableTask() { super(); } - public void applyMockFuture() { + public void applyMocks() { super.future = mockedFuture; } - - public CountDownLatch getCountDownLatch() { - return super.countDownLatch; - } - - public AtomicReference getAtomicReference() { - return super.atomicReference; - } - } diff --git a/src/test/java/io/kuzzle/test/KuzzleTests.java b/src/test/java/io/kuzzle/test/KuzzleTests.java index 4025e786..ad7e389d 100644 --- a/src/test/java/io/kuzzle/test/KuzzleTests.java +++ b/src/test/java/io/kuzzle/test/KuzzleTests.java @@ -23,7 +23,6 @@ import java.net.URISyntaxException; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; public class KuzzleTests { private AbstractProtocol networkProtocol = Mockito.mock(WebSocket.class); @@ -123,5 +122,4 @@ public void onResponseReceivedAndResponseIsUnhandled() { Mockito.verify(listener, Mockito.times(1)).trigger(Matchers.any(Response.class)); } - } diff --git a/src/test/java/io/kuzzle/test/ProtocolTest/WebSocketTests.java b/src/test/java/io/kuzzle/test/ProtocolTest/WebSocketTests.java index e0b25317..e29a4e37 100644 --- a/src/test/java/io/kuzzle/test/ProtocolTest/WebSocketTests.java +++ b/src/test/java/io/kuzzle/test/ProtocolTest/WebSocketTests.java @@ -11,7 +11,6 @@ import static org.mockito.Mockito.*; public class WebSocketTests { - private TestableWebSocket socket; private String host; private WebSocketOptions options; From 367b44971ceae760233dd332ef3591ceb16f78e6 Mon Sep 17 00:00:00 2001 From: jenow Date: Mon, 10 Feb 2020 14:40:55 +0100 Subject: [PATCH 2/4] replace gradle by gradlew --- .travis.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2737e5a1..1dd7a360 100644 --- a/.travis.yml +++ b/.travis.yml @@ -106,11 +106,9 @@ jobs: - "$HOME/.gradle/wrapper/" install: - cd $TRAVIS_BUILD_DIR/ - - gradle assemble - - cd $TRAVIS_BUILD_DIR/ - - gradle assemble + - ./gradlew assemble script: - - gradle build + - ./gradlew build - stage: Unit Tests name: Run unit tests @@ -126,9 +124,9 @@ jobs: - "$HOME/.gradle/wrapper/" install: - cd $TRAVIS_BUILD_DIR/ - - gradle assemble + - ./gradlew assemble script: - - gradle test + - ./gradlew test stages: - name: Unit Tests From b6bdd2d97281c39d01fe854a9bef1e3d98f8b1c7 Mon Sep 17 00:00:00 2001 From: jenow Date: Tue, 11 Feb 2020 10:45:10 +0100 Subject: [PATCH 3/4] no default value for expiresIn --- .../java/io/kuzzle/sdk/API/Controllers/AuthController.java | 2 +- .../io/kuzzle/test/API/Controllers/AuthControllerTest.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/kuzzle/sdk/API/Controllers/AuthController.java b/src/main/java/io/kuzzle/sdk/API/Controllers/AuthController.java index f4ac988b..8c791f7f 100644 --- a/src/main/java/io/kuzzle/sdk/API/Controllers/AuthController.java +++ b/src/main/java/io/kuzzle/sdk/API/Controllers/AuthController.java @@ -167,7 +167,7 @@ public CompletableFuture> login( .put("action", "login") .put("strategy", strategy) .put("body", credentials) - .put("expiresIn", (expiresIn == null ? "1h" : expiresIn)); + .put("expiresIn", expiresIn); return kuzzle.query(query).thenApplyAsync((response) -> { final KuzzleMap map = KuzzleMap diff --git a/src/test/java/io/kuzzle/test/API/Controllers/AuthControllerTest.java b/src/test/java/io/kuzzle/test/API/Controllers/AuthControllerTest.java index 70a3fe96..d7b5f60a 100644 --- a/src/test/java/io/kuzzle/test/API/Controllers/AuthControllerTest.java +++ b/src/test/java/io/kuzzle/test/API/Controllers/AuthControllerTest.java @@ -137,7 +137,7 @@ public void loginSuccessTest() throws NotConnectedException, InternalException, assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "login"); assertEquals(((KuzzleMap) arg.getValue()).getString("strategy"), "local"); - assertEquals(((KuzzleMap) arg.getValue()).getString("expiresIn"), "1h"); + assertEquals(((KuzzleMap) arg.getValue()).getString("expiresIn"), null); assertEquals("foo", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("username")); assertEquals("foobar", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("password")); } @@ -199,7 +199,7 @@ public void loginFailTest() throws NotConnectedException, InternalException, Int assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "login"); assertEquals(((KuzzleMap) arg.getValue()).getString("strategy"), "local"); - assertEquals(((KuzzleMap) arg.getValue()).getString("expiresIn"), "1h"); + assertEquals(((KuzzleMap) arg.getValue()).getString("expiresIn"), null); assertEquals("foo", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("username")); assertEquals("foobar", ((ConcurrentHashMap)(((KuzzleMap) arg.getValue()).get("body"))).get("password")); } From fe33e0676686fb7b692e644071b4023268fece66 Mon Sep 17 00:00:00 2001 From: jenow Date: Wed, 12 Feb 2020 17:47:49 +0100 Subject: [PATCH 4/4] no default value for expiresIn for refreshToken --- src/main/java/io/kuzzle/sdk/API/Controllers/AuthController.java | 2 +- .../java/io/kuzzle/test/API/Controllers/AuthControllerTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/kuzzle/sdk/API/Controllers/AuthController.java b/src/main/java/io/kuzzle/sdk/API/Controllers/AuthController.java index 8c791f7f..318aff2b 100644 --- a/src/main/java/io/kuzzle/sdk/API/Controllers/AuthController.java +++ b/src/main/java/io/kuzzle/sdk/API/Controllers/AuthController.java @@ -205,7 +205,7 @@ public CompletableFuture> refreshToken( query .put("controller", "auth") .put("action", "refreshToken") - .put("expiresIn", (expiresIn == null ? "1h" : expiresIn)); + .put("expiresIn", expiresIn); return kuzzle.query(query).thenApplyAsync((response) -> { final KuzzleMap map = KuzzleMap diff --git a/src/test/java/io/kuzzle/test/API/Controllers/AuthControllerTest.java b/src/test/java/io/kuzzle/test/API/Controllers/AuthControllerTest.java index d7b5f60a..92510a1c 100644 --- a/src/test/java/io/kuzzle/test/API/Controllers/AuthControllerTest.java +++ b/src/test/java/io/kuzzle/test/API/Controllers/AuthControllerTest.java @@ -225,7 +225,7 @@ public void refreshTokenTest() throws NotConnectedException, InternalException, assertEquals(((KuzzleMap) arg.getValue()).getString("controller"), "auth"); assertEquals(((KuzzleMap) arg.getValue()).getString("action"), "refreshToken"); - assertEquals(((KuzzleMap) arg.getValue()).getString("expiresIn"), "1h"); + assertEquals(((KuzzleMap) arg.getValue()).getString("expiresIn"), null); } @Test