refining some tests, preparing test for session service

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2024-09-10 20:53:03 +02:00
parent caa9f07d79
commit f600040c0e
16 changed files with 150 additions and 65 deletions

View File

@@ -21,15 +21,15 @@ test {
useJUnitPlatform()
}
task jarTest (type: Jar) {
task jarTests (type: Jar) {
from sourceSets.test.output
archiveClassifier = 'test'
}
configurations {
testOutput
testBundle
}
artifacts {
testOutput jarTest
testBundle jarTests
}

View File

@@ -1,11 +0,0 @@
/* © SRSoftware 2024 */
package de.srsoftware.oidc.api;
public interface PasswordHasher<T> {
public String hash(String password, String salt);
public String salt(String hashedPassword);
public default boolean matches(String plaintextPassword, String hashedPassword) {
return hash(plaintextPassword, salt(hashedPassword)).equals(hashedPassword);
}
}

View File

@@ -28,7 +28,7 @@ public interface UserService {
public Set<User> find(String idOrEmail);
public Optional<User> load(String id);
public Optional<User> load(String username, String password);
public boolean passwordMatches(String password, String hashedPassword);
public boolean passwordMatches(String plaintextPassword, User user);
public <T extends UserService> T save(User user);
public <T extends UserService> T updatePassword(User user, String plaintextPassword);
}

View File

@@ -0,0 +1,4 @@
/* © SRSoftware 2024 */
package de.srsoftware.oidc.api;
public class SessionServiceTest {}

View File

@@ -2,9 +2,13 @@
package de.srsoftware.oidc.api;
import static de.srsoftware.oidc.api.data.Permission.*;
import static org.junit.jupiter.api.Assertions.assertTrue;
import de.srsoftware.oidc.api.data.Permission;
import de.srsoftware.oidc.api.data.User;
import de.srsoftware.utils.PasswordHasher;
import de.srsoftware.utils.UuidHasher;
import java.security.NoSuchAlgorithmException;
import java.util.UUID;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -21,8 +25,17 @@ public abstract class UserServiceTest {
protected abstract UserService userService();
private PasswordHasher<String> hasher = null;
protected abstract PasswordHasher<String> hasher();
protected PasswordHasher<String> hasher() {
if (hasher == null) try {
hasher = new UuidHasher();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
return hasher;
}
@Test
@@ -40,7 +53,7 @@ public abstract class UserServiceTest {
var users = userService().list();
Assertions.assertEquals(1, users.size());
var saved = users.get(0);
Assertions.assertTrue(hasher().matches(PASSWORD, saved.hashedPassword()));
assertTrue(hasher().matches(PASSWORD, saved.hashedPassword()));
Assertions.assertEquals(firstUser, saved);
}
@@ -55,12 +68,12 @@ public abstract class UserServiceTest {
var users = userService().list();
Assertions.assertEquals(1, users.size());
var saved = users.get(0);
Assertions.assertTrue(hasher().matches(PASSWORD, saved.hashedPassword()));
assertTrue(hasher().matches(PASSWORD, saved.hashedPassword()));
Assertions.assertEquals(newUser, saved);
Assertions.assertFalse(saved.hasPermission(Permission.MANAGE_USERS));
Assertions.assertFalse(saved.hasPermission(Permission.MANAGE_SMTP));
Assertions.assertTrue(saved.hasPermission(MANAGE_CLIENTS));
Assertions.assertTrue(saved.hasPermission(MANAGE_PERMISSIONS));
assertTrue(saved.hasPermission(MANAGE_CLIENTS));
assertTrue(saved.hasPermission(MANAGE_PERMISSIONS));
}
@Test
@@ -72,7 +85,7 @@ public abstract class UserServiceTest {
newUser.add(MANAGE_PERMISSIONS);
userService().save(newUser);
var saved = userService().load(uuid);
Assertions.assertTrue(saved.isPresent());
assertTrue(saved.isPresent());
Assertions.assertEquals(newUser, saved.get());
}
@@ -111,17 +124,22 @@ public abstract class UserServiceTest {
userService().init(firstUser);
var loaded = userService().load(uuid);
Assertions.assertTrue(loaded.isPresent());
assertTrue(loaded.isPresent());
var oldPass = loaded.get().hashedPassword();
Assertions.assertTrue(hasher().matches(PASSWORD, oldPass));
assertTrue(hasher().matches(PASSWORD, oldPass));
var newPass = hasher().hash(PASSWORD2, uuid);
userService().save(firstUser.hashedPassword(newPass));
loaded = userService().load(uuid);
Assertions.assertTrue(loaded.isPresent());
assertTrue(loaded.isPresent());
newPass = loaded.get().hashedPassword();
Assertions.assertTrue(hasher().matches(PASSWORD2, newPass));
assertTrue(hasher().matches(PASSWORD2, newPass));
userService().updatePassword(firstUser, PASSWORD);
loaded = userService().load(uuid);
assertTrue(loaded.isPresent());
assertTrue(userService().passwordMatches(PASSWORD, loaded.get()));
}
@Test
@@ -132,13 +150,13 @@ public abstract class UserServiceTest {
userService().init(firstUser);
var loaded = userService().load(uuid);
Assertions.assertTrue(loaded.isPresent());
assertTrue(loaded.isPresent());
Assertions.assertEquals(USERNAME, loaded.get().username());
userService().save(firstUser.username(USERNAME2));
loaded = userService().load(uuid);
Assertions.assertTrue(loaded.isPresent());
assertTrue(loaded.isPresent());
Assertions.assertEquals(USERNAME2, loaded.get().username());
}
@@ -150,13 +168,13 @@ public abstract class UserServiceTest {
userService().init(firstUser);
var loaded = userService().load(uuid);
Assertions.assertTrue(loaded.isPresent());
assertTrue(loaded.isPresent());
Assertions.assertEquals(NAME, loaded.get().realName());
userService().save(firstUser.realName(NAME2));
loaded = userService().load(uuid);
Assertions.assertTrue(loaded.isPresent());
assertTrue(loaded.isPresent());
Assertions.assertEquals(NAME2, loaded.get().realName());
}
@@ -168,13 +186,13 @@ public abstract class UserServiceTest {
userService().init(firstUser);
var loaded = userService().load(uuid);
Assertions.assertTrue(loaded.isPresent());
assertTrue(loaded.isPresent());
Assertions.assertEquals(NAME, loaded.get().realName());
userService().save(firstUser.email(EMAIL2));
loaded = userService().load(uuid);
Assertions.assertTrue(loaded.isPresent());
assertTrue(loaded.isPresent());
Assertions.assertEquals(EMAIL2, loaded.get().email());
}
@@ -186,27 +204,27 @@ public abstract class UserServiceTest {
userService().init(firstUser);
var opt = userService().load(uuid);
Assertions.assertTrue(opt.isPresent());
assertTrue(opt.isPresent());
var loaded = opt.get();
for (var permission : Permission.values()) Assertions.assertFalse(loaded.hasPermission(permission));
userService().save(loaded.add(MANAGE_CLIENTS, MANAGE_PERMISSIONS));
opt = userService().load(uuid);
Assertions.assertTrue(opt.isPresent());
assertTrue(opt.isPresent());
loaded = opt.get();
Assertions.assertTrue(loaded.hasPermission(MANAGE_CLIENTS));
Assertions.assertTrue(loaded.hasPermission(MANAGE_PERMISSIONS));
assertTrue(loaded.hasPermission(MANAGE_CLIENTS));
assertTrue(loaded.hasPermission(MANAGE_PERMISSIONS));
Assertions.assertFalse(loaded.hasPermission(MANAGE_SMTP));
Assertions.assertFalse(loaded.hasPermission(MANAGE_USERS));
userService().save(loaded.add(MANAGE_SMTP, MANAGE_USERS).drop(MANAGE_CLIENTS, MANAGE_PERMISSIONS));
opt = userService().load(uuid);
Assertions.assertTrue(opt.isPresent());
assertTrue(opt.isPresent());
loaded = opt.get();
Assertions.assertFalse(loaded.hasPermission(MANAGE_CLIENTS));
Assertions.assertFalse(loaded.hasPermission(MANAGE_PERMISSIONS));
Assertions.assertTrue(loaded.hasPermission(MANAGE_SMTP));
Assertions.assertTrue(loaded.hasPermission(MANAGE_USERS));
assertTrue(loaded.hasPermission(MANAGE_SMTP));
assertTrue(loaded.hasPermission(MANAGE_USERS));
}
}