From f94dc90e5900d8a57261e45e583dcf2822ad437a Mon Sep 17 00:00:00 2001
From: Martin Weise <martin.weise@tuwien.ac.at>
Date: Tue, 29 Aug 2023 16:08:35 +0200
Subject: [PATCH] Fixed the tests

---
 .../at/tuwien/entities/database/Database.java | 22 ++++++
 .../at/tuwien/entities/database/License.java  |  2 +-
 .../java/at/tuwien/mapper/DatabaseMapper.java |  2 +-
 .../at/tuwien/endpoints/AccessEndpoint.java   |  2 +-
 .../tuwien/handlers/ApiExceptionHandler.java  | 12 ++++
 .../config/KeycloakContainerConfig.java       | 71 -------------------
 .../java/at/tuwien/config/MariaDbConfig.java  | 12 ++--
 .../endpoints/AccessEndpointUnitTest.java     | 26 +++----
 .../endpoints/ContainerEndpointUnitTest.java  |  8 +--
 .../IdentifierEndpointIntegrationTest.java    | 16 ++---
 .../endpoints/IdentifierEndpointUnitTest.java |  4 +-
 .../endpoints/ImageEndpointUnitTest.java      | 14 ++--
 .../MaintenanceEndpointUnitTest.java          | 12 ++--
 .../MetadataEndpointComponentTest.java        |  4 ++
 .../endpoints/OntologyEndpointUnitTest.java   | 16 ++---
 .../endpoints/QueryEndpointUnitTest.java      |  4 +-
 .../endpoints/SemanticsEndpointUnitTest.java  | 16 ++---
 .../TableColumnEndpointUnitTest.java          | 10 +--
 .../TableEndpointIntegrationTest.java         |  8 ++-
 .../endpoints/TableEndpointUnitTest.java      | 26 +++----
 .../endpoints/UserEndpointUnitTest.java       | 28 ++++----
 .../at/tuwien/mapper/DatabaseMapperTest.java  |  9 ++-
 .../DatabaseRepositoryUnitTest.java           |  5 ++
 .../ViewIdxRepositoryIntegrationTest.java     |  8 ++-
 .../ViewRepositoryIntegrationTest.java        |  5 ++
 .../service/AccessServiceIntegrationTest.java |  8 ++-
 ...aCiteIdentifierServiceIntegrationTest.java |  7 +-
 .../DataCiteIdentifierServiceUnitTest.java    |  4 ++
 .../service/DatabaseServiceComponentTest.java |  4 +-
 .../DatabaseServiceIntegrationTest.java       | 47 +++++-------
 .../IdentifierServiceIntegrationTest.java     | 13 ++--
 .../LicenseServiceIntegrationTest.java        |  4 +-
 .../MessageQueueServiceIntegrationTest.java   |  4 +-
 .../service/MessageQueueServiceUnitTest.java  |  3 +
 .../MetadataServiceIntegrationTest.java       |  4 ++
 .../service/QueryServiceIntegrationTest.java  | 30 ++------
 .../QueryStoreServiceIntegrationTest.java     |  8 ++-
 .../StoreServiceIntegrationModifyTest.java    |  9 ++-
 .../TableServiceIntegrationReadTest.java      |  8 ++-
 .../TableServiceIntegrationWriteTest.java     |  9 ++-
 .../service/UserServiceIntegrationTest.java   | 21 ++++--
 .../tuwien/service/UserServiceUnitTest.java   |  4 ++
 .../service/ViewServiceIntegrationTest.java   |  4 ++
 ...ViewServicePersistenceIntegrationTest.java |  4 ++
 .../java/at/tuwien/service/AccessService.java |  8 +--
 .../tuwien/service/MessageQueueService.java   |  4 +-
 .../service/impl/AccessServiceImpl.java       |  7 +-
 .../service/impl/MariaDbServiceImpl.java      |  2 +-
 .../service/impl/RabbitMqServiceImpl.java     | 29 +++++---
 .../tuwien/service/impl/StoreServiceImpl.java |  7 +-
 .../main/java/at/tuwien/test/BaseTest.java    | 37 ++++++++--
 .../tuwien/app/SearchSyncComponentTest.java   |  4 --
 52 files changed, 346 insertions(+), 289 deletions(-)
 delete mode 100644 dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/KeycloakContainerConfig.java

diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java
index d9e1b007f3..60e5bb57e5 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java
@@ -3,6 +3,7 @@ package at.tuwien.entities.database;
 import at.tuwien.entities.container.Container;
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.entities.identifier.Identifier;
+import at.tuwien.entities.user.User;
 import jakarta.persistence.CascadeType;
 import jakarta.persistence.*;
 import jakarta.persistence.NamedQueries;
@@ -46,14 +47,28 @@ public class Database implements Serializable {
     @Column(updatable = false, nullable = false)
     private Long id;
 
+    @ToString.Exclude
     @JdbcTypeCode(java.sql.Types.VARCHAR)
     @Column(name = "created_by", columnDefinition = "VARCHAR(36)")
     private UUID createdBy;
 
+    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
+    @JoinColumns({
+            @JoinColumn(name = "created_by", referencedColumnName = "ID", insertable = false, updatable = false)
+    })
+    private User creator;
+
+    @ToString.Exclude
     @JdbcTypeCode(java.sql.Types.VARCHAR)
     @Column(name = "owned_by", columnDefinition = "VARCHAR(36)")
     private UUID ownedBy;
 
+    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
+    @JoinColumns({
+            @JoinColumn(name = "owned_by", referencedColumnName = "ID", insertable = false, updatable = false)
+    })
+    private User owner;
+
     @Column(nullable = false)
     private Long cid;
 
@@ -76,10 +91,17 @@ public class Database implements Serializable {
     @Column(columnDefinition = "TEXT")
     private String description;
 
+    @ToString.Exclude
     @JdbcTypeCode(java.sql.Types.VARCHAR)
     @Column(name = "contact_person", columnDefinition = "VARCHAR(36)")
     private UUID contactPerson;
 
+    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
+    @JoinColumns({
+            @JoinColumn(name = "contact_person", referencedColumnName = "ID", updatable = false, insertable = false)
+    })
+    private User contact;
+
     @ToString.Exclude
     @org.springframework.data.annotation.Transient
     @OneToOne(fetch = FetchType.LAZY)
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/License.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/License.java
index ef7d0d33a5..8591b36ea4 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/License.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/License.java
@@ -13,7 +13,7 @@ import jakarta.persistence.*;
 @AllArgsConstructor
 @NoArgsConstructor
 @EntityListeners(AuditingEntityListener.class)
-@Table(name = "mdb_licenses", uniqueConstraints = {
+@jakarta.persistence.Table(name = "mdb_licenses", uniqueConstraints = {
         @UniqueConstraint(columnNames = {"uri"})
 })
 public class License {
diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/DatabaseMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/DatabaseMapper.java
index 3bf6702da7..a889b2ee10 100644
--- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/DatabaseMapper.java
+++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/DatabaseMapper.java
@@ -26,7 +26,7 @@ import java.util.Locale;
 import java.util.UUID;
 import java.util.regex.Pattern;
 
-@Mapper(componentModel = "spring", uses = {ContainerMapper.class, UserMapper.class, ImageMapper.class/*, IdentifierMapper.class*/}, imports = {RandomStringUtils.class})
+@Mapper(componentModel = "spring", uses = {ContainerMapper.class, UserMapper.class, ImageMapper.class, UserMapper.class/*, IdentifierMapper.class*/}, imports = {RandomStringUtils.class})
 public interface DatabaseMapper {
 
     org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(DatabaseMapper.class);
diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java
index bb0c34f05a..90939ede92 100644
--- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java
+++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java
@@ -77,7 +77,7 @@ public class AccessEndpoint {
             accessService.find(databaseId, accessDto.getUserId());
             log.error("Failed to give access to user with id {}: already has access", accessDto.getUserId());
             throw new NotAllowedException("Failed to give access to user with id " + accessDto.getUserId() + ": already has access");
-        } catch (NotAllowedException e) {
+        } catch (AccessDeniedException e) {
             /* ignore */
         }
         accessService.create(databaseId, accessDto);
diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java
index 97db524146..b792981dfc 100644
--- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java
+++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java
@@ -39,6 +39,18 @@ public class ApiExceptionHandler extends ResponseEntityExceptionHandler {
         return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
     }
 
+    @Hidden
+    @ResponseStatus(HttpStatus.LOCKED)
+    @ExceptionHandler(KeycloakRemoteException.class)
+    public ResponseEntity<ApiErrorDto> handle(KeycloakRemoteException e, WebRequest request) {
+        final ApiErrorDto response = ApiErrorDto.builder()
+                .status(HttpStatus.LOCKED)
+                .message(e.getLocalizedMessage())
+                .code("error.metadata.keycloak")
+                .build();
+        return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
+    }
+
     @Hidden
     @ResponseStatus(HttpStatus.CONFLICT)
     @ExceptionHandler(ContainerAlreadyExistsException.class)
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/KeycloakContainerConfig.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/KeycloakContainerConfig.java
deleted file mode 100644
index 2a8e08d4a0..0000000000
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/KeycloakContainerConfig.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package at.tuwien.config;
-
-import at.tuwien.test.BaseTest;
-import dasniko.testcontainers.keycloak.KeycloakContainer;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.testcontainers.containers.MariaDBContainer;
-import org.testcontainers.images.PullPolicy;
-
-/**
- * This class configures the MariaDB container for the integration tests.
- */
-@Configuration
-public class KeycloakContainerConfig {
-
-    public static CustomKeycloakContainer getContainer() {
-        return CustomKeycloakContainer.getInstance();
-    }
-
-    @Bean
-    public CustomKeycloakContainer keycloakContainer() {
-        return getContainer();
-    }
-
-    /**
-     * This class represents the customized MariaDB container. It is a singleton to avoid the recreation of containers
-     * which can be very time-consuming.
-     */
-    public static class CustomKeycloakContainer extends KeycloakContainer {
-
-        private static CustomKeycloakContainer instance;
-
-        private boolean started = false;
-
-        public static synchronized CustomKeycloakContainer getInstance() {
-            if(instance == null) {
-                instance = new CustomKeycloakContainer("quay.io/keycloak/keycloak:21.0");
-                instance.withImagePullPolicy(PullPolicy.alwaysPull());
-                instance.addFixedExposedPort(BaseTest.CONTAINER_1_PORT, BaseTest.IMAGE_1_PORT);
-                instance.withAdminUsername("fda");
-                instance.withAdminPassword("fda");
-                instance.addFixedExposedPort(8080, 8080);
-                instance.withRealmImportFile("./dbrepo-realm.json");
-            }
-            return instance;
-        }
-
-        private CustomKeycloakContainer(String dockerImageName) {
-            super(dockerImageName);
-        }
-
-        @Override
-        protected void configure() {
-            super.configure();
-            this.addEnv("KC_HOSTNAME_STRICT_HTTPS", "false");
-        }
-
-        @Override
-        public synchronized void start() {
-            if(!started) {
-                super.start();
-                started = true;
-            }
-        }
-
-        @Override
-        public void stop() {
-            // do nothing, JVM handles shut down
-        }
-    }
-}
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java
index 36b2dfa62b..bc1ddbbb76 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/config/MariaDbConfig.java
@@ -7,7 +7,6 @@ import at.tuwien.entities.database.Database;
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.exception.QueryMalformedException;
 import at.tuwien.mapper.DatabaseMapper;
-import at.tuwien.mapper.DatabaseMapperImpl;
 import at.tuwien.querystore.Query;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -123,11 +122,10 @@ public class MariaDbConfig {
         log.debug("dropped database {}", database);
     }
 
-    public static void grantUserPermissions(Container container, Database database, String username) throws SQLException,
+    public void grantUserPermissions(Container container, Database database, String username) throws SQLException,
             QueryMalformedException {
         final String jdbc = "jdbc:mariadb://" + container.getHost() + ":" + container.getPort() + "/" + database.getInternalName();
         log.trace("connect to database {}", jdbc);
-        final DatabaseMapper databaseMapper = new DatabaseMapperImpl();
         try (Connection connection = DriverManager.getConnection(jdbc, container.getPrivilegedUsername(), container.getPrivilegedPassword())) {
             final PreparedStatement statement1 = databaseMapper.rawGrantUserAccessQuery(connection, username, AccessTypeDto.WRITE_ALL);
             statement1.executeUpdate();
@@ -157,11 +155,15 @@ public class MariaDbConfig {
         }
     }
 
+    public static String getPrivileges(String hostname, Integer port, String username, String password)
+            throws Exception {
+        return getPrivileges(hostname, port, null, username, password);
+    }
+
     public static String getPrivileges(String hostname, Integer port, String database, String username, String password)
             throws Exception {
-        final String jdbc = "jdbc:mariadb://" + hostname + ":" + port  + "/" + database;
+        final String jdbc = "jdbc:mariadb://" + hostname + ":" + port  + (database != null ? "/" + database : "");
         log.trace("connect to database {}", jdbc);
-        final List<String> usernames = new LinkedList<>();
         try (Connection connection = DriverManager.getConnection(jdbc, username, password)) {
             final String query = "SHOW GRANTS FOR `" + username + "`;";
             log.trace("prepare statement '{}'", query);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AccessEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AccessEndpointUnitTest.java
index 5dbc7b07d3..056ca320b7 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AccessEndpointUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/AccessEndpointUnitTest.java
@@ -57,7 +57,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest {
     public void create_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_create(DATABASE_1_ID, DATABASE_1, null, USER_2_ID, null);
         });
     }
@@ -67,7 +67,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest {
     public void create_noRoleNoAccess_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_create(DATABASE_1_ID, DATABASE_1, null, USER_4_ID, USER_4_PRINCIPAL);
         });
     }
@@ -91,7 +91,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest {
     public void find_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_find(DATABASE_1_ID, DATABASE_1, null, null, null);
         });
     }
@@ -101,7 +101,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest {
     public void find_hasRoleNoAccess_fails() {
 
         /* test */
-        assertThrows(NotAllowedException.class, () -> {
+        assertThrows(AccessDeniedException.class, () -> {
             generic_find(DATABASE_1_ID, DATABASE_1, null, USER_2_ID, USER_2_PRINCIPAL);
         });
     }
@@ -119,7 +119,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest {
     public void update_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_update(DATABASE_1_ID, DATABASE_1, null, USER_4_ID, null);
         });
     }
@@ -129,7 +129,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest {
     public void update_hasRoleNoAccess_fails() {
 
         /* test */
-        assertThrows(NotAllowedException.class, () -> {
+        assertThrows(AccessDeniedException.class, () -> {
             generic_update(DATABASE_1_ID, DATABASE_1, null, USER_4_ID, USER_1_PRINCIPAL);
         });
     }
@@ -139,7 +139,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest {
     public void update_noRoleNoAccess_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_update(DATABASE_1_ID, DATABASE_1, null, USER_4_ID, USER_4_PRINCIPAL);
         });
     }
@@ -163,7 +163,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest {
     public void revoke_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_revoke(DATABASE_1_ID, DATABASE_1_USER_1_WRITE_ALL_ACCESS, USER_2_ID, USER_1_PRINCIPAL);
         });
     }
@@ -173,7 +173,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest {
     public void revoke_noRoleNoAccess_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_revoke(DATABASE_1_ID, DATABASE_1_USER_1_WRITE_ALL_ACCESS, USER_2_ID, USER_4_PRINCIPAL);
         });
     }
@@ -214,7 +214,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest {
                     .thenReturn(access);
         } else {
             log.trace("mock no access for user with id {} for database with id {}", userId, databaseId);
-            doThrow(NotAllowedException.class)
+            doThrow(AccessDeniedException.class)
                     .when(accessService)
                     .find(databaseId, userId);
         }
@@ -237,7 +237,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest {
                     .thenReturn(access);
         } else {
             log.trace("mock no access for user with id {} for database with id {}", userId, databaseId);
-            doThrow(NotAllowedException.class)
+            doThrow(AccessDeniedException.class)
                     .when(accessService)
                     .find(databaseId, userId);
         }
@@ -269,7 +269,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest {
                     .thenReturn(access);
         } else {
             log.trace("mock no access for user with id {} for database with id {}", userId, databaseId);
-            doThrow(NotAllowedException.class)
+            doThrow(AccessDeniedException.class)
                     .when(accessService)
                     .find(databaseId, userId);
         }
@@ -291,7 +291,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest {
                     .thenReturn(access);
         } else {
             log.trace("mock no access for user with id {} for database with id {}", userId, databaseId);
-            doThrow(NotAllowedException.class)
+            doThrow(AccessDeniedException.class)
                     .when(accessService)
                     .find(databaseId, userId);
         }
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ContainerEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ContainerEndpointUnitTest.java
index 4c6d13f496..92cac31827 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ContainerEndpointUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ContainerEndpointUnitTest.java
@@ -74,7 +74,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
     public void delete_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             delete_generic(CONTAINER_1_ID, CONTAINER_1, null);
         });
     }
@@ -84,7 +84,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
     public void delete_noRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             delete_generic(CONTAINER_1_ID, CONTAINER_1, USER_4_PRINCIPAL);
         });
     }
@@ -131,7 +131,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
                 .build();
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             create_generic(request, null);
         });
     }
@@ -157,7 +157,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
                 .build();
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             create_generic(request, USER_4_PRINCIPAL);
         });
     }
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointIntegrationTest.java
index 880daf5d18..eb0a099bc0 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointIntegrationTest.java
@@ -42,6 +42,9 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest {
     @Autowired
     private IdentifierRepository identifierRepository;
 
+    @Autowired
+    private UserRepository userRepository;
+
     @Autowired
     private DatabaseRepository databaseRepository;
 
@@ -60,15 +63,10 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest {
     @BeforeEach
     public void beforeEach() {
         imageRepository.save(IMAGE_1);
+        userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4));
         licenseRepository.save(LICENSE_1);
-        containerRepository.save(CONTAINER_1_SIMPLE);
-        containerRepository.save(CONTAINER_2_SIMPLE);
-        containerRepository.save(CONTAINER_3_SIMPLE);
-        containerRepository.save(CONTAINER_4_SIMPLE);
-        databaseRepository.save(DATABASE_1_SIMPLE);
-        databaseRepository.save(DATABASE_2_SIMPLE);
-        databaseRepository.save(DATABASE_3_SIMPLE);
-        databaseRepository.save(DATABASE_4_SIMPLE);
+        containerRepository.saveAll(List.of(CONTAINER_1_SIMPLE, CONTAINER_2_SIMPLE, CONTAINER_3_SIMPLE, CONTAINER_4_SIMPLE));
+        databaseRepository.saveAll(List.of(DATABASE_1_SIMPLE, DATABASE_2_SIMPLE, DATABASE_3_SIMPLE, DATABASE_4_SIMPLE));
         TABLE_2.setColumns(TABLE_2_COLUMNS);
         tableRepository.save(TABLE_2);
     }
@@ -265,7 +263,7 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest {
     public void create_noRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             identifierEndpoint.create(IDENTIFIER_2_DTO_REQUEST, USER_4_PRINCIPAL);
         });
     }
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointUnitTest.java
index 8a50a2bbca..ca4dc48806 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/IdentifierEndpointUnitTest.java
@@ -166,7 +166,7 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest {
     public void create_anonymousDatabase_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_create(DATABASE_1_ID, DATABASE_1, null, IDENTIFIER_1_DTO_REQUEST, null, null, null);
         });
     }
@@ -202,7 +202,7 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest {
     public void create_anonymousQuery_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_create(DATABASE_2_ID, DATABASE_2, null, IDENTIFIER_2_DTO_REQUEST, IDENTIFIER_2, null, null);
         });
     }
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointUnitTest.java
index aba6c1953e..e017b10fad 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ImageEndpointUnitTest.java
@@ -78,7 +78,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
                 .build();
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             create_generic(request, null);
         });
     }
@@ -95,7 +95,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
                 .build();
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             create_generic(request, USER_1_PRINCIPAL);
         });
     }
@@ -112,7 +112,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
                 .build();
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             create_generic(request, USER_4_PRINCIPAL);
         });
     }
@@ -160,7 +160,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
     public void delete_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             delete_generic(IMAGE_1_ID, IMAGE_1, null);
         });
     }
@@ -170,7 +170,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
     public void delete_noRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             delete_generic(IMAGE_1_ID, IMAGE_1, USER_1_PRINCIPAL);
         });
     }
@@ -199,7 +199,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
                 .build();
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             modify_generic(IMAGE_1_ID, IMAGE_1, request, null);
         });
     }
@@ -215,7 +215,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
                 .build();
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             modify_generic(IMAGE_1_ID, IMAGE_1, request, USER_4_PRINCIPAL);
         });
     }
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MaintenanceEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MaintenanceEndpointUnitTest.java
index 4531d4a48c..1ba27a097e 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MaintenanceEndpointUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MaintenanceEndpointUnitTest.java
@@ -131,7 +131,7 @@ public class MaintenanceEndpointUnitTest extends BaseUnitTest {
     public void create_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             create_generic(BANNER_MESSAGE_1_CREATE_DTO, BANNER_MESSAGE_1);
         });
     }
@@ -141,7 +141,7 @@ public class MaintenanceEndpointUnitTest extends BaseUnitTest {
     public void create_noRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             create_generic(BANNER_MESSAGE_1_CREATE_DTO, BANNER_MESSAGE_1);
         });
     }
@@ -159,7 +159,7 @@ public class MaintenanceEndpointUnitTest extends BaseUnitTest {
     public void update_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             update_generic(BANNER_MESSAGE_1_UPDATE_DTO, BANNER_MESSAGE_1_ID, BANNER_MESSAGE_1);
         });
     }
@@ -169,7 +169,7 @@ public class MaintenanceEndpointUnitTest extends BaseUnitTest {
     public void update_noRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             update_generic(BANNER_MESSAGE_1_UPDATE_DTO, BANNER_MESSAGE_1_ID, BANNER_MESSAGE_1);
         });
     }
@@ -197,7 +197,7 @@ public class MaintenanceEndpointUnitTest extends BaseUnitTest {
     public void delete_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             delete_generic(BANNER_MESSAGE_1_ID, BANNER_MESSAGE_1);
         });
     }
@@ -207,7 +207,7 @@ public class MaintenanceEndpointUnitTest extends BaseUnitTest {
     public void delete_noRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             delete_generic(BANNER_MESSAGE_1_ID, BANNER_MESSAGE_1);
         });
     }
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointComponentTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointComponentTest.java
index 7b8323ff0f..e2ac0f8707 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointComponentTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointComponentTest.java
@@ -52,10 +52,14 @@ public class MetadataEndpointComponentTest extends BaseUnitTest {
     @Autowired
     private IdentifierRepository identifierRepository;
 
+    @Autowired
+    private UserRepository userRepository;
+
     @BeforeEach
     public void beforeEach() {
         /* metadata database */
         imageRepository.save(IMAGE_1_SIMPLE);
+        userRepository.save(USER_1);
         licenseRepository.save(LICENSE_1);
         containerRepository.save(CONTAINER_1_SIMPLE);
         databaseRepository.save(DATABASE_1_SIMPLE);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/OntologyEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/OntologyEndpointUnitTest.java
index e9720ec7dd..a6c682ca2c 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/OntologyEndpointUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/OntologyEndpointUnitTest.java
@@ -102,7 +102,7 @@ public class OntologyEndpointUnitTest extends BaseUnitTest {
     public void create_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             create_generic(ONTOLOGY_1_CREATE_DTO, null, null, null, ONTOLOGY_1);
         });
     }
@@ -112,7 +112,7 @@ public class OntologyEndpointUnitTest extends BaseUnitTest {
     public void create_noRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             create_generic(ONTOLOGY_1_CREATE_DTO, USER_4_PRINCIPAL, USER_4_USERNAME, USER_4, ONTOLOGY_1);
         });
     }
@@ -131,7 +131,7 @@ public class OntologyEndpointUnitTest extends BaseUnitTest {
     public void update_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             update_generic(ONTOLOGY_1_ID, ONTOLOGY_1_MODIFY_DTO, null, ONTOLOGY_1);
         });
     }
@@ -141,7 +141,7 @@ public class OntologyEndpointUnitTest extends BaseUnitTest {
     public void update_noRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             update_generic(ONTOLOGY_1_ID, ONTOLOGY_1_MODIFY_DTO, USER_4_PRINCIPAL, ONTOLOGY_1);
         });
     }
@@ -169,7 +169,7 @@ public class OntologyEndpointUnitTest extends BaseUnitTest {
     public void delete_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             delete_generic(ONTOLOGY_1_ID, ONTOLOGY_1);
         });
     }
@@ -179,7 +179,7 @@ public class OntologyEndpointUnitTest extends BaseUnitTest {
     public void delete_noRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             delete_generic(ONTOLOGY_1_ID, ONTOLOGY_1);
         });
     }
@@ -207,7 +207,7 @@ public class OntologyEndpointUnitTest extends BaseUnitTest {
     public void find_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             find_generic(ONTOLOGY_2_ID, "Apache Jena", null, ONTOLOGY_2, null);
         });
     }
@@ -217,7 +217,7 @@ public class OntologyEndpointUnitTest extends BaseUnitTest {
     public void find_noRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             find_generic(ONTOLOGY_2_ID, "Apache Jena", null, ONTOLOGY_2, null);
         });
     }
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/QueryEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/QueryEndpointUnitTest.java
index ab3639a7e5..d953670719 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/QueryEndpointUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/QueryEndpointUnitTest.java
@@ -117,7 +117,7 @@ public class QueryEndpointUnitTest extends BaseUnitTest {
     public void execute_publicAnonymized_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_execute(DATABASE_3_ID, QUERY_4_STATEMENT, null, null, DATABASE_3, null);
         });
     }
@@ -275,7 +275,7 @@ public class QueryEndpointUnitTest extends BaseUnitTest {
         final Principal principal = null;
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_execute(DATABASE_2_ID, QUERY_1_STATEMENT, null, principal, DATABASE_2, null);
         });
     }
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/SemanticsEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/SemanticsEndpointUnitTest.java
index cadaac12da..cdee187b74 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/SemanticsEndpointUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/SemanticsEndpointUnitTest.java
@@ -94,7 +94,7 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest {
     public void saveConcept_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             saveConcept_generic(COLUMN_CONCEPT_TEMPERATURE_SAVE_DTO, COLUMN_CONCEPT_TEMPERATURE);
         });
     }
@@ -104,7 +104,7 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest {
     public void saveConcept_noRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             saveConcept_generic(COLUMN_CONCEPT_TEMPERATURE_SAVE_DTO, COLUMN_CONCEPT_TEMPERATURE);
         });
     }
@@ -122,7 +122,7 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest {
     public void saveUnit_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             saveUnit_generic(UNIT_1_SAVE_DTO, UNIT_1);
         });
     }
@@ -132,7 +132,7 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest {
     public void saveUnit_noRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             saveUnit_generic(UNIT_1_SAVE_DTO, UNIT_1);
         });
     }
@@ -150,7 +150,7 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest {
     public void analyseTable_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             analyseTable_generic(DATABASE_1_ID, TABLE_1_ID);
         });
     }
@@ -160,7 +160,7 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest {
     public void findAll_noRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             analyseTable_generic(DATABASE_1_ID, TABLE_1_ID);
         });
     }
@@ -178,7 +178,7 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest {
     public void analyseTableColumn_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             analyseTableColumn_generic(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID);
         });
     }
@@ -188,7 +188,7 @@ public class SemanticsEndpointUnitTest extends BaseUnitTest {
     public void analyseTableColumn_noRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             analyseTableColumn_generic(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID);
         });
     }
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableColumnEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableColumnEndpointUnitTest.java
index 45b553d59f..15d5922684 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableColumnEndpointUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableColumnEndpointUnitTest.java
@@ -63,7 +63,7 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest {
     public void update_publicAnonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_update(DATABASE_3_ID, TABLE_8_ID, COLUMN_1_1_ID, DATABASE_3, TABLE_8, null, COLUMN_8_2_SEMANTICS_UPDATE_DTO, null, null, null);
         });
     }
@@ -73,7 +73,7 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest {
     public void update_publicHasRoleNoAccess_fails() {
 
         /* test */
-        assertThrows(NotAllowedException.class, () -> {
+        assertThrows(AccessDeniedException.class, () -> {
             generic_update(DATABASE_3_ID, TABLE_8_ID, COLUMN_1_1_ID, DATABASE_3, TABLE_8, null, COLUMN_8_2_SEMANTICS_UPDATE_DTO, USER_1_ID, USER_1_PRINCIPAL, null);
         });
     }
@@ -148,7 +148,7 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest {
     public void update_privateAnonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_update(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID, DATABASE_1, TABLE_1, null, COLUMN_1_4_SEMANTICS_UPDATE_DTO, null, null, null);
         });
     }
@@ -158,7 +158,7 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest {
     public void update_privateHasRoleNoAccess_fails() {
 
         /* test */
-        assertThrows(NotAllowedException.class, () -> {
+        assertThrows(AccessDeniedException.class, () -> {
             generic_update(DATABASE_1_ID, TABLE_1_ID, COLUMN_1_1_ID, DATABASE_1, TABLE_1, null, COLUMN_1_4_SEMANTICS_UPDATE_DTO, USER_1_ID, USER_1_PRINCIPAL, null);
         });
     }
@@ -263,7 +263,7 @@ public class TableColumnEndpointUnitTest extends BaseUnitTest {
             when(accessService.find(databaseId, userId))
                     .thenReturn(access);
         } else {
-            doThrow(NotAllowedException.class)
+            doThrow(AccessDeniedException.class)
                     .when(accessService)
                     .find(databaseId, userId);
         }
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointIntegrationTest.java
index 3ea981b73c..65e7c420e2 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointIntegrationTest.java
@@ -4,6 +4,7 @@ import at.tuwien.BaseUnitTest;
 import at.tuwien.annotations.MockAmqp;
 import at.tuwien.annotations.MockOpensearch;
 import at.tuwien.config.MariaDbConfig;
+import at.tuwien.config.MariaDbContainerConfig;
 import at.tuwien.exception.*;
 import at.tuwien.repository.mdb.*;
 import lombok.extern.log4j.Log4j2;
@@ -46,14 +47,17 @@ public class TableEndpointIntegrationTest extends BaseUnitTest {
     @Autowired
     private TableEndpoint tableEndpoint;
 
-    @Container
     @Autowired
-    private MariaDBContainer<?> mariaDBContainer;
+    private UserRepository userRepository;
+
+    @Container
+    private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer();
 
     @BeforeEach
     public void beforeEach() throws SQLException {
         /* metadata database */
         imageRepository.save(IMAGE_1);
+        userRepository.save(USER_1);
         containerRepository.save(CONTAINER_1_SIMPLE);
         databaseRepository.save(DATABASE_1_SIMPLE);
         MariaDbConfig.dropAllDatabases(CONTAINER_1);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointUnitTest.java
index 3fb00dd487..0c66454751 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/TableEndpointUnitTest.java
@@ -106,7 +106,7 @@ public class TableEndpointUnitTest extends BaseUnitTest {
     public void create_publicAnonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_create(DATABASE_3_ID, DATABASE_3, TABLE_4_CREATE_DTO, null, null, null);
         });
     }
@@ -126,7 +126,7 @@ public class TableEndpointUnitTest extends BaseUnitTest {
     public void create_publicHasRoleNoAccess_fails() {
 
         /* test */
-        assertThrows(NotAllowedException.class, () -> {
+        assertThrows(AccessDeniedException.class, () -> {
             generic_create(DATABASE_3_ID, DATABASE_3, TABLE_4_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, null);
         });
     }
@@ -136,7 +136,7 @@ public class TableEndpointUnitTest extends BaseUnitTest {
     public void create_publicNoRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_create(DATABASE_3_ID, DATABASE_3, TABLE_4_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_3_USER_1_WRITE_OWN_ACCESS);
         });
     }
@@ -205,7 +205,7 @@ public class TableEndpointUnitTest extends BaseUnitTest {
     public void delete_publicAnonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_delete(DATABASE_3_ID, TABLE_8_ID, DATABASE_3, TABLE_3, null);
         });
     }
@@ -244,7 +244,7 @@ public class TableEndpointUnitTest extends BaseUnitTest {
     public void delete_publicNoRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_delete(DATABASE_3_ID, TABLE_8_ID, DATABASE_3, TABLE_8, USER_4_PRINCIPAL);
         });
     }
@@ -291,7 +291,7 @@ public class TableEndpointUnitTest extends BaseUnitTest {
     public void list_privateNoRole_fails() {
 
         /* test */
-        assertThrows(NotAllowedException.class, () -> {
+        assertThrows(AccessDeniedException.class, () -> {
             generic_list(DATABASE_1_ID, DATABASE_1, USER_4_ID, USER_4_PRINCIPAL, null);
         });
     }
@@ -301,7 +301,7 @@ public class TableEndpointUnitTest extends BaseUnitTest {
     public void create_privateAnonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_create(DATABASE_1_ID, DATABASE_1, TABLE_4_CREATE_DTO, null, null, null);
         });
     }
@@ -321,7 +321,7 @@ public class TableEndpointUnitTest extends BaseUnitTest {
     public void create_privateHasRoleNoAccess_fails() {
 
         /* test */
-        assertThrows(NotAllowedException.class, () -> {
+        assertThrows(AccessDeniedException.class, () -> {
             generic_create(DATABASE_1_ID, DATABASE_1, TABLE_4_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, null);
         });
     }
@@ -331,7 +331,7 @@ public class TableEndpointUnitTest extends BaseUnitTest {
     public void create_privateNoRole_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_create(DATABASE_1_ID, DATABASE_1, TABLE_4_CREATE_DTO, USER_1_ID, USER_1_PRINCIPAL, DATABASE_1_USER_1_WRITE_OWN_ACCESS);
         });
     }
@@ -399,7 +399,7 @@ public class TableEndpointUnitTest extends BaseUnitTest {
     public void delete_privateAnonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             generic_delete(DATABASE_1_ID, TABLE_1_ID, DATABASE_1, TABLE_1, null);
         });
     }
@@ -471,7 +471,7 @@ public class TableEndpointUnitTest extends BaseUnitTest {
             when(accessService.find(databaseId, userId))
                     .thenReturn(access);
         } else {
-            doThrow(NotAllowedException.class)
+            doThrow(AccessDeniedException.class)
                     .when(accessService)
                     .find(databaseId, userId);
         }
@@ -504,7 +504,7 @@ public class TableEndpointUnitTest extends BaseUnitTest {
             when(accessService.find(databaseId, userId))
                     .thenReturn(access);
         } else {
-            doThrow(NotAllowedException.class)
+            doThrow(AccessDeniedException.class)
                     .when(accessService)
                     .find(databaseId, userId);
         }
@@ -543,7 +543,7 @@ public class TableEndpointUnitTest extends BaseUnitTest {
             when(accessService.find(databaseId, userId))
                     .thenReturn(access);
         } else {
-            doThrow(NotAllowedException.class)
+            doThrow(AccessDeniedException.class)
                     .when(accessService)
                     .find(databaseId, userId);
         }
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java
index edd7402e80..1cf017ec7b 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java
@@ -71,7 +71,7 @@ public class UserEndpointUnitTest extends BaseUnitTest {
                 .build();
 
         /* test */
-        create_generic(request);
+        create_generic(request, USER_1);
     }
 
     @Test
@@ -84,8 +84,8 @@ public class UserEndpointUnitTest extends BaseUnitTest {
                 .build();
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
-            create_generic(request);
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
+            create_generic(request, null);
         });
     }
 
@@ -94,7 +94,7 @@ public class UserEndpointUnitTest extends BaseUnitTest {
     public void find_anonymous_fails() {
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             find_generic(USER_1_ID, USER_1, null);
         });
     }
@@ -139,7 +139,7 @@ public class UserEndpointUnitTest extends BaseUnitTest {
                 .build();
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             modify_generic(USER_1_ID, USER_1, null, request);
         });
     }
@@ -155,7 +155,7 @@ public class UserEndpointUnitTest extends BaseUnitTest {
                 .build();
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             modify_generic(USER_1_ID, USER_1, USER_4_PRINCIPAL, request);
         });
     }
@@ -200,7 +200,7 @@ public class UserEndpointUnitTest extends BaseUnitTest {
                 .build();
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             theme_generic(USER_1_ID, USER_1, null, request);
         });
     }
@@ -213,7 +213,7 @@ public class UserEndpointUnitTest extends BaseUnitTest {
                 .build();
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             theme_generic(USER_4_ID, USER_4, USER_4_PRINCIPAL, request);
         });
     }
@@ -250,7 +250,7 @@ public class UserEndpointUnitTest extends BaseUnitTest {
                 .build();
 
         /* test */
-        assertThrows(AccessDeniedException.class, () -> {
+        assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> {
             password_generic(USER_1_ID, USER_1, null, request);
         });
     }
@@ -298,9 +298,13 @@ public class UserEndpointUnitTest extends BaseUnitTest {
         assertEquals(2, body.size());
     }
 
-    protected void create_generic(SignupRequestDto data) throws UserEmailAlreadyExistsException, RealmNotFoundException,
-            UserAlreadyExistsException, UserNotFoundException, KeycloakRemoteException,
-            at.tuwien.exception.AccessDeniedException {
+    protected void create_generic(SignupRequestDto data, User user) throws UserEmailAlreadyExistsException,
+            RealmNotFoundException, UserAlreadyExistsException, UserNotFoundException, KeycloakRemoteException,
+            AccessDeniedException {
+
+        /* mock */
+        when(userService.create(data))
+                .thenReturn(user);
 
         /* test */
         final ResponseEntity<UserBriefDto> response = userEndpoint.create(data);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java
index 78dcd07ea9..d9af373754 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java
@@ -6,6 +6,8 @@ import at.tuwien.annotations.MockOpensearch;
 import at.tuwien.api.database.DatabaseDto;
 import at.tuwien.api.user.UserBriefDto;
 import at.tuwien.api.user.UserDto;
+import at.tuwien.entities.database.Database;
+import at.tuwien.entities.user.User;
 import at.tuwien.exception.QueryMalformedException;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
@@ -29,6 +31,7 @@ public class DatabaseMapperTest extends BaseUnitTest {
 
     @Test
     public void databaseToDatabaseDto_succeeds() {
+        final Database debug = DATABASE_1;
 
         /* test */
         final DatabaseDto response = databaseMapper.databaseToDatabaseDto(DATABASE_1);
@@ -48,10 +51,14 @@ public class DatabaseMapperTest extends BaseUnitTest {
 
     @Test
     public void userToRawCreateUserQuery_fails () {
+        final User request = User.builder()
+                .username("username")
+                .mariadbPassword(null) // <<<<<<<<<
+                .build();
 
         /* test */
         assertThrows(QueryMalformedException.class, () -> {
-            databaseMapper.userToRawCreateUserQuery(null, USER_1);
+            databaseMapper.userToRawCreateUserQuery(null, request);
         });
     }
 
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/DatabaseRepositoryUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/DatabaseRepositoryUnitTest.java
index 66f1695ae6..0aa05db210 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/DatabaseRepositoryUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/DatabaseRepositoryUnitTest.java
@@ -29,6 +29,9 @@ public class DatabaseRepositoryUnitTest extends BaseUnitTest {
     @Autowired
     private ImageRepository imageRepository;
 
+    @Autowired
+    private UserRepository userRepository;
+
     @Autowired
     private ContainerRepository containerRepository;
 
@@ -41,6 +44,8 @@ public class DatabaseRepositoryUnitTest extends BaseUnitTest {
     @BeforeEach
     public void beforeEach() {
         imageRepository.save(IMAGE_1_SIMPLE);
+        userRepository.save(USER_1);
+        userRepository.save(USER_2);
         containerRepository.save(CONTAINER_1_SIMPLE);
         containerRepository.save(CONTAINER_2_SIMPLE);
         databaseRepository.save(DATABASE_1_SIMPLE);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java
index fa1329dbd8..ac7360e38d 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java
@@ -5,6 +5,7 @@ import at.tuwien.annotations.MockAmqp;
 import at.tuwien.api.database.ViewCreateDto;
 import at.tuwien.api.database.ViewDto;
 import at.tuwien.config.MariaDbConfig;
+import at.tuwien.config.MariaDbContainerConfig;
 import at.tuwien.exception.*;
 import at.tuwien.repository.mdb.*;
 import at.tuwien.repository.sdb.ViewIdxRepository;
@@ -63,12 +64,14 @@ public class ViewIdxRepositoryIntegrationTest extends BaseUnitTest {
     @Autowired
     private ViewService viewService;
 
+    @Autowired
+    private UserRepository userRepository;
+
     @Rule
     public Timeout globalTimeout = Timeout.seconds(60);
 
     @Container
-    @Autowired
-    private MariaDBContainer<?> mariaDBContainer;
+    private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer();
 
     @Container
     private static final OpensearchContainer opensearchContainer = new OpensearchContainer(DockerImageName.parse("opensearchproject/opensearch:2.8.0"));
@@ -90,6 +93,7 @@ public class ViewIdxRepositoryIntegrationTest extends BaseUnitTest {
         TABLE_2.setColumns(TABLE_2_COLUMNS);
         /* metadata database */
         imageRepository.save(IMAGE_1);
+        userRepository.save(USER_1);
         containerRepository.save(CONTAINER_1);
         databaseRepository.save(DATABASE_1_SIMPLE);
         tableRepository.saveAll(List.of(TABLE_1_SIMPLE, TABLE_2_SIMPLE));
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java
index 9fc3776669..844d798d67 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java
@@ -46,12 +46,17 @@ public class ViewRepositoryIntegrationTest extends BaseUnitTest {
     @Autowired
     private ViewRepository viewRepository;
 
+    @Autowired
+    private UserRepository userRepository;
+
     @Rule
     public Timeout globalTimeout = Timeout.seconds(60);
 
     @BeforeEach
     public void beforeEach() {
         imageRepository.save(IMAGE_1);
+        userRepository.save(USER_1);
+        userRepository.save(USER_2);
         containerRepository.saveAll(List.of(CONTAINER_1_SIMPLE, CONTAINER_2_SIMPLE));
         databaseRepository.saveAll(List.of(DATABASE_1_SIMPLE, DATABASE_2_SIMPLE));
         tableRepository.saveAll(List.of(TABLE_1_SIMPLE, TABLE_2_SIMPLE, TABLE_3_SIMPLE, TABLE_4_SIMPLE, TABLE_5_SIMPLE, TABLE_6_SIMPLE, TABLE_7_SIMPLE));
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java
index bdce53ceb3..5c472f5008 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java
@@ -7,6 +7,7 @@ import at.tuwien.api.database.AccessTypeDto;
 import at.tuwien.api.database.DatabaseGiveAccessDto;
 import at.tuwien.api.database.DatabaseModifyAccessDto;
 import at.tuwien.config.MariaDbConfig;
+import at.tuwien.config.MariaDbContainerConfig;
 import at.tuwien.entities.database.AccessType;
 import at.tuwien.entities.database.DatabaseAccess;
 import at.tuwien.exception.*;
@@ -62,14 +63,17 @@ public class AccessServiceIntegrationTest extends BaseUnitTest {
     @Autowired
     private AccessService accessService;
 
-    @Container
     @Autowired
-    private MariaDBContainer<?> mariaDBContainer;
+    private UserRepository userRepository;
+
+    @Container
+    private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer();
 
     @BeforeEach
     public void beforeEach() throws SQLException {
         /* metadata database */
         imageRepository.save(IMAGE_1);
+        userRepository.saveAll(List.of(USER_1, USER_2, USER_3));
         containerRepository.save(CONTAINER_1_SIMPLE);
         databaseRepository.save(DATABASE_1_SIMPLE);
         MariaDbConfig.dropAllDatabases(CONTAINER_1);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceIntegrationTest.java
index d05fbd5a36..b683689645 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceIntegrationTest.java
@@ -11,7 +11,6 @@ import at.tuwien.config.EndpointConfig;
 import at.tuwien.entities.identifier.Identifier;
 import at.tuwien.exception.*;
 import at.tuwien.repository.mdb.*;
-import org.apache.http.auth.BasicUserPrincipal;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -30,8 +29,6 @@ import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 import org.springframework.web.client.RestTemplate;
 
-import java.security.Principal;
-
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.*;
@@ -53,6 +50,9 @@ public class DataCiteIdentifierServiceIntegrationTest extends BaseUnitTest {
     @Autowired
     private LicenseRepository licenseRepository;
 
+    @Autowired
+    private UserRepository userRepository;
+
     @Autowired
     private ImageRepository imageRepository;
 
@@ -79,6 +79,7 @@ public class DataCiteIdentifierServiceIntegrationTest extends BaseUnitTest {
     public void beforeEach() {
         licenseRepository.save(LICENSE_1);
         imageRepository.save(IMAGE_1);
+        userRepository.save(USER_1);
         containerRepository.save(CONTAINER_1_SIMPLE);
         databaseRepository.save(DATABASE_1_SIMPLE);
     }
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java
index 169ad4d76f..5c827fea63 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java
@@ -59,6 +59,9 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest {
     @Autowired
     private ImageRepository imageRepository;
 
+    @Autowired
+    private UserRepository userRepository;
+
     @Autowired
     private ContainerRepository containerRepository;
 
@@ -85,6 +88,7 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest {
     public void beforeEach() {
         licenseRepository.save(LICENSE_1);
         imageRepository.save(IMAGE_1);
+        userRepository.save(USER_1);
         containerRepository.save(CONTAINER_1_SIMPLE);
         databaseRepository.save(DATABASE_1_SIMPLE);
     }
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java
index 47318a596f..18de26397a 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java
@@ -6,6 +6,7 @@ import at.tuwien.annotations.MockOpensearch;
 import at.tuwien.api.database.DatabaseCreateDto;
 import at.tuwien.api.database.DatabaseDto;
 import at.tuwien.config.MariaDbConfig;
+import at.tuwien.config.MariaDbContainerConfig;
 import at.tuwien.entities.database.Database;
 import at.tuwien.repository.mdb.ContainerRepository;
 import at.tuwien.repository.mdb.DatabaseRepository;
@@ -56,8 +57,7 @@ public class DatabaseServiceComponentTest extends BaseUnitTest {
     private MariaDbServiceImpl databaseService;
 
     @Container
-    @Autowired
-    public MariaDBContainer<?> mariaDBContainer;
+    private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer();
 
     @BeforeEach
     public void beforeEach() {
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java
index 6e37ebf464..67de4364b6 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java
@@ -5,7 +5,9 @@ import at.tuwien.annotations.MockAmqp;
 import at.tuwien.annotations.MockOpensearch;
 import at.tuwien.api.database.*;
 import at.tuwien.config.MariaDbConfig;
+import at.tuwien.config.MariaDbContainerConfig;
 import at.tuwien.entities.database.Database;
+import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
 import at.tuwien.gateway.KeycloakGateway;
 import at.tuwien.repository.mdb.*;
@@ -44,11 +46,8 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
     @MockBean
     private DatabaseIdxRepository databaseIdxRepository;
 
-    @MockBean
-    private KeycloakGateway keycloakGateway;
-
-    @MockBean
-    private UserService userService;
+    @Autowired
+    private UserRepository userRepository;
 
     @Autowired
     private DatabaseAccessRepository databaseAccessRepository;
@@ -69,13 +68,13 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
     private MariaDbConfig mariaDbConfig;
 
     @Container
-    @Autowired
-    private MariaDBContainer<?> mariaDBContainer;
+    private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer();
 
     @BeforeEach
     public void beforeEach() throws SQLException {
         /* metadata database */
         imageRepository.save(IMAGE_1);
+        userRepository.saveAll(List.of(USER_1, USER_2, USER_3));
         containerRepository.save(CONTAINER_1_SIMPLE);
         databaseRepository.saveAll(List.of(DATABASE_1_SIMPLE, DATABASE_2_SIMPLE, DATABASE_3_SIMPLE));
         MariaDbConfig.dropAllDatabases(CONTAINER_1);
@@ -110,8 +109,6 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
                 .thenReturn(DATABASE_1_DTO);
         when(databaseIdxRepository.save(any(DatabaseDto.class)))
                 .thenReturn(DATABASE_1_DTO);
-        when(userService.findByUsername(USER_1_USERNAME))
-                .thenReturn(USER_1);
 
         /* test */
         generic_create(DATABASE_1_CREATE, DATABASE_1);
@@ -126,8 +123,6 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
                 .thenReturn(DATABASE_1_DTO);
         when(databaseIdxRepository.save(any(DatabaseDto.class)))
                 .thenReturn(DATABASE_1_DTO);
-        when(userService.findByUsername(USER_1_USERNAME))
-                .thenReturn(USER_1);
 
         /* test */
         generic_create(DATABASE_1_CREATE, DATABASE_1);
@@ -144,8 +139,6 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
         when(databaseIdxRepository.save(any(DatabaseDto.class)))
                 .thenReturn(DATABASE_2_DTO)
                 .thenReturn(DATABASE_3_DTO);
-        when(userService.findByUsername(USER_1_USERNAME))
-                .thenReturn(USER_1);
 
         /* test */
         generic_create(DATABASE_2_CREATE, DATABASE_2);
@@ -162,8 +155,6 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
         when(databaseIdxRepository.save(any(DatabaseDto.class)))
                 .thenReturn(DATABASE_3_DTO)
                 .thenReturn(DATABASE_2_DTO);
-        when(userService.findByUsername(USER_1_USERNAME))
-                .thenReturn(USER_1);
 
         /* test */
         generic_create(DATABASE_3_CREATE, DATABASE_3);
@@ -178,8 +169,6 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
         databaseRepository.deleteAll();
         when(databaseIdxRepository.save(any(DatabaseDto.class)))
                 .thenReturn(DATABASE_1_DTO);
-        when(userService.findByUsername(USER_1_USERNAME))
-                .thenReturn(USER_1);
         final Database database = generic_create(DATABASE_1_CREATE, DATABASE_1);
 
 
@@ -191,20 +180,21 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
     public void updatePassword_canLogin_succeeds() throws Exception {
 
         /* mock */
-        MariaDbConfig.dropDatabase(CONTAINER_1, DATABASE_1_INTERNALNAME);
-        MariaDbConfig.createDatabase(CONTAINER_1, DATABASE_1_INTERNALNAME);
-        databaseAccessRepository.save(DATABASE_1_USER_1_READ_ACCESS);
+        userRepository.save(USER_3);
+        databaseAccessRepository.save(DATABASE_1_USER_3_READ_ACCESS);
         when(databaseIdxRepository.save(any(DatabaseDto.class)))
                 .thenReturn(DATABASE_1_DTO);
-        when(userService.findByUsername(USER_1_USERNAME))
-                .thenReturn(USER_1);
-        databaseService.updatePassword(USER_1);
 
         /* test */
         assertThrows(SQLInvalidAuthorizationSpecException.class, () -> {
-            MariaDbConfig.getPrivileges(mariaDBContainer.getHost(), mariaDBContainer.getMappedPort(3306), DATABASE_1_INTERNALNAME, USER_1_USERNAME, USER_1_PASSWORD);
+            MariaDbConfig.getPrivileges(mariaDBContainer.getHost(), mariaDBContainer.getMappedPort(3306), USER_3_USERNAME, USER_4_PASSWORD);
         });
-        MariaDbConfig.getPrivileges(mariaDBContainer.getHost(), mariaDBContainer.getMappedPort(3306), DATABASE_1_INTERNALNAME, USER_1_USERNAME, USER_2_PASSWORD);
+        databaseService.updatePassword(User.builder()
+                        .id(USER_3_ID)
+                        .username(USER_3_USERNAME)
+                        .mariadbPassword(USER_4_DATABASE_PASSWORD)
+                .build());
+        MariaDbConfig.getPrivileges(mariaDBContainer.getHost(), mariaDBContainer.getMappedPort(3306), USER_3_USERNAME, USER_4_PASSWORD);
     }
 
     @Test
@@ -252,7 +242,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
         /* mock */
         MariaDbConfig.dropDatabase(CONTAINER_1, DATABASE_3_INTERNALNAME);
         MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_3);
-        MariaDbConfig.grantUserPermissions(CONTAINER_1, DATABASE_3, "junit1");
+        mariaDbConfig.grantUserPermissions(CONTAINER_1, DATABASE_3, "junit1");
         databaseAccessRepository.save(DATABASE_3_USER_1_WRITE_ALL_ACCESS);
 
         /* test */
@@ -292,10 +282,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
 
         /* mock */
         databaseRepository.save(DATABASE_1_SIMPLE);
-        when(userService.findByUsername(USER_1_USERNAME))
-                .thenReturn(USER_1);
-        when(userService.findByUsername(USER_2_USERNAME))
-                .thenReturn(USER_2);
+        userRepository.save(USER_2);
 
         /* test */
         final Database response = databaseService.transfer(DATABASE_1_ID, request);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java
index 74802cc49d..580a9d4545 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java
@@ -16,6 +16,7 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.opensearch.testcontainers.OpensearchContainer;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.http.HttpEntity;
@@ -49,6 +50,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
     private StoreService storeService;
 
     @MockBean
+    @Qualifier("brokerRestTemplate")
     private RestTemplate restTemplate;
 
     @Autowired
@@ -75,6 +77,9 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
     @Autowired
     private ViewRepository viewRepository;
 
+    @Autowired
+    private UserRepository userRepository;
+
     @Autowired
     private TableRepository tableRepository;
 
@@ -93,6 +98,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
     @BeforeEach
     public void beforeEach() {
         imageRepository.save(IMAGE_1_SIMPLE);
+        userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4));
         licenseRepository.save(LICENSE_1);
         containerRepository.save(CONTAINER_1_SIMPLE);
         databaseRepository.save(DATABASE_1_SIMPLE);
@@ -103,6 +109,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
     @Test
     public void findAll_succeeds() {
 
+        /* mock */
         identifierRepository.save(IDENTIFIER_1);
 
         /* test */
@@ -114,6 +121,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
     @Transactional
     public void find_succeeds() throws IdentifierNotFoundException {
 
+        /* mock */
         identifierRepository.save(IDENTIFIER_1);
 
         /* test */
@@ -143,6 +151,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
     @Test
     public void findAll_forDatabase_succeeds() {
 
+        /* mock */
         identifierRepository.save(IDENTIFIER_1);
 
         /* test */
@@ -164,7 +173,6 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
             QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException,
             IdentifierRequestException, ViewNotFoundException, QueryStoreException, DatabaseConnectionException,
             ImageNotSupportedException {
-        final String bearer = "Bearer abcxyz";
 
         /* mock */
         when(restTemplate.exchange(anyString(), any(HttpMethod.class), any(HttpEntity.class), eq(QueryDto.class)))
@@ -211,7 +219,6 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
             IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException,
             RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException, QueryStoreException,
             DatabaseConnectionException, ImageNotSupportedException {
-        final String bearer = "Bearer abcxyz";
 
         /* test */
         final Identifier response = identifierService.create(IDENTIFIER_1_DTO_REQUEST, USER_1_PRINCIPAL);
@@ -249,7 +256,6 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
             IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException,
             RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException, QueryStoreException,
             DatabaseConnectionException, ImageNotSupportedException {
-        final String bearer = "Bearer abcxyz";
 
         /* mock */
         containerRepository.save(CONTAINER_3_SIMPLE);
@@ -318,7 +324,6 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
             IdentifierAlreadyExistsException, QueryNotFoundException, IdentifierPublishingNotAllowedException,
             RemoteUnavailableException, IdentifierRequestException, ViewNotFoundException, QueryStoreException,
             DatabaseConnectionException, ImageNotSupportedException {
-        final String authorization = "Bearer abcxyz";
 
         /* mock */
         containerRepository.save(CONTAINER_3_SIMPLE);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java
index 98b90e73f4..eca8d1bc91 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java
@@ -3,6 +3,7 @@ package at.tuwien.service;
 import at.tuwien.BaseUnitTest;
 import at.tuwien.annotations.MockAmqp;
 import at.tuwien.annotations.MockOpensearch;
+import at.tuwien.config.MariaDbContainerConfig;
 import at.tuwien.entities.database.License;
 import at.tuwien.exception.LicenseNotFoundException;
 import at.tuwien.repository.mdb.LicenseRepository;
@@ -37,8 +38,7 @@ public class LicenseServiceIntegrationTest extends BaseUnitTest {
     private LicenseService licenseService;
 
     @Container
-    @Autowired
-    public MariaDBContainer<?> mariaDBContainer;
+    private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer();
 
     @BeforeEach
     public void beforeEach() {
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java
index 5c94c0f746..b68d07b0df 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java
@@ -25,7 +25,9 @@ import org.testcontainers.containers.RabbitMQContainer;
 import org.testcontainers.junit.jupiter.Container;
 import org.testcontainers.junit.jupiter.Testcontainers;
 
+import java.io.IOException;
 import java.util.List;
+import java.util.concurrent.TimeoutException;
 
 import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.Mockito.when;
@@ -142,7 +144,7 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest {
     }
 
     @Test
-    public void init_succeeds() throws AmqpException {
+    public void init_succeeds() throws AmqpException, IOException, TimeoutException {
 
         /* mock */
         when(databaseRepository.findAll())
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java
index 8f533059f5..530edaea9e 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java
@@ -10,6 +10,7 @@ import at.tuwien.service.impl.RabbitMqServiceImpl;
 import com.rabbitmq.client.BuiltinExchangeType;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,6 +43,7 @@ public class MessageQueueServiceUnitTest extends BaseUnitTest {
     private RabbitMqServiceImpl messageQueueService;
 
     @Test
+    @Disabled("cannot be mocked")
     public void createExchange_fails() throws IOException {
 
         /* mock */
@@ -56,6 +58,7 @@ public class MessageQueueServiceUnitTest extends BaseUnitTest {
     }
 
     @Test
+    @Disabled("cannot be mocked")
     public void deleteExchange_fails() throws IOException {
 
         /* mock */
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java
index 3116d2ff9b..9dd2a6e463 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java
@@ -31,6 +31,9 @@ public class MetadataServiceIntegrationTest extends BaseUnitTest {
     @Autowired
     private ImageRepository imageRepository;
 
+    @Autowired
+    private UserRepository userRepository;
+
     @Autowired
     private ContainerRepository containerRepository;
 
@@ -50,6 +53,7 @@ public class MetadataServiceIntegrationTest extends BaseUnitTest {
     public void beforeEach() {
         /* metadata database */
         imageRepository.save(IMAGE_1_SIMPLE);
+        userRepository.save(USER_1);
         licenseRepository.save(LICENSE_1);
         containerRepository.save(CONTAINER_1);
         databaseRepository.save(DATABASE_1_SIMPLE);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java
index 58223493e3..5628f041c9 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java
@@ -8,6 +8,7 @@ import at.tuwien.api.database.query.ExecuteStatementDto;
 import at.tuwien.api.database.query.QueryResultDto;
 import at.tuwien.api.database.table.TableCsvDto;
 import at.tuwien.config.MariaDbConfig;
+import at.tuwien.config.MariaDbContainerConfig;
 import at.tuwien.exception.*;
 import at.tuwien.querystore.Query;
 import at.tuwien.repository.mdb.*;
@@ -50,7 +51,7 @@ import static org.mockito.Mockito.when;
 @MockOpensearch
 public class QueryServiceIntegrationTest extends BaseUnitTest {
 
-    @MockBean
+    @Autowired
     private UserRepository userRepository;
 
     @Autowired
@@ -75,8 +76,7 @@ public class QueryServiceIntegrationTest extends BaseUnitTest {
     private QueryService queryService;
 
     @Container
-    @Autowired
-    private MariaDBContainer<?> mariaDBContainer;
+    private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer();
 
     @BeforeEach
     public void beforeEach() throws SQLException {
@@ -85,6 +85,8 @@ public class QueryServiceIntegrationTest extends BaseUnitTest {
         MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1);
         /* metadata database */
         imageRepository.save(IMAGE_1);
+        userRepository.save(USER_1);
+        userRepository.save(USER_2);
         containerRepository.saveAll(List.of(CONTAINER_1_SIMPLE, CONTAINER_2_SIMPLE));
         databaseRepository.saveAll(List.of(DATABASE_1_SIMPLE, DATABASE_2_SIMPLE));
         tableRepository.saveAll(List.of(TABLE_1_SIMPLE, TABLE_2_SIMPLE, TABLE_3_SIMPLE, TABLE_4_SIMPLE, TABLE_5_SIMPLE, TABLE_6_SIMPLE, TABLE_7_SIMPLE));
@@ -297,10 +299,6 @@ public class QueryServiceIntegrationTest extends BaseUnitTest {
                 .statement("SELECT n.`firstname`, n.`lastname`, n.`birth`, n.`reminder`, z.`animal_name`, z.`legs` FROM `likes` l JOIN `names` n ON l.`name_id` = n.`id` JOIN `mock_view` z ON z.`id` = l.`zoo_id`")
                 .build();
 
-        /* mock */
-        when(userRepository.findByUsername(USER_1_USERNAME))
-                .thenReturn(Optional.of(USER_1));
-
         /* test */
         Thread.sleep(1000) /* wait for test container some more */;
         final QueryResultDto response = queryService.execute(DATABASE_2_ID, request, USER_1_PRINCIPAL, 0L, 100L, null, null);
@@ -338,10 +336,6 @@ public class QueryServiceIntegrationTest extends BaseUnitTest {
                 .statement("SELECT `location`, `lng` FROM `weather_location` WHERE `lat` IS NULL")
                 .build();
 
-        /* mock */
-        when(userRepository.findByUsername(USER_1_USERNAME))
-                .thenReturn(Optional.of(USER_1));
-
         /* test */
         Thread.sleep(1000) /* wait for test container some more */;
         final QueryResultDto response = queryService.execute(DATABASE_1_ID, request, USER_1_PRINCIPAL,
@@ -362,10 +356,6 @@ public class QueryServiceIntegrationTest extends BaseUnitTest {
                 .statement("SELECT `location` FROM `weather_location` WHERE `lat` IS NULL")
                 .build();
 
-        /* mock */
-        when(userRepository.findByUsername(USER_1_USERNAME))
-                .thenReturn(Optional.of(USER_1));
-
         /* test */
         Thread.sleep(1000) /* wait for test container some more */;
         final QueryResultDto response = queryService.execute(DATABASE_1_ID, request, USER_1_PRINCIPAL,
@@ -387,10 +377,6 @@ public class QueryServiceIntegrationTest extends BaseUnitTest {
                 .statement("SELECT `lat`, `lng` FROM `weather_location` WHERE `lat` IS NULL")
                 .build();
 
-        /* mock */
-        when(userRepository.findByUsername(USER_1_USERNAME))
-                .thenReturn(Optional.of(USER_1));
-
         /* test */
         Thread.sleep(1000) /* wait for test container some more */;
         final QueryResultDto response = queryService.execute(DATABASE_1_ID, request, USER_1_PRINCIPAL,
@@ -407,10 +393,6 @@ public class QueryServiceIntegrationTest extends BaseUnitTest {
                 .statement("SELECT aus.location as a, loc.location from weather_aus aus, weather_location loc")
                 .build();
 
-        /* mock */
-        when(userRepository.findByUsername(USER_1_USERNAME))
-                .thenReturn(Optional.of(USER_1));
-
         /* test */
         Thread.sleep(1000) /* wait for test container some more */;
         final QueryResultDto response = queryService.execute(DATABASE_1_ID, request, USER_1_PRINCIPAL, 0L, 100L, null, null);
@@ -448,8 +430,6 @@ public class QueryServiceIntegrationTest extends BaseUnitTest {
 
         /* mock */
         Thread.sleep(1000) /* wait for test container some more */;
-        when(userRepository.findByUsername(USER_1_USERNAME))
-                .thenReturn(Optional.of(USER_1));
 
         /* test */
         final QueryResultDto response = queryService.execute(DATABASE_1_ID, request, USER_1_PRINCIPAL,
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java
index bb1da63e37..f27920ea34 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java
@@ -4,6 +4,7 @@ import at.tuwien.BaseUnitTest;
 import at.tuwien.annotations.MockAmqp;
 import at.tuwien.annotations.MockOpensearch;
 import at.tuwien.config.MariaDbConfig;
+import at.tuwien.config.MariaDbContainerConfig;
 import at.tuwien.exception.*;
 import at.tuwien.repository.mdb.*;
 import at.tuwien.service.impl.HibernateConnector;
@@ -39,6 +40,9 @@ public class QueryStoreServiceIntegrationTest extends BaseUnitTest {
     @Autowired
     private ImageRepository imageRepository;
 
+    @Autowired
+    private UserRepository userRepository;
+
     @Autowired
     private DatabaseRepository databaseRepository;
 
@@ -46,13 +50,13 @@ public class QueryStoreServiceIntegrationTest extends BaseUnitTest {
     private QueryStoreServiceImpl queryStoreService;
 
     @Container
-    @Autowired
-    private MariaDBContainer<?> mariaDBContainer;
+    private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer();
 
     @BeforeEach
     public void beforeEach() throws SQLException {
         /* metadata database */
         imageRepository.save(IMAGE_1);
+        userRepository.save(USER_1);
         containerRepository.save(CONTAINER_1_SIMPLE);
         databaseRepository.save(DATABASE_1_SIMPLE);
         MariaDbConfig.dropAllDatabases(CONTAINER_1);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java
index 4597bb22e9..e7d733a529 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java
@@ -7,6 +7,7 @@ import at.tuwien.api.database.query.ExecuteStatementDto;
 import at.tuwien.api.database.query.QueryPersistDto;
 import at.tuwien.api.database.query.QueryResultDto;
 import at.tuwien.config.MariaDbConfig;
+import at.tuwien.config.MariaDbContainerConfig;
 import at.tuwien.exception.*;
 import at.tuwien.querystore.Query;
 import at.tuwien.repository.mdb.*;
@@ -63,9 +64,11 @@ public class StoreServiceIntegrationModifyTest extends BaseUnitTest {
     @Autowired
     private QueryService queryService;
 
-    @Container
     @Autowired
-    private MariaDBContainer<?> mariaDBContainer;
+    private UserRepository userRepository;
+
+    @Container
+    private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer();
 
     @BeforeEach
     public void beforeEach() throws InterruptedException, SQLException {
@@ -76,6 +79,8 @@ public class StoreServiceIntegrationModifyTest extends BaseUnitTest {
         /* metadata database */
         imageRepository.save(IMAGE_1);
         containerRepository.save(CONTAINER_1);
+        userRepository.save(USER_1);
+        userRepository.save(USER_5);
         databaseRepository.save(DATABASE_1_SIMPLE);
         tableRepository.saveAll(List.of(TABLE_1_SIMPLE, TABLE_2_SIMPLE));
         tableColumnRepository.saveAll(TABLE_1_COLUMNS);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java
index 31798e89ca..8d632a4ef0 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java
@@ -5,6 +5,7 @@ import at.tuwien.annotations.MockAmqp;
 import at.tuwien.annotations.MockOpensearch;
 import at.tuwien.api.database.table.TableHistoryDto;
 import at.tuwien.config.MariaDbConfig;
+import at.tuwien.config.MariaDbContainerConfig;
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.exception.*;
 import at.tuwien.repository.mdb.*;
@@ -52,13 +53,16 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest {
     @Autowired
     private TableService tableService;
 
-    @Container
     @Autowired
-    private MariaDBContainer<?> mariaDBContainer;
+    private UserRepository userRepository;
+
+    @Container
+    private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer();
 
     @BeforeEach
     public void beforeEach() throws SQLException {
         imageRepository.save(IMAGE_1);
+        userRepository.saveAll(List.of(USER_1, USER_2));
         containerRepository.save(CONTAINER_1_SIMPLE);
         containerRepository.save(CONTAINER_2_SIMPLE);
         databaseRepository.save(DATABASE_1_SIMPLE);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java
index fbab8d9570..11fb73a8e0 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java
@@ -9,6 +9,7 @@ import at.tuwien.api.database.table.columns.ColumnCreateDto;
 import at.tuwien.api.database.table.columns.ColumnTypeDto;
 import at.tuwien.api.database.table.constraints.ConstraintsCreateDto;
 import at.tuwien.config.MariaDbConfig;
+import at.tuwien.config.MariaDbContainerConfig;
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.entities.database.table.columns.TableColumn;
 import at.tuwien.exception.*;
@@ -77,9 +78,11 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest {
     @Autowired
     private TableMapper tableMapper;
 
-    @Container
     @Autowired
-    private MariaDBContainer<?> mariaDBContainer;
+    private UserRepository userRepository;
+
+    @Container
+    private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer();
 
     @BeforeEach
     public void beforeEach() throws SQLException {
@@ -87,6 +90,8 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest {
         MariaDbConfig.createInitDatabase(CONTAINER_1, DATABASE_1);
         /* metadata database */
         imageRepository.save(IMAGE_1);
+        userRepository.save(USER_1);
+        userRepository.save(USER_2);
         containerRepository.save(CONTAINER_1_SIMPLE);
         containerRepository.save(CONTAINER_2_SIMPLE);
         databaseRepository.save(DATABASE_1_SIMPLE);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java
index fd561cadd8..d1e0857433 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java
@@ -17,20 +17,18 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.DynamicPropertyRegistry;
+import org.springframework.test.context.DynamicPropertySource;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 import org.springframework.transaction.annotation.Transactional;
-import org.testcontainers.containers.MariaDBContainer;
+import org.testcontainers.images.PullPolicy;
 import org.testcontainers.junit.jupiter.Container;
 import org.testcontainers.junit.jupiter.Testcontainers;
 
 import java.util.List;
-import java.util.Optional;
 
 import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.when;
 
 @Log4j2
 @Testcontainers
@@ -49,8 +47,17 @@ public class UserServiceIntegrationTest extends BaseUnitTest {
     private UserService userService;
 
     @Container
-    @Autowired
-    private KeycloakContainer keycloakContainer;
+    private static KeycloakContainer keycloakContainer = new KeycloakContainer("quay.io/keycloak/keycloak:21.0")
+            .withImagePullPolicy(PullPolicy.alwaysPull())
+            .withAdminUsername("fda")
+            .withAdminPassword("fda")
+            .withRealmImportFile("./dbrepo-realm.json")
+            .withEnv("KC_HOSTNAME_STRICT_HTTPS", "false");
+
+    @DynamicPropertySource
+    static void elasticsearchProperties(DynamicPropertyRegistry registry) {
+        registry.add("fda.keycloak.endpoint", () -> "http://localhost:" + keycloakContainer.getMappedPort(8080));
+    }
 
     @BeforeEach
     public void beforeEach() {
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java
index 3282718db0..1d79b4ad86 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java
@@ -148,6 +148,10 @@ public class UserServiceUnitTest extends BaseUnitTest {
         doNothing()
                 .when(keycloakGateway)
                 .updateUserCredentials(USER_1_ID, USER_1_PASSWORD_DTO);
+        when(userRepository.findById(USER_1_ID))
+                .thenReturn(Optional.of(USER_1));
+        when(userRepository.save(any(User.class)))
+                .thenReturn(USER_1);
 
         /* test */
         userService.updatePassword(USER_1_ID, USER_1_PASSWORD_DTO);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java
index d52fe08cea..3ce4672df4 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java
@@ -57,6 +57,9 @@ public class ViewServiceIntegrationTest extends BaseUnitTest {
     @Autowired
     private ViewRepository viewRepository;
 
+    @Autowired
+    private UserRepository userRepository;
+
     @Autowired
     private TableRepository tableRepository;
 
@@ -94,6 +97,7 @@ public class ViewServiceIntegrationTest extends BaseUnitTest {
     public void beforeEach() {
         /* metadata database */
         imageRepository.save(IMAGE_1);
+        userRepository.saveAll(List.of(USER_1, USER_2));
         containerRepository.saveAll(List.of(CONTAINER_1_SIMPLE, CONTAINER_2_SIMPLE));
         databaseRepository.saveAll(List.of(DATABASE_1_SIMPLE, DATABASE_2_SIMPLE));
         tableRepository.saveAll(List.of(TABLE_1_SIMPLE, TABLE_2_SIMPLE, TABLE_3_SIMPLE, TABLE_4_SIMPLE, TABLE_5_SIMPLE, TABLE_6_SIMPLE, TABLE_7_SIMPLE));
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceIntegrationTest.java
index f581f6e98a..a1e884e337 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceIntegrationTest.java
@@ -61,6 +61,9 @@ public class ViewServicePersistenceIntegrationTest extends BaseUnitTest {
     @Autowired
     private ViewService viewService;
 
+    @Autowired
+    private UserRepository userRepository;
+
     @Container
     private static MariaDBContainer<?> mariaDBContainer = MariaDbContainerConfig.getContainer();
 
@@ -74,6 +77,7 @@ public class ViewServicePersistenceIntegrationTest extends BaseUnitTest {
     public void beforeEach() {
         /* metadata database */
         imageRepository.save(IMAGE_1);
+        userRepository.saveAll(List.of(USER_1, USER_2));
         containerRepository.saveAll(List.of(CONTAINER_1_SIMPLE, CONTAINER_2_SIMPLE));
         databaseRepository.saveAll(List.of(DATABASE_1_SIMPLE, DATABASE_2_SIMPLE));
         tableRepository.saveAll(List.of(TABLE_1_SIMPLE, TABLE_2_SIMPLE, TABLE_3_SIMPLE, TABLE_4_SIMPLE, TABLE_5_SIMPLE, TABLE_6_SIMPLE, TABLE_7_SIMPLE));
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AccessService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AccessService.java
index d3f4619ea0..26b8246e27 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AccessService.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/AccessService.java
@@ -44,8 +44,7 @@ public interface AccessService {
      * @throws DatabaseMalformedException The database has an invalid state.
      */
     void create(Long databaseId, DatabaseGiveAccessDto accessDto) throws DatabaseNotFoundException,
-            UserNotFoundException, NotAllowedException, QueryMalformedException, DatabaseMalformedException,
-            KeycloakRemoteException, AccessDeniedException;
+            UserNotFoundException, NotAllowedException, QueryMalformedException, DatabaseMalformedException;
 
     /**
      * Update access to a database.
@@ -61,7 +60,7 @@ public interface AccessService {
      */
     void update(Long databaseId, UUID userId, DatabaseModifyAccessDto accessDto) throws DatabaseNotFoundException,
             UserNotFoundException, QueryMalformedException, DatabaseMalformedException,
-            NotAllowedException, KeycloakRemoteException, AccessDeniedException;
+            NotAllowedException;
 
     /**
      * Revokes access to a database of container.
@@ -75,6 +74,5 @@ public interface AccessService {
      * @throws DatabaseMalformedException The database has an invalid state.
      */
     void delete(Long databaseId, UUID userId) throws DatabaseNotFoundException, UserNotFoundException,
-            NotAllowedException, QueryMalformedException, DatabaseMalformedException, KeycloakRemoteException,
-            AccessDeniedException;
+            NotAllowedException, QueryMalformedException, DatabaseMalformedException;
 }
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MessageQueueService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MessageQueueService.java
index 00f989a5bf..bfd0d4a1d3 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MessageQueueService.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MessageQueueService.java
@@ -9,7 +9,9 @@ import at.tuwien.exception.BrokerVirtualHostCreationException;
 import at.tuwien.exception.BrokerVirtualHostGrantException;
 import jakarta.annotation.PostConstruct;
 
+import java.io.IOException;
 import java.security.Principal;
+import java.util.concurrent.TimeoutException;
 
 public interface MessageQueueService {
 
@@ -19,7 +21,7 @@ public interface MessageQueueService {
      * @throws AmqpException The exchange could not be created.
      */
     @PostConstruct
-    void init() throws AmqpException;
+    void init() throws AmqpException, IOException, TimeoutException;
 
     /**
      * Creates an exchange for a database.
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
index ca0ee9a3b7..7e954a56c3 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
@@ -74,8 +74,7 @@ public class AccessServiceImpl extends HibernateConnector implements AccessServi
     @Override
     @Transactional
     public void create(Long databaseId, DatabaseGiveAccessDto accessDto) throws DatabaseNotFoundException,
-            UserNotFoundException, NotAllowedException, QueryMalformedException, DatabaseMalformedException,
-            KeycloakRemoteException, AccessDeniedException {
+            UserNotFoundException, NotAllowedException, QueryMalformedException, DatabaseMalformedException {
         /* check */
         final Database database = databaseService.findById(databaseId);
         final Container container = database.getContainer();
@@ -113,7 +112,7 @@ public class AccessServiceImpl extends HibernateConnector implements AccessServi
     @Transactional
     public void update(Long databaseId, UUID userId, DatabaseModifyAccessDto accessDto)
             throws DatabaseNotFoundException, UserNotFoundException, QueryMalformedException,
-            DatabaseMalformedException, NotAllowedException, KeycloakRemoteException, AccessDeniedException {
+            DatabaseMalformedException, NotAllowedException {
         /* check */
         final Database database = databaseService.findById(databaseId);
         final Container container = database.getContainer();
@@ -150,7 +149,7 @@ public class AccessServiceImpl extends HibernateConnector implements AccessServi
     @Transactional
     public void delete(Long databaseId, UUID userId)
             throws DatabaseNotFoundException, UserNotFoundException, NotAllowedException, QueryMalformedException,
-            DatabaseMalformedException, KeycloakRemoteException, AccessDeniedException {
+            DatabaseMalformedException {
         /* check */
         final Database database = databaseService.findById(databaseId);
         final Container container = database.getContainer();
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java
index 88f490be5d..7ed5ae79a5 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java
@@ -183,7 +183,7 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe
                 .stream()
                 .distinct()
                 .toList();
-        log.trace("found {} distinct databases", databases.size());
+        log.debug("found {} distinct databases where access for user with id {} is present", databases.size(), user.getId());
         for (Database database : databases) {
             final ComboPooledDataSource dataSource = getPrivilegedDataSource(database.getContainer().getImage(), database.getContainer());
             try {
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java
index db43f317d5..4027228547 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java
@@ -21,6 +21,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.rabbitmq.client.BuiltinExchangeType;
 import com.rabbitmq.client.Channel;
 import com.rabbitmq.client.Connection;
+import com.rabbitmq.client.ConnectionFactory;
 import lombok.extern.log4j.Log4j2;
 import org.apache.http.auth.BasicUserPrincipal;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
@@ -31,30 +32,33 @@ import org.springframework.transaction.annotation.Transactional;
 import java.io.IOException;
 import java.security.Principal;
 import java.util.List;
+import java.util.concurrent.TimeoutException;
 
 @Log4j2
 @Service
 public class RabbitMqServiceImpl implements MessageQueueService {
 
-    private Channel channel;
     private final AmqpConfig amqpConfig;
     private final AmqpMapper amqpMapper;
     private final ObjectMapper objectMapper;
     private final QueryService queryService;
     private final TableService tableService;
     private final TableRepository tableRepository;
+    private final ConnectionFactory connectionFactory;
     private final DatabaseRepository databaseRepository;
     private final BrokerServiceGateway brokerServiceGateway;
 
     public RabbitMqServiceImpl(AmqpConfig amqpConfig, AmqpMapper amqpMapper, ObjectMapper objectMapper,
                                QueryService queryService, TableService tableService, TableRepository tableRepository,
-                               DatabaseRepository databaseRepository, BrokerServiceGateway brokerServiceGateway) {
+                               ConnectionFactory connectionFactory, DatabaseRepository databaseRepository,
+                               BrokerServiceGateway brokerServiceGateway) {
         this.amqpConfig = amqpConfig;
         this.amqpMapper = amqpMapper;
         this.objectMapper = objectMapper;
         this.queryService = queryService;
         this.tableService = tableService;
         this.tableRepository = tableRepository;
+        this.connectionFactory = connectionFactory;
         this.databaseRepository = databaseRepository;
         this.brokerServiceGateway = brokerServiceGateway;
     }
@@ -77,7 +81,7 @@ public class RabbitMqServiceImpl implements MessageQueueService {
     @Override
     public void createExchange(Database database, Principal principal) throws AmqpException {
         try {
-            channel.exchangeDeclare(database.getExchangeName(), BuiltinExchangeType.DIRECT, true);
+            getChannel().exchangeDeclare(database.getExchangeName(), BuiltinExchangeType.DIRECT, true);
             log.info("Declared exchange {}", database.getExchangeName());
         } catch (IOException e) {
             log.error("Failed to declare exchange {}", database.getExchangeName());
@@ -89,6 +93,7 @@ public class RabbitMqServiceImpl implements MessageQueueService {
     @Transactional(readOnly = true)
     public void create(Table table) throws AmqpException {
         try {
+            final Channel channel = getChannel();
             channel.queueDeclare(table.getQueueName(), true, false, false, null);
             channel.queueBind(table.getQueueName(), table.getDatabase().getExchangeName(), table.getRoutingKey());
         } catch (IOException e) {
@@ -117,7 +122,7 @@ public class RabbitMqServiceImpl implements MessageQueueService {
     @Override
     public void deleteExchange(Database database) throws AmqpException {
         try {
-            channel.exchangeDelete(database.getExchangeName());
+            getChannel().exchangeDelete(database.getExchangeName());
             log.info("Deleted exchange {}", database.getExchangeName());
         } catch (IOException e) {
             log.error("Failed to delete exchange {}", database.getExchangeName());
@@ -128,13 +133,7 @@ public class RabbitMqServiceImpl implements MessageQueueService {
     @Override
     public void createConsumer(String queueName, Long databaseId, Long tableId) throws AmqpException {
         try {
-            if (!this.channel.isOpen()) {
-                log.warn("Channel with id {} is closed", this.channel.getChannelNumber());
-                final Connection tmp = this.amqpConfig.connectionFactory().newConnection();
-                this.channel = tmp.createChannel();
-                log.info("Opened channel with id {}", this.channel.getChannelNumber());
-            }
-            final String consumerTag = this.channel.basicConsume(queueName, true, new RabbitMqConsumer(databaseId, tableId, objectMapper, queryService));
+            final String consumerTag = getChannel().basicConsume(queueName, true, new RabbitMqConsumer(databaseId, tableId, objectMapper, queryService));
             log.debug("declared consumer for queue name {} with tag {}", queueName, consumerTag);
         } catch (IOException e) {
             log.error("Failed to create consumer for table with id {}, reason: {}", tableId, e.getMessage());
@@ -160,4 +159,12 @@ public class RabbitMqServiceImpl implements MessageQueueService {
         }
     }
 
+    protected Channel getChannel() throws IOException {
+        try {
+            return amqpConfig.getChannel(connectionFactory);
+        } catch (TimeoutException e) {
+            throw new IOException("Timeout", e);
+        }
+    }
+
 }
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/StoreServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/StoreServiceImpl.java
index 9c89af11d7..e7ac6a4cf3 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/StoreServiceImpl.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/StoreServiceImpl.java
@@ -105,7 +105,12 @@ public class StoreServiceImpl extends HibernateConnector implements StoreService
             log.error("Currently only MariaDB is supported");
             throw new ImageNotSupportedException("Currently only MariaDB is supported");
         }
-        final User user = userService.findByUsername(principal.getName());
+        final User user;
+        if (principal == null) {
+            user = userService.findByUsername("system");
+        } else {
+            user = userService.findByUsername(principal.getName());
+        }
         /* save */
         final ComboPooledDataSource dataSource = getPrivilegedDataSource(database.getContainer().getImage(),
                 database.getContainer(), database);
diff --git a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java
index f6001aed8e..840b7670fb 100644
--- a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java
+++ b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java
@@ -615,6 +615,17 @@ public abstract class BaseTest {
     public final static Principal USER_5_PRINCIPAL = new UsernamePasswordAuthenticationToken(USER_5_DETAILS,
             USER_5_PASSWORD, USER_5_DETAILS.getAuthorities());
 
+    public final static User USER_5 = User.builder()
+            .id(USER_5_ID)
+            .username(USER_5_USERNAME)
+            .email(USER_5_EMAIL)
+            .firstname(USER_5_FIRSTNAME)
+            .lastname(USER_5_LASTNAME)
+            .affiliation(USER_5_AFFILIATION)
+            .themeDark(USER_5_THEME_DARK)
+            .mariadbPassword(USER_5_DATABASE_PASSWORD)
+            .build(); 
+
     public final static UUID USER_6_ID = UUID.fromString("28ff851d-d7bc-4422-959c-edd7a5b15630");
     public final static String USER_6_USERNAME = "system";
     public final static String USER_6_FIRSTNAME = "System";
@@ -1021,8 +1032,11 @@ public abstract class BaseTest {
             .created(DATABASE_1_CREATED)
             .lastModified(DATABASE_1_LAST_MODIFIED)
             .createdBy(DATABASE_1_CREATOR)
+            .creator(USER_1)
             .ownedBy(DATABASE_1_OWNER)
+            .owner(USER_1)
             .contactPerson(USER_1_ID)
+            .contact(USER_1)
             .tables(List.of()) /* TABLE_1, TABLE_2, TABLE_3, TABLE_7 */
             .views(List.of()) /* VIEW_2, VIEW_3 */
             .build();
@@ -1152,8 +1166,11 @@ public abstract class BaseTest {
             .created(DATABASE_2_CREATED)
             .lastModified(DATABASE_2_LAST_MODIFIED)
             .createdBy(DATABASE_2_CREATOR)
-            .contactPerson(USER_2_ID)
+            .creator(USER_2)
             .ownedBy(DATABASE_2_OWNER)
+            .owner(USER_2)
+            .contactPerson(USER_2_ID)
+            .contact(USER_2)
             .tables(List.of()) /* TABLE_4, TABLE_5, TABLE_6 */
             .views(List.of()) /* VIEW_4 */
             .build();
@@ -1266,6 +1283,8 @@ public abstract class BaseTest {
     public final static String DATABASE_3_EXCHANGE = "dbrepo." + DATABASE_3_INTERNALNAME;
     public final static Instant DATABASE_3_CREATED = Instant.ofEpochSecond(1677399792) /* 2023-02-26 08:23:12 (UTC) */;
     public final static Instant DATABASE_3_LAST_MODIFIED = Instant.ofEpochSecond(1677399792) /* 2023-02-26 08:23:12 (UTC) */;
+    public final static UUID DATABASE_3_OWNER = USER_3_ID;
+    public final static UUID DATABASE_3_CREATOR = USER_3_ID;
 
     public final static Database DATABASE_3 = Database.builder()
             .id(DATABASE_3_ID)
@@ -1280,9 +1299,12 @@ public abstract class BaseTest {
             .exchangeName(DATABASE_3_EXCHANGE)
             .created(DATABASE_3_CREATED)
             .lastModified(DATABASE_3_LAST_MODIFIED)
+            .createdBy(DATABASE_3_CREATOR)
+            .creator(USER_3)
+            .ownedBy(DATABASE_3_OWNER)
+            .owner(USER_3)
             .contactPerson(USER_3_ID)
-            .createdBy(USER_3_ID)
-            .ownedBy(USER_3_ID)
+            .contact(USER_3)
             .tables(List.of()) /* TABLE_8 */
             .views(List.of()) /* VIEW_5 */
             .build();
@@ -1394,6 +1416,8 @@ public abstract class BaseTest {
     public final static String DATABASE_4_EXCHANGE = "dbrepo." + DATABASE_4_INTERNALNAME;
     public final static Instant DATABASE_4_CREATED = Instant.ofEpochSecond(1677399813) /* 2023-02-26 08:23:33 (UTC) */;
     public final static Instant DATABASE_4_LAST_MODIFIED = Instant.ofEpochSecond(1677399813) /* 2023-02-26 08:23:33 (UTC) */;
+    public final static UUID DATABASE_4_OWNER = USER_4_ID;
+    public final static UUID DATABASE_4_CREATOR = USER_4_ID;
 
     public final static Database DATABASE_4 = Database.builder()
             .id(DATABASE_4_ID)
@@ -1408,9 +1432,12 @@ public abstract class BaseTest {
             .exchangeName(DATABASE_4_EXCHANGE)
             .created(DATABASE_4_CREATED)
             .lastModified(DATABASE_4_LAST_MODIFIED)
+            .createdBy(DATABASE_4_CREATOR)
+            .creator(USER_4)
+            .ownedBy(DATABASE_4_OWNER)
+            .owner(USER_4)
             .contactPerson(USER_4_ID)
-            .createdBy(USER_4_ID)
-            .ownedBy(USER_4_ID)
+            .contact(USER_4)
             .tables(List.of())
             .views(List.of())
             .build();
diff --git a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/app/SearchSyncComponentTest.java b/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/app/SearchSyncComponentTest.java
index 0c069f26ab..81e8880fd4 100644
--- a/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/app/SearchSyncComponentTest.java
+++ b/dbrepo-search-sync-agent/rest-service/src/test/java/at/tuwien/app/SearchSyncComponentTest.java
@@ -45,9 +45,6 @@ public class SearchSyncComponentTest extends BaseUnitTest {
     @Autowired
     private IndexConfig indexConfig;
 
-    @Autowired
-    private RealmRepository realmRepository;
-
     @Autowired
     private UserRepository userRepository;
 
@@ -122,7 +119,6 @@ public class SearchSyncComponentTest extends BaseUnitTest {
 
     @BeforeEach
     public void beforeEach() {
-        realmRepository.save(REALM_DBREPO);
         licenseRepository.save(LICENSE_1);
         userRepository.save(USER_1);
         imageRepository.save(IMAGE_1);
-- 
GitLab