Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package org.cloudfoundry.multiapps.controller.client;

import org.cloudfoundry.multiapps.controller.client.facade.oauth2.OAuth2AccessTokenWithAdditionalInfo;
import org.cloudfoundry.multiapps.controller.client.facade.oauth2.OAuthClient;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;

class CloudFoundryTokenProviderTest {

@Mock
private OAuthClient oAuthClient;
@Mock
private OAuth2AccessTokenWithAdditionalInfo token;

private CloudFoundryTokenProvider tokenProvider;

@BeforeEach
void setUp() throws Exception {
MockitoAnnotations.openMocks(this)
.close();
tokenProvider = new CloudFoundryTokenProvider(oAuthClient);
}

@Test
void testGetTokenDelegatesToOAuthClient() {
Mockito.when(oAuthClient.getToken())
.thenReturn(token);

OAuth2AccessTokenWithAdditionalInfo result = tokenProvider.getToken();

Assertions.assertSame(token, result);
Mockito.verify(oAuthClient)
.getToken();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package org.cloudfoundry.multiapps.controller.client.facade;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpStatus;

class CloudControllerExceptionTest {

@Test
void testStatusOnlyConstructorDecoratesMessage() {
CloudControllerException e = new CloudControllerException(HttpStatus.NOT_FOUND);

Assertions.assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode());
Assertions.assertEquals("Controller operation failed: 404 Not Found", e.getMessage());
}

@Test
void testStatusAndStatusTextConstructor() {
CloudControllerException e = new CloudControllerException(HttpStatus.BAD_REQUEST, "Bad Request");

Assertions.assertEquals("Bad Request", e.getStatusText());
Assertions.assertEquals("Controller operation failed: 400 Bad Request", e.getMessage());
}

@Test
void testStatusStatusTextDescriptionConstructor() {
CloudControllerException e = new CloudControllerException(HttpStatus.UNAUTHORIZED, "Unauthorized", "expired");

Assertions.assertEquals("expired", e.getDescription());
Assertions.assertEquals("Controller operation failed: 401 Unauthorized: expired", e.getMessage());
}

@Test
void testWrappingConstructorPreservesFieldsAndCause() {
CloudOperationException source = new CloudOperationException(HttpStatus.INTERNAL_SERVER_ERROR, "Internal Server Error", "boom");

CloudControllerException e = new CloudControllerException(source);

Assertions.assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, e.getStatusCode());
Assertions.assertEquals("Internal Server Error", e.getStatusText());
Assertions.assertEquals("boom", e.getDescription());
Assertions.assertSame(source, e.getCause());
Assertions.assertEquals("Controller operation failed: 500 Internal Server Error: boom", e.getMessage());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package org.cloudfoundry.multiapps.controller.client.facade;

import org.cloudfoundry.multiapps.controller.client.facade.oauth2.OAuth2AccessTokenWithAdditionalInfo;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

class CloudCredentialsTest {

@Mock
private OAuth2AccessTokenWithAdditionalInfo token;

@BeforeEach
void setUp() throws Exception {
MockitoAnnotations.openMocks(this)
.close();
}

@Test
void testEmailPasswordConstructorDefaultsClientIdAndClientSecret() {
CloudCredentials c = new CloudCredentials("alice@example.com", "secret");

Assertions.assertEquals("alice@example.com", c.getEmail());
Assertions.assertEquals("secret", c.getPassword());
Assertions.assertEquals("cf", c.getClientId());
Assertions.assertEquals("", c.getClientSecret());
Assertions.assertNull(c.getOrigin());
Assertions.assertNull(c.getProxyUser());
Assertions.assertFalse(c.isProxyUserSet());
Assertions.assertTrue(c.isRefreshable());
Assertions.assertNull(c.getToken());
}

@Test
void testEmailPasswordClientIdConstructor() {
CloudCredentials c = new CloudCredentials("a", "b", "client-x");

Assertions.assertEquals("client-x", c.getClientId());
}

@Test
void testEmailPasswordClientIdSecretConstructor() {
CloudCredentials c = new CloudCredentials("a", "b", "cid", "csecret");

Assertions.assertEquals("cid", c.getClientId());
Assertions.assertEquals("csecret", c.getClientSecret());
}

@Test
void testEmailPasswordClientIdSecretOriginConstructor() {
CloudCredentials c = new CloudCredentials("a", "b", "cid", "csecret", "uaa");

Assertions.assertEquals("uaa", c.getOrigin());
}

@Test
void testTokenOnlyConstructor() {
CloudCredentials c = new CloudCredentials(token);

Assertions.assertSame(token, c.getToken());
Assertions.assertTrue(c.isRefreshable());
}

@Test
void testTokenAndRefreshableConstructor() {
CloudCredentials c = new CloudCredentials(token, false);

Assertions.assertSame(token, c.getToken());
Assertions.assertFalse(c.isRefreshable());
}

@Test
void testTokenAndClientIdConstructor() {
CloudCredentials c = new CloudCredentials(token, "client-y");

Assertions.assertEquals("client-y", c.getClientId());
}

@Test
void testTokenClientIdSecretConstructor() {
CloudCredentials c = new CloudCredentials(token, "client-y", "shh");

Assertions.assertEquals("client-y", c.getClientId());
Assertions.assertEquals("shh", c.getClientSecret());
}

@Test
void testProxyForUserCopiesFieldsAndSetsProxyUser() {
CloudCredentials base = new CloudCredentials("a@b.c", "pw", "cid");

CloudCredentials proxied = base.proxyForUser("admin");

Assertions.assertEquals("a@b.c", proxied.getEmail());
Assertions.assertEquals("pw", proxied.getPassword());
Assertions.assertEquals("cid", proxied.getClientId());
Assertions.assertEquals("admin", proxied.getProxyUser());
Assertions.assertTrue(proxied.isProxyUserSet());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package org.cloudfoundry.multiapps.controller.client.facade;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

class CloudExceptionTest {

@Test
void testCauseOnlyConstructor() {
Throwable cause = new RuntimeException("inner");

CloudException e = new CloudException(cause);

Assertions.assertSame(cause, e.getCause());
}

@Test
void testMessageAndCauseConstructor() {
Throwable cause = new RuntimeException("inner");

CloudException e = new CloudException("outer", cause);

Assertions.assertEquals("outer", e.getMessage());
Assertions.assertSame(cause, e.getCause());
}

@Test
void testMessageOnlyConstructor() {
CloudException e = new CloudException("only-message");

Assertions.assertEquals("only-message", e.getMessage());
Assertions.assertNull(e.getCause());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package org.cloudfoundry.multiapps.controller.client.facade;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpStatus;

class CloudOperationExceptionTest {

@Test
void testStatusOnlyConstructorUsesReasonPhraseAsStatusText() {
CloudOperationException e = new CloudOperationException(HttpStatus.NOT_FOUND);

Assertions.assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode());
Assertions.assertEquals(HttpStatus.NOT_FOUND.getReasonPhrase(), e.getStatusText());
Assertions.assertNull(e.getDescription());
Assertions.assertEquals("404 Not Found", e.getMessage());
}

@Test
void testStatusAndStatusTextConstructor() {
CloudOperationException e = new CloudOperationException(HttpStatus.BAD_REQUEST, "Bad Request");

Assertions.assertEquals(HttpStatus.BAD_REQUEST, e.getStatusCode());
Assertions.assertEquals("Bad Request", e.getStatusText());
Assertions.assertNull(e.getDescription());
Assertions.assertEquals("400 Bad Request", e.getMessage());
}

@Test
void testDescriptionConstructorIncludesDescriptionInMessage() {
CloudOperationException e = new CloudOperationException(HttpStatus.UNAUTHORIZED, "Unauthorized", "token expired");

Assertions.assertEquals("token expired", e.getDescription());
Assertions.assertEquals("401 Unauthorized: token expired", e.getMessage());
}

@Test
void testCauseIsPropagatedToSuper() {
Throwable cause = new RuntimeException("boom");

CloudOperationException e = new CloudOperationException(HttpStatus.INTERNAL_SERVER_ERROR, "Internal Server Error", "x", cause);

Assertions.assertSame(cause, e.getCause());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package org.cloudfoundry.multiapps.controller.client.facade;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpStatus;

class CloudServiceBrokerExceptionTest {

@Test
void testStatusOnlyConstructorDecoratesMessage() {
CloudServiceBrokerException e = new CloudServiceBrokerException(HttpStatus.NOT_FOUND);

Assertions.assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode());
Assertions.assertEquals("Service broker operation failed: 404 Not Found", e.getMessage());
}

@Test
void testStatusAndStatusTextConstructor() {
CloudServiceBrokerException e = new CloudServiceBrokerException(HttpStatus.BAD_REQUEST, "Bad Request");

Assertions.assertEquals("Service broker operation failed: 400 Bad Request", e.getMessage());
}

@Test
void testStatusStatusTextDescriptionConstructor() {
CloudServiceBrokerException e = new CloudServiceBrokerException(HttpStatus.CONFLICT, "Conflict", "already exists");

Assertions.assertEquals("Service broker operation failed: 409 Conflict: already exists", e.getMessage());
}

@Test
void testWrappingConstructorPreservesFieldsAndCause() {
CloudOperationException source = new CloudOperationException(HttpStatus.UNPROCESSABLE_ENTITY, "Unprocessable Entity", "broker rejected");

CloudServiceBrokerException e = new CloudServiceBrokerException(source);

Assertions.assertEquals(HttpStatus.UNPROCESSABLE_ENTITY, e.getStatusCode());
Assertions.assertEquals("broker rejected", e.getDescription());
Assertions.assertSame(source, e.getCause());
Assertions.assertEquals("Service broker operation failed: 422 Unprocessable Entity: broker rejected", e.getMessage());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package org.cloudfoundry.multiapps.controller.client.facade.adapters;

import org.cloudfoundry.multiapps.controller.client.facade.oauth2.OAuth2AccessTokenWithAdditionalInfo;
import org.cloudfoundry.multiapps.controller.client.facade.oauth2.OAuthClient;
import org.cloudfoundry.reactor.ConnectionContext;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;

class OAuthTokenProviderTest {

@Mock
private OAuthClient oAuthClient;
@Mock
private OAuth2AccessTokenWithAdditionalInfo token;
@Mock
private ConnectionContext connectionContext;

private OAuthTokenProvider provider;

@BeforeEach
void setUp() throws Exception {
MockitoAnnotations.openMocks(this)
.close();
provider = new OAuthTokenProvider(oAuthClient);
}

@Test
void testGetTokenReturnsAuthorizationHeaderValueFromOAuthClient() {
Mockito.when(oAuthClient.getToken())
.thenReturn(token);
Mockito.when(token.getAuthorizationHeaderValue())
.thenReturn("Bearer abc123");

String result = provider.getToken(connectionContext)
.block();

Assertions.assertEquals("Bearer abc123", result);
Mockito.verify(oAuthClient)
.getToken();
}
}
Loading
Loading