Skip to content

Commit 1d63342

Browse files
committed
Refactor TokenFactoryTest
BUG: XSBUG-2777
1 parent f623fe9 commit 1d63342

File tree

2 files changed

+84
-47
lines changed

2 files changed

+84
-47
lines changed

com.sap.cloud.lm.sl.cf.client/src/main/java/com/sap/cloud/lm/sl/cf/client/util/TokenProperties.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class TokenProperties {
1414
private String userName;
1515
private String userId;
1616

17-
protected TokenProperties(String clientId, String userName, String userId) {
17+
public TokenProperties(String clientId, String userId, String userName) {
1818
this.clientId = clientId;
1919
this.userName = userName;
2020
this.userId = userId;
@@ -36,7 +36,7 @@ public static TokenProperties fromToken(OAuth2AccessToken token) {
3636
String clientId = (String) getTokenProperty(token, CLIENT_ID_KEY);
3737
String userName = (String) getTokenProperty(token, USER_NAME_KEY);
3838
String userId = (String) getTokenProperty(token, USER_ID_KEY);
39-
return new TokenProperties(clientId, userName, userId);
39+
return new TokenProperties(clientId, userId, userName);
4040
}
4141

4242
@SuppressWarnings("unchecked")
Lines changed: 82 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,109 @@
11
package com.sap.cloud.lm.sl.cf.client.util;
22

33
import static org.junit.Assert.assertEquals;
4-
import static org.junit.Assert.assertTrue;
54

65
import java.util.Arrays;
7-
import java.util.Base64;
86
import java.util.UUID;
97

108
import org.junit.Test;
9+
import org.junit.experimental.runners.Enclosed;
1110
import org.junit.runner.RunWith;
1211
import org.junit.runners.Parameterized;
1312
import org.junit.runners.Parameterized.Parameters;
1413
import org.springframework.security.oauth2.common.OAuth2AccessToken;
1514

16-
@RunWith(Parameterized.class)
15+
@RunWith(Enclosed.class)
1716
public class TokenFactoryTest {
1817

19-
private static final String USER_NAME = "test-user";
20-
private static final String CLIENT_ID = "test-cliend-id";
21-
private static final String SAMPLE_TOKEN = "bearer eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI2MTkyM2FkYi1iYjViLTQ4NTktODIzNy0yM2YxNzg5ZTJmOTAiLCJzdWIiOiIxNTUxODQiLCJzY29wZSI6WyJjbG91ZF9jb250cm9sbGVyLnJlYWQiLCJjbG91ZF9jb250cm9sbGVyLndyaXRlIiwiY2xvdWRfY29udHJvbGxlci5hZG1pbiIsInVhYS51c2VyIl0sImNsaWVudF9pZCI6ImNmIiwiY2lkIjoiY2YiLCJhenAiOiJjZiIsImdyYW50X3R5cGUiOiJwYXNzd29yZCIsInVzZXJfaWQiOiIxNTUxODQiLCJ1c2VyX25hbWUiOiJYU01BU1RFUiIsImVtYWlsIjoiWFNNQVNURVJAdW5rbm93biIsImZhbWlseV9uYW1lIjoiWFNNQVNURVIiLCJpYXQiOjE0NDc3NDUzMjgsImV4cCI6MTQ0Nzc4ODUyOCwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3VhYS9vYXV0aC90b2tlbiIsInppZCI6InVhYSIsImF1ZCI6WyJjbG91ZF9jb250cm9sbGVyIiwiY2YiLCJ1YWEiXX0.P9XJTA4AV5aHS_ozw5WZXgIPc3M9Q_-1oKc1tLDEC5lkx1vNZjd5ozGaZs8UvgECJ_sTY_ZL2izDAKc3ew8hv9y6i6O3V-BxAs9pxkAIo2GPVmHzZQg8t6iG6c-iz1JnMan9nnbjFmMve5qjl9dgoCat-VaWfIW7TRagQ05dNO8DXJkQiiRioQ5kzoxQV4jUgxk5tczix-s8VQfqobW472A4t087DnaCYOOdz9MF8WLoffWRX8BkYJnBgVJ0kcWPZwMuB9BBPC4Les2NiZaKpLDahPrmp340izGg9pUhUsjPbllAph5odhMDb1Lc8_Q-yKiEt-DwZ72-VkCZE-MPjQ";
22-
23-
@Parameters
24-
public static Iterable<Object[]> data() {
25-
return Arrays.asList(new Object[][] {
26-
// @formatter:off
27-
{ "", "", },
28-
{ USER_NAME, "", },
29-
{ "", CLIENT_ID, },
30-
{ USER_NAME, CLIENT_ID, }
31-
// @formatter:on
32-
});
33-
}
18+
@RunWith(Parameterized.class)
19+
public static class DummyTokenFactoryTest {
20+
21+
@Parameters
22+
public static Iterable<Object[]> getParameters() {
23+
return Arrays.asList(new Object[][] {
24+
// @formatter:off
25+
{ "barney", "swarlz", },
26+
{ "", "swarlz", },
27+
{ "barney", "", },
28+
{ "", "", },
29+
// @formatter:on
30+
});
31+
}
32+
33+
private String userName;
34+
private String clientId;
3435

35-
private String userName;
36-
private String clientId;
36+
private TokenFactory tokenFactory = new TokenFactory();
37+
38+
public DummyTokenFactoryTest(String userName, String clientId) {
39+
this.userName = userName;
40+
this.clientId = clientId;
41+
}
42+
43+
@Test
44+
public void testCreateDummyToken() {
45+
OAuth2AccessToken token = tokenFactory.createDummyToken(userName, clientId);
46+
validateToken(token, new TokenProperties(clientId, new UUID(0, 0).toString(), userName));
47+
}
3748

38-
public TokenFactoryTest(String userName, String clientId) {
39-
this.userName = userName;
40-
this.clientId = clientId;
4149
}
4250

43-
@Test
44-
public void testCreateToken() {
45-
TokenFactory tokenFactory = new TokenFactory();
46-
OAuth2AccessToken token = null;
47-
if (userName.equals("") && clientId.equals("")) {
48-
token = tokenFactory.createToken(SAMPLE_TOKEN);
49-
assertToken(token, "XSMASTER", "cf", "155184");
50-
} else {
51-
token = tokenFactory.createDummyToken(userName, clientId);
52-
assertToken(token, userName, clientId, new UUID(0, 0).toString());
51+
@RunWith(Parameterized.class)
52+
public static class OauthTokenFactoryTest {
53+
54+
@Parameters
55+
public static Iterable<Object[]> getParameters() {
56+
return Arrays.asList(new Object[][] {
57+
// @formatter:off
58+
// (0) Valid token:
59+
{
60+
"eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI2MTkyM2FkYi1iYjViLTQ4NTktODIzNy0yM2YxNzg5ZTJmOTAiLCJzdWIiOiIxNTUxODQiLCJzY29wZSI6WyJjbG91ZF9jb250cm9sbGVyLnJlYWQiLCJjbG91ZF9jb250cm9sbGVyLndyaXRlIiwiY2xvdWRfY29udHJvbGxlci5hZG1pbiIsInVhYS51c2VyIl0sImNsaWVudF9pZCI6ImNmIiwiY2lkIjoiY2YiLCJhenAiOiJjZiIsImdyYW50X3R5cGUiOiJwYXNzd29yZCIsInVzZXJfaWQiOiIxNTUxODQiLCJ1c2VyX25hbWUiOiJYU01BU1RFUiIsImVtYWlsIjoiWFNNQVNURVJAdW5rbm93biIsImZhbWlseV9uYW1lIjoiWFNNQVNURVIiLCJpYXQiOjE0NDc3NDUzMjgsImV4cCI6MTQ0Nzc4ODUyOCwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3VhYS9vYXV0aC90b2tlbiIsInppZCI6InVhYSIsImF1ZCI6WyJjbG91ZF9jb250cm9sbGVyIiwiY2YiLCJ1YWEiXX0.P9XJTA4AV5aHS_ozw5WZXgIPc3M9Q_-1oKc1tLDEC5lkx1vNZjd5ozGaZs8UvgECJ_sTY_ZL2izDAKc3ew8hv9y6i6O3V-BxAs9pxkAIo2GPVmHzZQg8t6iG6c-iz1JnMan9nnbjFmMve5qjl9dgoCat-VaWfIW7TRagQ05dNO8DXJkQiiRioQ5kzoxQV4jUgxk5tczix-s8VQfqobW472A4t087DnaCYOOdz9MF8WLoffWRX8BkYJnBgVJ0kcWPZwMuB9BBPC4Les2NiZaKpLDahPrmp340izGg9pUhUsjPbllAph5odhMDb1Lc8_Q-yKiEt-DwZ72-VkCZE-MPjQ",
61+
new TokenProperties("cf", "155184", "XSMASTER"),
62+
},
63+
// (1) Valid token, the body of which cannot be parsed with the standard base 64 decoder (a base 64 URL decoder must be used for this one):
64+
{
65+
"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzZmEyMGRjMzAwY2Y0ZDg2ODU4NWVjYzFhZGQyOWJlNyIsImV4dF9hdHRyIjp7ImVuaGFuY2VyIjoiWFNVQUEifSwic3ViIjoiMTQxMzIxMzI3Iiwic2NvcGUiOlsiY2xvdWRfY29udHJvbGxlci5yZWFkIiwiY2xvdWRfY29udHJvbGxlci53cml0ZSIsIm9wZW5pZCIsInhzX3VzZXIucmVhZCIsImNsb3VkX2NvbnRyb2xsZXIuYWRtaW4iLCJ1YWEudXNlciJdLCJjbGllbnRfaWQiOiJjZiIsImNpZCI6ImNmIiwiYXpwIjoiY2YiLCJyZXZvY2FibGUiOnRydWUsImdyYW50X3R5cGUiOiJwYXNzd29yZCIsInVzZXJfaWQiOiIxNDEzMjEzMjciLCJvcmlnaW4iOiJ1YWEiLCJ1c2VyX25hbWUiOiJYU0FfQURNSU4iLCJlbWFpbCI6IlhTQV9BRE1JTkB1bmtub3duIiwicmV2X3NpZyI6ImU2MDQyZGFhIiwiaWF0IjoxNTIxMzgwNjI1LCJleHAiOjE1MjE0MjM4MjUsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC91YWEvb2F1dGgvdG9rZW4iLCJ6aWQiOiJ1YWEiLCJoZGIubmFtZWR1c2VyLnNhbWwiOiI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz48c2FtbDI6QXNzZXJ0aW9uIHhtbG5zOnNhbWwyPVwidXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvblwiIElEPVwiX2Q5YjgxNWQ1LTNlMTYtNDU1Mi1iMjQwLTAyNmE2OGUwZTMzMlwiIElzc3VlSW5zdGFudD1cIjIwMTgtMDMtMTVUMTY6MTE6MjkuNzQxWlwiIFZlcnNpb249XCIyLjBcIj48c2FtbDI6SXNzdWVyPkNBRC1zYW1sPC9zYW1sMjpJc3N1ZXI-PGRzOlNpZ25hdHVyZSB4bWxuczpkcz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNcIj48ZHM6U2lnbmVkSW5mbz48ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biNcIi8-PGRzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjcnNhLXNoYTFcIi8-PGRzOlJlZmVyZW5jZSBVUkk9XCIjX2Q5YjgxNWQ1LTNlMTYtNDU1Mi1iMjQwLTAyNmE2OGUwZTMzMlwiPjxkczpUcmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI2VudmVsb3BlZC1zaWduYXR1cmVcIi8-PGRzOlRyYW5zZm9ybSBBbGdvcml0aG09XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biNcIi8-PC9kczpUcmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3NoYTFcIi8-PGRzOkRpZ2VzdFZhbHVlPlFKVG1obnJXMDY3Z3VDbWJmMTdXc1lYaCtKUT08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWU-TzhxaDZZaWluUkhldUZkZk1qVkg0VVBlTzc5MWs2bmRrSU9wN2JQRkhnQVB0MWVpeGFGN2dTYnFMV2FmV2d5OHIrSUhlZTZmZXZjQkdMSzRMUGxPSjRmcTR3NFNsWVlzVDZBWGRKMyswZUxEQnR2QjRYN3B0MDRYMVR2UThUelVWSlovQmdLQ2huSEl4RlRocGJ6VXRINmpzQ2d1anoyaW1yenB0S083Z0JnRWplNUF6Lzg4OUJCZ29mZTRiTytJRk9hU3h2VnlKZWZJTDZSS1AzNVd6MFpOdzBqdEVNemtScEh3eFpKcVJtRjJ3Ym11YUk2ZDBNMXVVR09MVjhzUVkvdjZLbUw4U0JjZmZNZ2hDaUNFZDd6VHZqa2ZnVzBDU2xZVzFSV0ZvOURLaUFqeEt6NUtnMDliaCtZOENOaGViNFp4d09hNCtjd2d0eWVQUy9aWUZBPT08L2RzOlNpZ25hdHVyZVZhbHVlPjwvZHM6U2lnbmF0dXJlPjxzYW1sMjpTdWJqZWN0PjxzYW1sMjpOYW1lSUQgRm9ybWF0PVwidXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6dW5zcGVjaWZpZWRcIj5YU0FfQURNSU48L3NhbWwyOk5hbWVJRD48c2FtbDI6U3ViamVjdENvbmZpcm1hdGlvbiBNZXRob2Q9XCJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6Y206YmVhcmVyXCI-PHNhbWwyOlN1YmplY3RDb25maXJtYXRpb25EYXRhIE5vdE9uT3JBZnRlcj1cIjIwMTgtMDMtMTVUMjA6MTY6MjkuNzQxWlwiLz48L3NhbWwyOlN1YmplY3RDb25maXJtYXRpb24-PC9zYW1sMjpTdWJqZWN0PjxzYW1sMjpDb25kaXRpb25zIE5vdEJlZm9yZT1cIjIwMTgtMDMtMTVUMTY6MTE6MjkuNzQxWlwiIE5vdE9uT3JBZnRlcj1cIjIwMTgtMDMtMTVUMjA6MTY6MjkuNzQxWlwiLz48c2FtbDI6QXV0aG5TdGF0ZW1lbnQgQXV0aG5JbnN0YW50PVwiMjAxOC0wMy0xNVQxNjoxNjoyOS43NDFaXCIgU2Vzc2lvbk5vdE9uT3JBZnRlcj1cIjIwMTgtMDMtMTVUMTY6MjE6MjkuNzQxWlwiPjxzYW1sMjpBdXRobkNvbnRleHQ-PHNhbWwyOkF1dGhuQ29udGV4dENsYXNzUmVmPnVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlBhc3N3b3JkPC9zYW1sMjpBdXRobkNvbnRleHRDbGFzc1JlZj48L3NhbWwyOkF1dGhuQ29udGV4dD48L3NhbWwyOkF1dGhuU3RhdGVtZW50Pjwvc2FtbDI6QXNzZXJ0aW9uPiIsImF1ZCI6WyJjbG91ZF9jb250cm9sbGVyIiwiY2YiLCJ1YWEiLCJ4c191c2VyIiwib3BlbmlkIl19.oCKdh2rOQ0CjlBV7D-aSsB2JQ20JMRyT4zmHc2iJDwAviCHvFx1_zdWHtH-XO67D78ElLriks3fKBnbcsLU_OlesF_1HbdE8IcQp0Wsmtc-ZvYQaGaEDkCC8iMx0ibGGEdWa264eejo2xbsNh0enDtL9SQZAfZkfDnhywpsrtJEQTgziQKFxR-AAzRQAX9H5esxI4KqWIMTveTp9rne-XH3bA70CCRH_3xiOvVaQ06tGjap6zkZTHrqFUXZvnTqK1fiJOzjeYLcyBYvd4C6gyiRyYOjyaMZlbj8SK3wZItQpCwPO40Yn7E5aOZdZpapEZ6qZ4rlptnT1WSx5-ZekYA",
66+
new TokenProperties("cf", "141321327", "XSA_ADMIN"),
67+
},
68+
// (2) Token that contains only the user's name:
69+
{
70+
"eyJhbGciOiJSUzI1NiJ9.eyJ1c2VyX25hbWUiOiJ0ZXN0LXVzZXIifQ==.P9XJTA4AV5aHS_ozw5WZXgIPc3M9Q_-1oKc1tLDEC5lkx1vNZjd5ozGaZs8UvgECJ_sTY_ZL2izDAKc3ew8hv9y6i6O3V-BxAs9pxkAIo2GPVmHzZQg8t6iG6c-iz1JnMan9nnbjFmMve5qjl9dgoCat-VaWfIW7TRagQ05dNO8DXJkQiiRioQ5kzoxQV4jUgxk5tczix-s8VQfqobW472A4t087DnaCYOOdz9MF8WLoffWRX8BkYJnBgVJ0kcWPZwMuB9BBPC4Les2NiZaKpLDahPrmp340izGg9pUhUsjPbllAph5odhMDb1Lc8_Q-yKiEt-DwZ72-VkCZE-MPjQ",
71+
null,
72+
},
73+
// (3) Token without a signature:
74+
{
75+
"eyJhbGciOiJSUzI1NiJ9.eyJ1c2VyX25hbWUiOiJ0ZXN0LXVzZXIifQ==",
76+
null,
77+
},
78+
// @formatter:on
79+
});
80+
}
81+
82+
private final String tokenString;
83+
private final TokenProperties expectedTokenProperties;
84+
85+
private TokenFactory tokenFactory = new TokenFactory();
86+
87+
public OauthTokenFactoryTest(String tokenString, TokenProperties expectedTokenProperties) {
88+
this.tokenString = tokenString;
89+
this.expectedTokenProperties = expectedTokenProperties;
90+
}
91+
92+
@Test
93+
public void testCreateToken() {
94+
OAuth2AccessToken token = tokenFactory.createToken(tokenString);
95+
if (expectedTokenProperties != null) {
96+
validateToken(token, expectedTokenProperties);
97+
}
5398
}
5499

55-
token = tokenFactory.createToken(getTestToken());
56-
assertTrue(token == null);
57100
}
58101

59-
private void assertToken(OAuth2AccessToken token, String userName, String clientId, String uuid) {
102+
private static void validateToken(OAuth2AccessToken token, TokenProperties expectedTokenProperties) {
60103
TokenProperties tokenProperties = TokenProperties.fromToken(token);
61-
assertEquals(clientId, tokenProperties.getClientId());
62-
assertEquals(userName, tokenProperties.getUserName());
63-
assertEquals(uuid, tokenProperties.getUserId());
104+
assertEquals(expectedTokenProperties.getClientId(), tokenProperties.getClientId());
105+
assertEquals(expectedTokenProperties.getUserName(), tokenProperties.getUserName());
106+
assertEquals(expectedTokenProperties.getUserId(), tokenProperties.getUserId());
64107
}
65108

66-
private String getTestToken() {
67-
String testTokenJson = "{\"user_name\":\"test-user\"}";
68-
byte[] encodedData = Base64.getEncoder()
69-
.encode(testTokenJson.getBytes());
70-
return "bearer test." + new String(encodedData) + ".test";
71-
}
72109
}

0 commit comments

Comments
 (0)