From 0219ffd3c512b18d93c3866da8a0a199c2585129 Mon Sep 17 00:00:00 2001 From: Lukasz Malek Date: Mon, 25 Jun 2018 15:18:23 +0200 Subject: [PATCH 01/46] bugfix/fix-run-on-production-mode Adding the missing implementation and added tests. --- .../coi/cascades/server/AppMainStartTest.java | 46 ++++++++++++ .../server/ProdactionHibernateTest.java | 18 +++++ .../hibernate/HibernateConfiguration.java | 17 +++++ .../hibernate/HibernateConfigurationTest.java | 29 ++++++++ .../DatabaseInstanceGatewayImpl.java | 53 ++++++++++++++ .../hibernate/DatabaseLimitGatewayImpl.java | 58 +++++++++++++++ .../DatabaseInstanceGatewayImplTest.java | 70 +++++++++++++++++++ .../DatabaseLimitGatewayImplTest.java | 64 +++++++++++++++++ 8 files changed, 355 insertions(+) create mode 100644 cascades-server/app/src/test/java/pl/gov/coi/cascades/server/AppMainStartTest.java create mode 100644 cascades-server/app/src/test/java/pl/gov/coi/cascades/server/ProdactionHibernateTest.java create mode 100644 cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImpl.java create mode 100644 cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImpl.java create mode 100644 cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImplTest.java create mode 100644 cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImplTest.java diff --git a/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/AppMainStartTest.java b/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/AppMainStartTest.java new file mode 100644 index 0000000..b6bc057 --- /dev/null +++ b/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/AppMainStartTest.java @@ -0,0 +1,46 @@ +package pl.gov.coi.cascades.server; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyVararg; +import static org.mockito.Mockito.when; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = AppMain.class) +@ProductionHibernateTest +public class AppMainStartTest { + + @Mock + private SpringApplicationFactory applicationFactory; + + @Mock + private SpringApplication application; + + @Mock + private ConfigurableApplicationContext applicationContext; + + @Test + public void shouldApplicationStartOnProductionProfile(){ + //given + AppMain.setAppMainSupplier(() -> new AppMain(applicationFactory)); + when(applicationFactory.create(any())) + .thenReturn(application); + when(application.run(anyVararg())) + .thenReturn(applicationContext); + when(applicationContext.isActive()).thenReturn(true); + + // when + try { + AppMain.main(new String[0]); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/ProdactionHibernateTest.java b/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/ProdactionHibernateTest.java new file mode 100644 index 0000000..4b98737 --- /dev/null +++ b/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/ProdactionHibernateTest.java @@ -0,0 +1,18 @@ +package pl.gov.coi.cascades.server; + +import org.springframework.test.context.ActiveProfiles; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author Agnieszka Celuch + * @since 13.04.17. + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@ActiveProfiles({Environment.PRODUCTION_NAME, ProfileType.HIBERNATE_NAME}) +@interface ProductionHibernateTest { +} diff --git a/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java index a3a028d..2cb34a0 100644 --- a/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java +++ b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java @@ -5,6 +5,8 @@ import org.springframework.context.annotation.Profile; import pl.gov.coi.cascades.server.ProfileType; import pl.gov.coi.cascades.server.domain.DatabaseIdGateway; +import pl.gov.coi.cascades.server.domain.DatabaseInstanceGateway; +import pl.gov.coi.cascades.server.domain.DatabaseLimitGateway; import pl.gov.coi.cascades.server.domain.DatabaseTypeClassNameService; import pl.gov.coi.cascades.server.domain.TemplateIdGateway; import pl.gov.coi.cascades.server.domain.UserGateway; @@ -39,4 +41,19 @@ DatabaseIdGateway createDatabaseIdGateway(DatabaseTypeClassNameService databaseT ); } + @Bean + @Transactional + DatabaseInstanceGateway createDatabaseInstanceGateway(DatabaseTypeClassNameService databaseTypeClassNameService) { + return new DatabaseInstanceGatewayImpl( + databaseTypeClassNameService + ); + } + + @Bean + @Transactional + DatabaseLimitGateway createDatabaseLimitGateway(DatabaseTypeClassNameService databaseTypeClassNameService) { + return new DatabaseLimitGatewayImpl( + databaseTypeClassNameService + ); + } } diff --git a/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfigurationTest.java b/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfigurationTest.java index adbc78d..96807c4 100644 --- a/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfigurationTest.java +++ b/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfigurationTest.java @@ -6,6 +6,8 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import pl.gov.coi.cascades.server.domain.DatabaseIdGateway; +import pl.gov.coi.cascades.server.domain.DatabaseInstanceGateway; +import pl.gov.coi.cascades.server.domain.DatabaseLimitGateway; import pl.gov.coi.cascades.server.domain.DatabaseTypeClassNameService; import pl.gov.coi.cascades.server.domain.TemplateIdGateway; import pl.gov.coi.cascades.server.domain.UserGateway; @@ -64,4 +66,31 @@ public void testCreateDatabaseIdGateway() throws Exception { assertThat(actual).isInstanceOf(DatabaseIdGatewayImpl.class); } + @Test + public void testDatabaseInstanceGateway() throws Exception { + // given + HibernateConfiguration hibernateConfiguration = new HibernateConfiguration(); + + // when + DatabaseInstanceGateway actual = hibernateConfiguration.createDatabaseInstanceGateway( + databaseTypeClassNameService + ); + + // then + assertThat(actual).isInstanceOf(DatabaseInstanceGatewayImpl.class); + } + + @Test + public void testDatabaseLimitGateway() throws Exception { + // given + HibernateConfiguration hibernateConfiguration = new HibernateConfiguration(); + + // when + DatabaseLimitGateway actual = hibernateConfiguration.createDatabaseLimitGateway( + databaseTypeClassNameService + ); + + // then + assertThat(actual).isInstanceOf(DatabaseLimitGatewayImpl.class); + } } diff --git a/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImpl.java b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImpl.java new file mode 100644 index 0000000..e7130ea --- /dev/null +++ b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImpl.java @@ -0,0 +1,53 @@ +package pl.gov.coi.cascades.server.persistance.hibernate; + +import com.google.common.annotations.VisibleForTesting; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import pl.gov.coi.cascades.server.domain.DatabaseInstance; +import pl.gov.coi.cascades.server.domain.DatabaseInstanceGateway; +import pl.gov.coi.cascades.server.domain.DatabaseTypeClassNameService; +import pl.gov.coi.cascades.server.persistance.hibernate.mapper.DatabaseInstanceMapper; + +import javax.inject.Inject; + +/** + * @author Łukasz Małek + */ +public class DatabaseInstanceGatewayImpl implements DatabaseInstanceGateway { + + private static final Logger DEFAULT_LOGGER = LoggerFactory.getLogger(DatabaseInstanceGatewayImpl.class); + private Logger logger; + private final DatabaseInstanceMapper databaseInstanceMapper; + + @Inject + public DatabaseInstanceGatewayImpl(DatabaseTypeClassNameService databaseTypeClassNameService) { + this( + new DatabaseInstanceMapper( + databaseTypeClassNameService + ), + DEFAULT_LOGGER + ); + } + + @VisibleForTesting + DatabaseInstanceGatewayImpl(DatabaseInstanceMapper databaseInstanceMapper, + Logger logger) { + this.databaseInstanceMapper = databaseInstanceMapper; + this.logger = logger; + } + + @Override + public DatabaseInstance launchDatabase(DatabaseInstance databaseInstance) { + return null; + } + + @Override + public void deleteDatabase(DatabaseInstance databaseInstance) { + + } + + @Override + public String getRemoteServerId() { + return null; + } +} diff --git a/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImpl.java b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImpl.java new file mode 100644 index 0000000..e3a935e --- /dev/null +++ b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImpl.java @@ -0,0 +1,58 @@ +package pl.gov.coi.cascades.server.persistance.hibernate; + +import com.google.common.annotations.VisibleForTesting; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import pl.gov.coi.cascades.server.domain.DatabaseLimitGateway; +import pl.gov.coi.cascades.server.domain.DatabaseTypeClassNameService; +import pl.gov.coi.cascades.server.domain.User; +import pl.gov.coi.cascades.server.persistance.hibernate.mapper.DatabaseInstanceMapper; + +import javax.inject.Inject; + +/** + * @author Łukasz Małek + */ +public class DatabaseLimitGatewayImpl implements DatabaseLimitGateway { + + private static final Logger DEFAULT_LOGGER = LoggerFactory.getLogger(DatabaseLimitGatewayImpl.class); + private Logger logger; + private final DatabaseInstanceMapper databaseInstanceMapper; + + @Inject + public DatabaseLimitGatewayImpl(DatabaseTypeClassNameService databaseTypeClassNameService) { + this( + new DatabaseInstanceMapper( + databaseTypeClassNameService + ), + DEFAULT_LOGGER + ); + } + + @VisibleForTesting + DatabaseLimitGatewayImpl(DatabaseInstanceMapper databaseInstanceMapper, + Logger logger) { + this.databaseInstanceMapper = databaseInstanceMapper; + this.logger = logger; + } + + @Override + public boolean isPersonalLimitExceeded(User user) { + return false; + } + + @Override + public int getPersonalLimitPerUser(User user) { + return 0; + } + + @Override + public boolean isGlobalLimitExceeded() { + return false; + } + + @Override + public int getGlobalLimit() { + return 0; + } +} diff --git a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImplTest.java b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImplTest.java new file mode 100644 index 0000000..717a749 --- /dev/null +++ b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImplTest.java @@ -0,0 +1,70 @@ +package pl.gov.coi.cascades.server.persistance.hibernate; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.runners.MockitoJUnitRunner; +import pl.gov.coi.cascades.contract.domain.DatabaseId; +import pl.gov.coi.cascades.contract.domain.DatabaseType; +import pl.gov.coi.cascades.contract.domain.NetworkBind; +import pl.gov.coi.cascades.contract.domain.UsernameAndPasswordCredentials; +import pl.gov.coi.cascades.server.domain.DatabaseInstance; +import pl.gov.coi.cascades.server.domain.DatabaseStatus; +import pl.gov.coi.cascades.server.persistance.stub.DatabaseTypeStub; +import pl.gov.coi.cascades.server.persistance.stub.NetworkBindStub; +import pl.gov.coi.cascades.server.persistance.stub.TemplateIdGatewayStub; +import pl.gov.coi.cascades.server.persistance.stub.UsernameAndPasswordCredentialsStub; + +import java.time.Instant; +import java.util.Date; + +import static junit.framework.TestCase.assertNull; + +/** + * @author Łukasz Małek + */ +@RunWith(MockitoJUnitRunner.class) +public class DatabaseInstanceGatewayImplTest { + + @InjectMocks + private DatabaseInstanceGatewayImpl databaseInstanceGateway; + + private static final DatabaseId DATABASE_ID1 = new DatabaseId("19"); + private static final DatabaseType DATABASE_TYPE = new DatabaseTypeStub(); + private static final UsernameAndPasswordCredentials USERNAME_AND_PASSWORD_CREDENTIALS1 = + new UsernameAndPasswordCredentialsStub("Ben Affleck"); + private static final NetworkBind NETWORK_BIND = new NetworkBindStub(5432, "db01.lab.internal"); + + @Test + public void shouldLaunchDatabase() { + //when + DatabaseInstance result = databaseInstanceGateway.launchDatabase(getDatabaseInstance()); + + //then + assertNull(result); + } + + @Test + public void shouldGetRemoteServerId() { + //when + String result = databaseInstanceGateway.getRemoteServerId(); + + //then + assertNull(result); + } + + private DatabaseInstance getDatabaseInstance() { + return new DatabaseInstance( + DATABASE_ID1, + TemplateIdGatewayStub.TEMPLATE_ID1, + DATABASE_TYPE, + "oracle 12c", + 1, + "ora12e34", + USERNAME_AND_PASSWORD_CREDENTIALS1, + NETWORK_BIND, + DatabaseStatus.LAUNCHED, + Date.from(Instant.now()) + ); + } +} diff --git a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImplTest.java b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImplTest.java new file mode 100644 index 0000000..bc5f87c --- /dev/null +++ b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImplTest.java @@ -0,0 +1,64 @@ +package pl.gov.coi.cascades.server.persistance.hibernate; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.runners.MockitoJUnitRunner; +import pl.gov.coi.cascades.server.domain.User; + +import static junit.framework.TestCase.assertEquals; +import static junit.framework.TestCase.assertFalse; + +/** + * @author Łukasz Małek + */ +@RunWith(MockitoJUnitRunner.class) +public class DatabaseLimitGatewayImplTest { + + private static final String USERNAME = "username"; + private static final String ID = "id"; + private static final String EMAIL = "email"; + + @InjectMocks + private DatabaseLimitGatewayImpl databaseLimitGateway; + + @Test + public void shouldBePersonalLimitExceeded() { + //when + boolean result = databaseLimitGateway.isPersonalLimitExceeded(getUser()); + + //then + assertFalse(result); + } + + @Test + public void shouldGetPersonalLimitPerUser() { + //when + int result = databaseLimitGateway.getPersonalLimitPerUser(getUser()); + + //then + assertEquals(0, result); + } + + @Test + public void shouldGlobalLimitExceeded() { + //when + boolean result = databaseLimitGateway.isGlobalLimitExceeded(); + + //then + assertFalse(result); + } + + @Test + public void shouldGetGlobalLimit() { + //when + int result = databaseLimitGateway.getPersonalLimitPerUser(getUser()); + + //then + assertEquals(0, result); + } + + private User getUser() { + return new User(USERNAME, ID, EMAIL); + } +} From dee19a6b47e5628057fa999a7313cef188c82470 Mon Sep 17 00:00:00 2001 From: Lukasz Malek Date: Mon, 25 Jun 2018 15:49:14 +0200 Subject: [PATCH 02/46] bugfix/fix-run-on-production-mode add author annotation --- .../pl/gov/coi/cascades/server/ProdactionHibernateTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/ProdactionHibernateTest.java b/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/ProdactionHibernateTest.java index 4b98737..8390217 100644 --- a/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/ProdactionHibernateTest.java +++ b/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/ProdactionHibernateTest.java @@ -8,8 +8,7 @@ import java.lang.annotation.Target; /** - * @author Agnieszka Celuch - * @since 13.04.17. + * @author Łukasz Małek */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) From de5a44faef9a08bc35765f79c997a588f8483159 Mon Sep 17 00:00:00 2001 From: Lukasz Malek Date: Tue, 26 Jun 2018 14:17:18 +0200 Subject: [PATCH 03/46] bugfix/fix-run-on-production-mode addition of corrections reported in the comments --- ...StartTest.java => AppMainStartTestIT.java} | 12 +-- .../server/ProdactionHibernateTest.java | 2 +- .../hibernate/HibernateConfiguration.java | 18 ++--- .../hibernate/HibernateConfigurationTest.java | 10 +-- .../hibernate/DatabaseIdGatewayImpl.java | 9 +-- .../DatabaseInstanceGatewayImpl.java | 25 +++--- .../hibernate/DatabaseLimitGatewayImpl.java | 29 ++++--- .../hibernate/TemplateIdGatewayImpl.java | 2 + .../hibernate/UserGatewayImpl.java | 13 ++-- .../hibernate/DatabaseIdGatewayImplTest.java | 15 +++- .../DatabaseInstanceGatewayImplTest.java | 78 +++++++++---------- .../DatabaseLimitGatewayImplTest.java | 56 +++++++------ .../hibernate/UserGatewayImplTest.java | 19 +++-- 13 files changed, 149 insertions(+), 139 deletions(-) rename cascades-server/app/src/test/java/pl/gov/coi/cascades/server/{AppMainStartTest.java => AppMainStartTestIT.java} (81%) diff --git a/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/AppMainStartTest.java b/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/AppMainStartTestIT.java similarity index 81% rename from cascades-server/app/src/test/java/pl/gov/coi/cascades/server/AppMainStartTest.java rename to cascades-server/app/src/test/java/pl/gov/coi/cascades/server/AppMainStartTestIT.java index b6bc057..bebf1ec 100644 --- a/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/AppMainStartTest.java +++ b/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/AppMainStartTestIT.java @@ -12,10 +12,13 @@ import static org.mockito.Matchers.anyVararg; import static org.mockito.Mockito.when; +/** + * @author Łukasz Małek + */ @RunWith(SpringRunner.class) @SpringBootTest(classes = AppMain.class) @ProductionHibernateTest -public class AppMainStartTest { +public class AppMainStartTestIT { @Mock private SpringApplicationFactory applicationFactory; @@ -30,10 +33,9 @@ public class AppMainStartTest { public void shouldApplicationStartOnProductionProfile(){ //given AppMain.setAppMainSupplier(() -> new AppMain(applicationFactory)); - when(applicationFactory.create(any())) - .thenReturn(application); - when(application.run(anyVararg())) - .thenReturn(applicationContext); + + when(applicationFactory.create(any())).thenReturn(application); + when(application.run(anyVararg())).thenReturn(applicationContext); when(applicationContext.isActive()).thenReturn(true); // when diff --git a/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/ProdactionHibernateTest.java b/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/ProdactionHibernateTest.java index 8390217..10d548f 100644 --- a/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/ProdactionHibernateTest.java +++ b/cascades-server/app/src/test/java/pl/gov/coi/cascades/server/ProdactionHibernateTest.java @@ -8,7 +8,7 @@ import java.lang.annotation.Target; /** - * @author Łukasz Małek + * @author Łukasz Małek */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) diff --git a/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java index 2cb34a0..553ff3b 100644 --- a/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java +++ b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java @@ -3,6 +3,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; +import org.springframework.transaction.annotation.EnableTransactionManagement; import pl.gov.coi.cascades.server.ProfileType; import pl.gov.coi.cascades.server.domain.DatabaseIdGateway; import pl.gov.coi.cascades.server.domain.DatabaseInstanceGateway; @@ -10,6 +11,8 @@ import pl.gov.coi.cascades.server.domain.DatabaseTypeClassNameService; import pl.gov.coi.cascades.server.domain.TemplateIdGateway; import pl.gov.coi.cascades.server.domain.UserGateway; +import pl.gov.coi.cascades.server.persistance.hibernate.mapper.DatabaseInstanceMapper; +import pl.gov.coi.cascades.server.persistance.hibernate.mapper.UserMapper; import javax.transaction.Transactional; @@ -22,38 +25,35 @@ public class HibernateConfiguration { @Bean - @Transactional TemplateIdGateway createTemplateIdGateway() { return new TemplateIdGatewayImpl(); } @Bean - @Transactional UserGateway createUserGateway(DatabaseTypeClassNameService databaseTypeClassNameService) { - return new UserGatewayImpl(databaseTypeClassNameService); + return new UserGatewayImpl( + new UserMapper(databaseTypeClassNameService) + ); } @Bean - @Transactional DatabaseIdGateway createDatabaseIdGateway(DatabaseTypeClassNameService databaseTypeClassNameService) { return new DatabaseIdGatewayImpl( - databaseTypeClassNameService + new DatabaseInstanceMapper(databaseTypeClassNameService) ); } @Bean - @Transactional DatabaseInstanceGateway createDatabaseInstanceGateway(DatabaseTypeClassNameService databaseTypeClassNameService) { return new DatabaseInstanceGatewayImpl( - databaseTypeClassNameService + new DatabaseInstanceMapper(databaseTypeClassNameService) ); } @Bean - @Transactional DatabaseLimitGateway createDatabaseLimitGateway(DatabaseTypeClassNameService databaseTypeClassNameService) { return new DatabaseLimitGatewayImpl( - databaseTypeClassNameService + new DatabaseInstanceMapper(databaseTypeClassNameService) ); } } diff --git a/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfigurationTest.java b/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfigurationTest.java index 96807c4..9a18821 100644 --- a/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfigurationTest.java +++ b/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfigurationTest.java @@ -35,7 +35,7 @@ public void testCreateTemplateIdGateway() throws Exception { TemplateIdGateway actual = hibernateConfiguration.createTemplateIdGateway(); // then - assertThat(actual).isInstanceOf(TemplateIdGatewayImpl.class); + assertThat(actual).isNotNull(); } @Test @@ -49,7 +49,7 @@ public void testCreateUserGateway() throws Exception { ); // then - assertThat(actual).isInstanceOf(UserGatewayImpl.class); + assertThat(actual).isNotNull(); } @Test @@ -63,7 +63,7 @@ public void testCreateDatabaseIdGateway() throws Exception { ); // then - assertThat(actual).isInstanceOf(DatabaseIdGatewayImpl.class); + assertThat(actual).isNotNull(); } @Test @@ -77,7 +77,7 @@ public void testDatabaseInstanceGateway() throws Exception { ); // then - assertThat(actual).isInstanceOf(DatabaseInstanceGatewayImpl.class); + assertThat(actual).isNotNull(); } @Test @@ -91,6 +91,6 @@ public void testDatabaseLimitGateway() throws Exception { ); // then - assertThat(actual).isInstanceOf(DatabaseLimitGatewayImpl.class); + assertThat(actual).isNotNull(); } } diff --git a/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseIdGatewayImpl.java b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseIdGatewayImpl.java index adc432e..bf39033 100644 --- a/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseIdGatewayImpl.java +++ b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseIdGatewayImpl.java @@ -16,12 +16,14 @@ import javax.persistence.NoResultException; import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; +import javax.transaction.Transactional; import java.util.Optional; /** * @author Agnieszka Celuch * @since 02.04.17. */ +@Transactional public class DatabaseIdGatewayImpl implements DatabaseIdGateway { private static final Logger DEFAULT_LOGGER = LoggerFactory.getLogger(DatabaseIdGatewayImpl.class); @@ -31,12 +33,9 @@ public class DatabaseIdGatewayImpl implements DatabaseIdGateway { private Logger logger; private final DatabaseInstanceMapper databaseInstanceMapper; - @Inject - public DatabaseIdGatewayImpl(DatabaseTypeClassNameService databaseTypeClassNameService) { + public DatabaseIdGatewayImpl(DatabaseInstanceMapper databaseInstanceMapper) { this( - new DatabaseInstanceMapper( - databaseTypeClassNameService - ), + databaseInstanceMapper, DEFAULT_LOGGER ); } diff --git a/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImpl.java b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImpl.java index e7130ea..07227d8 100644 --- a/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImpl.java +++ b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImpl.java @@ -5,26 +5,23 @@ import org.slf4j.LoggerFactory; import pl.gov.coi.cascades.server.domain.DatabaseInstance; import pl.gov.coi.cascades.server.domain.DatabaseInstanceGateway; -import pl.gov.coi.cascades.server.domain.DatabaseTypeClassNameService; import pl.gov.coi.cascades.server.persistance.hibernate.mapper.DatabaseInstanceMapper; -import javax.inject.Inject; +import javax.transaction.Transactional; /** - * @author Łukasz Małek + * @author Łukasz Małek */ +@Transactional public class DatabaseInstanceGatewayImpl implements DatabaseInstanceGateway { private static final Logger DEFAULT_LOGGER = LoggerFactory.getLogger(DatabaseInstanceGatewayImpl.class); private Logger logger; private final DatabaseInstanceMapper databaseInstanceMapper; - @Inject - public DatabaseInstanceGatewayImpl(DatabaseTypeClassNameService databaseTypeClassNameService) { + public DatabaseInstanceGatewayImpl(DatabaseInstanceMapper databaseInstanceMapper) { this( - new DatabaseInstanceMapper( - databaseTypeClassNameService - ), + databaseInstanceMapper, DEFAULT_LOGGER ); } @@ -37,17 +34,23 @@ public DatabaseInstanceGatewayImpl(DatabaseTypeClassNameService databaseTypeClas } @Override + @Deprecated public DatabaseInstance launchDatabase(DatabaseInstance databaseInstance) { - return null; + // TODO: write an implementation + throw new UnsupportedOperationException("Not yet implemented!"); } @Override + @Deprecated public void deleteDatabase(DatabaseInstance databaseInstance) { - + // TODO: write an implementation + throw new UnsupportedOperationException("Not yet implemented!"); } @Override + @Deprecated public String getRemoteServerId() { - return null; + // TODO: write an implementation + throw new UnsupportedOperationException("Not yet implemented!"); } } diff --git a/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImpl.java b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImpl.java index e3a935e..29b0ef5 100644 --- a/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImpl.java +++ b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImpl.java @@ -4,27 +4,24 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import pl.gov.coi.cascades.server.domain.DatabaseLimitGateway; -import pl.gov.coi.cascades.server.domain.DatabaseTypeClassNameService; import pl.gov.coi.cascades.server.domain.User; import pl.gov.coi.cascades.server.persistance.hibernate.mapper.DatabaseInstanceMapper; -import javax.inject.Inject; +import javax.transaction.Transactional; /** - * @author Łukasz Małek + * @author Łukasz Małek */ +@Transactional public class DatabaseLimitGatewayImpl implements DatabaseLimitGateway { private static final Logger DEFAULT_LOGGER = LoggerFactory.getLogger(DatabaseLimitGatewayImpl.class); private Logger logger; private final DatabaseInstanceMapper databaseInstanceMapper; - @Inject - public DatabaseLimitGatewayImpl(DatabaseTypeClassNameService databaseTypeClassNameService) { + public DatabaseLimitGatewayImpl(DatabaseInstanceMapper databaseInstanceMapper) { this( - new DatabaseInstanceMapper( - databaseTypeClassNameService - ), + databaseInstanceMapper, DEFAULT_LOGGER ); } @@ -37,22 +34,30 @@ public DatabaseLimitGatewayImpl(DatabaseTypeClassNameService databaseTypeClassNa } @Override + @Deprecated public boolean isPersonalLimitExceeded(User user) { - return false; + // TODO: write an implementation + throw new UnsupportedOperationException("Not yet implemented!"); } @Override + @Deprecated public int getPersonalLimitPerUser(User user) { - return 0; + // TODO: write an implementation + throw new UnsupportedOperationException("Not yet implemented!"); } @Override + @Deprecated public boolean isGlobalLimitExceeded() { - return false; + // TODO: write an implementation + throw new UnsupportedOperationException("Not yet implemented!"); } @Override + @Deprecated public int getGlobalLimit() { - return 0; + // TODO: write an implementation + throw new UnsupportedOperationException("Not yet implemented!"); } } diff --git a/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/TemplateIdGatewayImpl.java b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/TemplateIdGatewayImpl.java index 17dafe8..a36fc95 100644 --- a/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/TemplateIdGatewayImpl.java +++ b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/TemplateIdGatewayImpl.java @@ -13,12 +13,14 @@ import javax.persistence.NoResultException; import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; +import javax.transaction.Transactional; import java.util.Optional; /** * @author Agnieszka Celuch * @since 30.03.17. */ +@Transactional public class TemplateIdGatewayImpl implements TemplateIdGateway { private static final Logger DEFAULT_LOGGER = LoggerFactory.getLogger(TemplateIdGatewayImpl.class); diff --git a/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/UserGatewayImpl.java b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/UserGatewayImpl.java index 48fe552..b88fe95 100644 --- a/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/UserGatewayImpl.java +++ b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/UserGatewayImpl.java @@ -1,5 +1,6 @@ package pl.gov.coi.cascades.server.persistance.hibernate; +import com.google.common.annotations.VisibleForTesting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import pl.gov.coi.cascades.server.domain.DatabaseTypeClassNameService; @@ -33,16 +34,14 @@ public class UserGatewayImpl implements UserGateway { private EntityManager entityManager; private final UserMapper userMapper; - @Inject - public UserGatewayImpl(DatabaseTypeClassNameService databaseTypeClassNameService) { - this(databaseTypeClassNameService, DEFAULT_LOGGER); + public UserGatewayImpl(UserMapper userMapper) { + this(userMapper, DEFAULT_LOGGER); } - UserGatewayImpl(DatabaseTypeClassNameService databaseTypeClassNameService, + @VisibleForTesting + UserGatewayImpl(UserMapper userMapper, Logger logger) { - this.userMapper = new UserMapper( - databaseTypeClassNameService - ); + this.userMapper = userMapper; this.logger = logger; } diff --git a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseIdGatewayImplTest.java b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseIdGatewayImplTest.java index e856ff7..c037d7e 100644 --- a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseIdGatewayImplTest.java +++ b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseIdGatewayImplTest.java @@ -1,5 +1,6 @@ package pl.gov.coi.cascades.server.persistance.hibernate; +import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -64,6 +65,15 @@ public class DatabaseIdGatewayImplTest { @Rule public ExpectedException expectedException = ExpectedException.none(); + private DatabaseIdGatewayImpl databaseIdGatewayImpl; + + @Before + public void init() { + databaseIdGatewayImpl = new DatabaseIdGatewayImpl( + new DatabaseInstanceMapper(databaseTypeClassNameService) + ); + } + @Test public void testFind() throws Exception { // given @@ -90,9 +100,7 @@ public void testFind() throws Exception { when(databaseTypeDTO.onFail(any())).thenReturn(databaseTypeDTO); when(databaseTypeDTO.onSuccess(any())).thenReturn(databaseTypeDTO); doNothing().when(databaseTypeDTO).resolve(); - DatabaseIdGatewayImpl databaseIdGatewayImpl = new DatabaseIdGatewayImpl( - databaseTypeClassNameService - ); + Credentials credentials = new Credentials(); credentials.setPassword(PASSWORD); credentials.setUsername(USERNAME); @@ -158,5 +166,4 @@ public void testFindWhenExceptionOccurred() throws Exception { assertThat(actual.isPresent()).isFalse(); verify(logger, times(1)).error(contains("20170402:222713")); } - } diff --git a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImplTest.java b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImplTest.java index 717a749..abb0812 100644 --- a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImplTest.java +++ b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImplTest.java @@ -1,70 +1,62 @@ package pl.gov.coi.cascades.server.persistance.hibernate; +import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.mockito.runners.MockitoJUnitRunner; -import pl.gov.coi.cascades.contract.domain.DatabaseId; -import pl.gov.coi.cascades.contract.domain.DatabaseType; -import pl.gov.coi.cascades.contract.domain.NetworkBind; -import pl.gov.coi.cascades.contract.domain.UsernameAndPasswordCredentials; +import org.slf4j.Logger; import pl.gov.coi.cascades.server.domain.DatabaseInstance; -import pl.gov.coi.cascades.server.domain.DatabaseStatus; -import pl.gov.coi.cascades.server.persistance.stub.DatabaseTypeStub; -import pl.gov.coi.cascades.server.persistance.stub.NetworkBindStub; -import pl.gov.coi.cascades.server.persistance.stub.TemplateIdGatewayStub; -import pl.gov.coi.cascades.server.persistance.stub.UsernameAndPasswordCredentialsStub; - -import java.time.Instant; -import java.util.Date; - -import static junit.framework.TestCase.assertNull; +import pl.gov.coi.cascades.server.domain.DatabaseTypeClassNameService; +import pl.gov.coi.cascades.server.persistance.hibernate.mapper.DatabaseInstanceMapper; /** - * @author Łukasz Małek + * @author Łukasz Małek */ -@RunWith(MockitoJUnitRunner.class) public class DatabaseInstanceGatewayImplTest { - @InjectMocks + @Mock + private DatabaseTypeClassNameService databaseTypeClassNameService; + + @Rule + public MockitoRule mockitoRule = MockitoJUnit.rule(); + private DatabaseInstanceGatewayImpl databaseInstanceGateway; - private static final DatabaseId DATABASE_ID1 = new DatabaseId("19"); - private static final DatabaseType DATABASE_TYPE = new DatabaseTypeStub(); - private static final UsernameAndPasswordCredentials USERNAME_AND_PASSWORD_CREDENTIALS1 = - new UsernameAndPasswordCredentialsStub("Ben Affleck"); - private static final NetworkBind NETWORK_BIND = new NetworkBindStub(5432, "db01.lab.internal"); + @Before + public void init() { + databaseInstanceGateway = new DatabaseInstanceGatewayImpl( + new DatabaseInstanceMapper(databaseTypeClassNameService) + ); + } - @Test + @Test(expected = UnsupportedOperationException.class) public void shouldLaunchDatabase() { //when - DatabaseInstance result = databaseInstanceGateway.launchDatabase(getDatabaseInstance()); - - //then - assertNull(result); + databaseInstanceGateway.launchDatabase(getDatabaseInstance()); } - @Test + @Test(expected = UnsupportedOperationException.class) public void shouldGetRemoteServerId() { //when - String result = databaseInstanceGateway.getRemoteServerId(); - - //then - assertNull(result); + databaseInstanceGateway.getRemoteServerId(); } private DatabaseInstance getDatabaseInstance() { return new DatabaseInstance( - DATABASE_ID1, - TemplateIdGatewayStub.TEMPLATE_ID1, - DATABASE_TYPE, - "oracle 12c", - 1, - "ora12e34", - USERNAME_AND_PASSWORD_CREDENTIALS1, - NETWORK_BIND, - DatabaseStatus.LAUNCHED, - Date.from(Instant.now()) + null, + null, + null, + null, + 0, + null, + null, + null, + null, + null ); } } diff --git a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImplTest.java b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImplTest.java index bc5f87c..d7cd7b2 100644 --- a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImplTest.java +++ b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImplTest.java @@ -1,61 +1,59 @@ package pl.gov.coi.cascades.server.persistance.hibernate; +import org.junit.Before; +import org.junit.Rule; import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import pl.gov.coi.cascades.server.domain.User; - -import static junit.framework.TestCase.assertEquals; -import static junit.framework.TestCase.assertFalse; +import pl.gov.coi.cascades.server.persistance.hibernate.mapper.DatabaseInstanceMapper; /** - * @author Łukasz Małek + * @author Łukasz Małek */ -@RunWith(MockitoJUnitRunner.class) public class DatabaseLimitGatewayImplTest { private static final String USERNAME = "username"; private static final String ID = "id"; private static final String EMAIL = "email"; - @InjectMocks + @Mock + private DatabaseInstanceMapper databaseInstanceMapper; + + @Rule + public MockitoRule mockitoRule = MockitoJUnit.rule(); + private DatabaseLimitGatewayImpl databaseLimitGateway; - @Test + @Before + public void init() { + databaseLimitGateway = new DatabaseLimitGatewayImpl(databaseInstanceMapper); + } + + + @Test(expected = UnsupportedOperationException.class) public void shouldBePersonalLimitExceeded() { //when - boolean result = databaseLimitGateway.isPersonalLimitExceeded(getUser()); - - //then - assertFalse(result); + databaseLimitGateway.isPersonalLimitExceeded(getUser()); } - @Test + @Test(expected = UnsupportedOperationException.class) public void shouldGetPersonalLimitPerUser() { //when - int result = databaseLimitGateway.getPersonalLimitPerUser(getUser()); - - //then - assertEquals(0, result); + databaseLimitGateway.getPersonalLimitPerUser(getUser()); } - @Test + @Test(expected = UnsupportedOperationException.class) public void shouldGlobalLimitExceeded() { //when - boolean result = databaseLimitGateway.isGlobalLimitExceeded(); - - //then - assertFalse(result); + databaseLimitGateway.isGlobalLimitExceeded(); } - @Test + @Test(expected = UnsupportedOperationException.class) public void shouldGetGlobalLimit() { //when - int result = databaseLimitGateway.getPersonalLimitPerUser(getUser()); - - //then - assertEquals(0, result); + databaseLimitGateway.getPersonalLimitPerUser(getUser()); } private User getUser() { diff --git a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/UserGatewayImplTest.java b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/UserGatewayImplTest.java index 9e8edc9..6ea6dc3 100644 --- a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/UserGatewayImplTest.java +++ b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/UserGatewayImplTest.java @@ -1,5 +1,6 @@ package pl.gov.coi.cascades.server.persistance.hibernate; +import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -9,6 +10,7 @@ import org.slf4j.Logger; import pl.gov.coi.cascades.server.domain.DatabaseTypeClassNameService; import pl.gov.coi.cascades.server.domain.User; +import pl.gov.coi.cascades.server.persistance.hibernate.mapper.UserMapper; import javax.persistence.EntityManager; import javax.persistence.NoResultException; @@ -49,6 +51,13 @@ public class UserGatewayImplTest { @Rule public ExpectedException expectedException = ExpectedException.none(); + private UserGatewayImpl userGateway; + + @Before + public void init() { + userGateway = new UserGatewayImpl(new UserMapper(databaseTypeClassNameService)); + } + @Test public void testSave() throws Exception { // given @@ -60,9 +69,7 @@ public void testSave() throws Exception { id, email ); - UserGatewayImpl userGateway = new UserGatewayImpl( - databaseTypeClassNameService - ); + userGateway.setEntityManager(entityManager); // when @@ -84,9 +91,6 @@ public void testFind() throws Exception { user.setId(Long.parseLong(id)); user.setEmail(email); - UserGatewayImpl userGateway = new UserGatewayImpl( - databaseTypeClassNameService - ); userGateway.setEntityManager(entityManager); when(entityManager.createQuery(anyString(), any())).thenReturn(query); when(query.setParameter(anyString(), anyString())).thenReturn(query); @@ -116,7 +120,7 @@ public void testFindWhenExceptionOccurred() throws Exception { user.setEmail(email); UserGatewayImpl userGateway = new UserGatewayImpl( - databaseTypeClassNameService, + new UserMapper(databaseTypeClassNameService), logger ); userGateway.setEntityManager(entityManager); @@ -131,5 +135,4 @@ public void testFindWhenExceptionOccurred() throws Exception { assertThat(actual.isPresent()).isFalse(); verify(logger, times(1)).error(contains("20170329:171038")); } - } From f1e78f366bc6aebb9f796b709f4b0f14c2857197 Mon Sep 17 00:00:00 2001 From: Lukasz Malek Date: Tue, 26 Jun 2018 14:24:33 +0200 Subject: [PATCH 04/46] bugfix/fix-run-on-production-mode corrections imports --- .../server/persistance/hibernate/HibernateConfiguration.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java index 553ff3b..87e6759 100644 --- a/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java +++ b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java @@ -3,7 +3,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; -import org.springframework.transaction.annotation.EnableTransactionManagement; import pl.gov.coi.cascades.server.ProfileType; import pl.gov.coi.cascades.server.domain.DatabaseIdGateway; import pl.gov.coi.cascades.server.domain.DatabaseInstanceGateway; @@ -14,8 +13,6 @@ import pl.gov.coi.cascades.server.persistance.hibernate.mapper.DatabaseInstanceMapper; import pl.gov.coi.cascades.server.persistance.hibernate.mapper.UserMapper; -import javax.transaction.Transactional; - /** * @author Agnieszka Celuch * @since 02.04.17. From d168e3eab40dd36425e719e1c1c4160d67d658a9 Mon Sep 17 00:00:00 2001 From: Lukasz Malek Date: Tue, 26 Jun 2018 16:55:52 +0200 Subject: [PATCH 05/46] bugfix/fix-run-on-production-mode improvement of object initialization DatabaseInstance in the test --- .../hibernate/DatabaseInstanceGatewayImplTest.java | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImplTest.java b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImplTest.java index abb0812..8fea888 100644 --- a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImplTest.java +++ b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImplTest.java @@ -46,17 +46,6 @@ public void shouldGetRemoteServerId() { } private DatabaseInstance getDatabaseInstance() { - return new DatabaseInstance( - null, - null, - null, - null, - 0, - null, - null, - null, - null, - null - ); + return DatabaseInstance.builder().build(); } } From 8ae2c63cb6616e2d38adcea401042271bd2364c6 Mon Sep 17 00:00:00 2001 From: Lukasz Malek Date: Wed, 27 Jun 2018 13:52:27 +0200 Subject: [PATCH 06/46] bugfix/fix-run-on-production-mode add mock for tests --- .../hibernate/HibernateConfiguration.java | 34 ++++++------ .../hibernate/HibernateConfigurationTest.java | 53 ++++++++++++------- .../hibernate/DatabaseIdGatewayImpl.java | 6 +-- .../hibernate/UserGatewayImpl.java | 6 +-- .../hibernate/DatabaseIdGatewayImplTest.java | 7 ++- .../DatabaseInstanceGatewayImplTest.java | 10 ++-- .../DatabaseLimitGatewayImplTest.java | 5 +- .../hibernate/UserGatewayImplTest.java | 28 ++++++++-- 8 files changed, 95 insertions(+), 54 deletions(-) diff --git a/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java index 87e6759..ce47351 100644 --- a/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java +++ b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java @@ -27,30 +27,32 @@ TemplateIdGateway createTemplateIdGateway() { } @Bean - UserGateway createUserGateway(DatabaseTypeClassNameService databaseTypeClassNameService) { - return new UserGatewayImpl( - new UserMapper(databaseTypeClassNameService) - ); + UserGateway createUserGateway(UserMapper userMapper) { + return new UserGatewayImpl(userMapper); } @Bean - DatabaseIdGateway createDatabaseIdGateway(DatabaseTypeClassNameService databaseTypeClassNameService) { - return new DatabaseIdGatewayImpl( - new DatabaseInstanceMapper(databaseTypeClassNameService) - ); + DatabaseIdGateway createDatabaseIdGateway(DatabaseInstanceMapper databaseInstanceMapper) { + return new DatabaseIdGatewayImpl(databaseInstanceMapper); } @Bean - DatabaseInstanceGateway createDatabaseInstanceGateway(DatabaseTypeClassNameService databaseTypeClassNameService) { - return new DatabaseInstanceGatewayImpl( - new DatabaseInstanceMapper(databaseTypeClassNameService) - ); + DatabaseInstanceGateway createDatabaseInstanceGateway(DatabaseInstanceMapper databaseInstanceMapper) { + return new DatabaseInstanceGatewayImpl(databaseInstanceMapper); } @Bean - DatabaseLimitGateway createDatabaseLimitGateway(DatabaseTypeClassNameService databaseTypeClassNameService) { - return new DatabaseLimitGatewayImpl( - new DatabaseInstanceMapper(databaseTypeClassNameService) - ); + DatabaseLimitGateway createDatabaseLimitGateway(DatabaseInstanceMapper databaseInstanceMapper) { + return new DatabaseLimitGatewayImpl(databaseInstanceMapper); + } + + @Bean + UserMapper createUserMapper(DatabaseTypeClassNameService databaseTypeClassNameService) { + return new UserMapper(databaseTypeClassNameService); + } + + @Bean + DatabaseInstanceMapper createDatabaseInstanceMapper(DatabaseTypeClassNameService databaseTypeClassNameService) { + return new DatabaseInstanceMapper(databaseTypeClassNameService); } } diff --git a/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfigurationTest.java b/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfigurationTest.java index 9a18821..e633f1f 100644 --- a/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfigurationTest.java +++ b/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfigurationTest.java @@ -11,6 +11,8 @@ import pl.gov.coi.cascades.server.domain.DatabaseTypeClassNameService; import pl.gov.coi.cascades.server.domain.TemplateIdGateway; import pl.gov.coi.cascades.server.domain.UserGateway; +import pl.gov.coi.cascades.server.persistance.hibernate.mapper.DatabaseInstanceMapper; +import pl.gov.coi.cascades.server.persistance.hibernate.mapper.UserMapper; import static org.assertj.core.api.Assertions.assertThat; @@ -20,17 +22,22 @@ */ public class HibernateConfigurationTest { + @Mock + private UserMapper userMapper; + + @Mock + private DatabaseInstanceMapper databaseInstanceMapper; + @Mock private DatabaseTypeClassNameService databaseTypeClassNameService; @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + private HibernateConfiguration hibernateConfiguration = new HibernateConfiguration(); + @Test public void testCreateTemplateIdGateway() throws Exception { - // given - HibernateConfiguration hibernateConfiguration = new HibernateConfiguration(); - // when TemplateIdGateway actual = hibernateConfiguration.createTemplateIdGateway(); @@ -40,12 +47,9 @@ public void testCreateTemplateIdGateway() throws Exception { @Test public void testCreateUserGateway() throws Exception { - // given - HibernateConfiguration hibernateConfiguration = new HibernateConfiguration(); - // when UserGateway actual = hibernateConfiguration.createUserGateway( - databaseTypeClassNameService + userMapper ); // then @@ -54,12 +58,9 @@ public void testCreateUserGateway() throws Exception { @Test public void testCreateDatabaseIdGateway() throws Exception { - // given - HibernateConfiguration hibernateConfiguration = new HibernateConfiguration(); - // when DatabaseIdGateway actual = hibernateConfiguration.createDatabaseIdGateway( - databaseTypeClassNameService + databaseInstanceMapper ); // then @@ -68,12 +69,9 @@ public void testCreateDatabaseIdGateway() throws Exception { @Test public void testDatabaseInstanceGateway() throws Exception { - // given - HibernateConfiguration hibernateConfiguration = new HibernateConfiguration(); - // when DatabaseInstanceGateway actual = hibernateConfiguration.createDatabaseInstanceGateway( - databaseTypeClassNameService + databaseInstanceMapper ); // then @@ -82,11 +80,30 @@ public void testDatabaseInstanceGateway() throws Exception { @Test public void testDatabaseLimitGateway() throws Exception { - // given - HibernateConfiguration hibernateConfiguration = new HibernateConfiguration(); - // when DatabaseLimitGateway actual = hibernateConfiguration.createDatabaseLimitGateway( + databaseInstanceMapper + ); + + // then + assertThat(actual).isNotNull(); + } + + @Test + public void testUserMapper() throws Exception { + // when + UserMapper actual = hibernateConfiguration.createUserMapper( + databaseTypeClassNameService + ); + + // then + assertThat(actual).isNotNull(); + } + + @Test + public void testDatabaseInstanceMapper() throws Exception { + // when + DatabaseInstanceMapper actual = hibernateConfiguration.createDatabaseInstanceMapper( databaseTypeClassNameService ); diff --git a/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseIdGatewayImpl.java b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseIdGatewayImpl.java index bf39033..da6979d 100644 --- a/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseIdGatewayImpl.java +++ b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseIdGatewayImpl.java @@ -5,13 +5,11 @@ import org.slf4j.LoggerFactory; import pl.gov.coi.cascades.contract.domain.DatabaseId; import pl.gov.coi.cascades.server.domain.DatabaseIdGateway; -import pl.gov.coi.cascades.server.domain.DatabaseTypeClassNameService; import pl.gov.coi.cascades.server.persistance.hibernate.entity.DatabaseInstance; import pl.gov.coi.cascades.server.persistance.hibernate.mapper.DatabaseInstanceMapper; import pl.wavesoftware.eid.exceptions.Eid; import javax.annotation.Nullable; -import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.PersistenceContext; @@ -64,8 +62,8 @@ public Optional findInstance "WHERE instance.id = :databaseIdAsLong", DatabaseInstance.class ) - .setParameter(DATABASE_ID_FIELD, databaseIdAsLong) - .setMaxResults(1); + .setParameter(DATABASE_ID_FIELD, databaseIdAsLong) + .setMaxResults(1); return Optional.of(databaseInstanceMapper.fromHibernateEntity(query.getSingleResult())); } catch (NoResultException e) { diff --git a/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/UserGatewayImpl.java b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/UserGatewayImpl.java index b88fe95..0493228 100644 --- a/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/UserGatewayImpl.java +++ b/cascades-server/persistence-hibernate/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/UserGatewayImpl.java @@ -3,7 +3,6 @@ import com.google.common.annotations.VisibleForTesting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import pl.gov.coi.cascades.server.domain.DatabaseTypeClassNameService; import pl.gov.coi.cascades.server.domain.UserGateway; import pl.gov.coi.cascades.server.persistance.hibernate.entity.User; import pl.gov.coi.cascades.server.persistance.hibernate.mapper.UserMapper; @@ -11,7 +10,6 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -import javax.inject.Inject; import javax.inject.Singleton; import javax.persistence.EntityManager; import javax.persistence.NoResultException; @@ -59,8 +57,8 @@ public Optional find(@Nullable String us "WHERE user.username = :userName", User.class ) - .setParameter(USER_NAME_FIELD, userName) - .setMaxResults(1); + .setParameter(USER_NAME_FIELD, userName) + .setMaxResults(1); return Optional.of(userMapper.fromHibernateEntity(query.getSingleResult())); } catch (NoResultException e) { diff --git a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseIdGatewayImplTest.java b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseIdGatewayImplTest.java index c037d7e..fa7fd62 100644 --- a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseIdGatewayImplTest.java +++ b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseIdGatewayImplTest.java @@ -70,14 +70,16 @@ public class DatabaseIdGatewayImplTest { @Before public void init() { databaseIdGatewayImpl = new DatabaseIdGatewayImpl( - new DatabaseInstanceMapper(databaseTypeClassNameService) + databaseInstanceMapper ); } @Test public void testFind() throws Exception { // given + String username = "Kendrick Lamar"; String id = "123456789"; + String email = "klamar@example.org"; String PASSWORD = "12345678"; String USERNAME = "Ben Affleck"; String HOST = "db01.lab.internal"; @@ -133,6 +135,9 @@ public void testFind() throws Exception { when(query.setParameter(anyString(), anyString())).thenReturn(query); when(query.setMaxResults(anyInt())).thenReturn(query); when(query.getSingleResult()).thenReturn(hibernateInstance); + when(databaseInstanceMapper + .fromHibernateEntity(any(pl.gov.coi.cascades.server.persistance.hibernate.entity.DatabaseInstance.class))) + .thenReturn(DatabaseInstance.builder().build()); // when Optional actual = databaseIdGatewayImpl.findInstance(databaseId); diff --git a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImplTest.java b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImplTest.java index 8fea888..f55990a 100644 --- a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImplTest.java +++ b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseInstanceGatewayImplTest.java @@ -3,14 +3,10 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; -import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; -import org.mockito.runners.MockitoJUnitRunner; -import org.slf4j.Logger; import pl.gov.coi.cascades.server.domain.DatabaseInstance; -import pl.gov.coi.cascades.server.domain.DatabaseTypeClassNameService; import pl.gov.coi.cascades.server.persistance.hibernate.mapper.DatabaseInstanceMapper; /** @@ -19,7 +15,7 @@ public class DatabaseInstanceGatewayImplTest { @Mock - private DatabaseTypeClassNameService databaseTypeClassNameService; + private DatabaseInstanceMapper databaseInstanceMapper; @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @@ -28,8 +24,8 @@ public class DatabaseInstanceGatewayImplTest { @Before public void init() { - databaseInstanceGateway = new DatabaseInstanceGatewayImpl( - new DatabaseInstanceMapper(databaseTypeClassNameService) + databaseInstanceGateway = new DatabaseInstanceGatewayImpl( + databaseInstanceMapper ); } diff --git a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImplTest.java b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImplTest.java index d7cd7b2..4ed35d7 100644 --- a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImplTest.java +++ b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/DatabaseLimitGatewayImplTest.java @@ -28,7 +28,10 @@ public class DatabaseLimitGatewayImplTest { @Before public void init() { - databaseLimitGateway = new DatabaseLimitGatewayImpl(databaseInstanceMapper); + databaseLimitGateway = + new DatabaseLimitGatewayImpl( + databaseInstanceMapper + ); } diff --git a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/UserGatewayImplTest.java b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/UserGatewayImplTest.java index 6ea6dc3..2a22f3e 100644 --- a/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/UserGatewayImplTest.java +++ b/cascades-server/persistence-hibernate/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/UserGatewayImplTest.java @@ -39,6 +39,9 @@ public class UserGatewayImplTest { @Mock private EntityManager entityManager; + @Mock + private UserMapper userMapper; + @Mock private TypedQuery query; @@ -55,7 +58,9 @@ public class UserGatewayImplTest { @Before public void init() { - userGateway = new UserGatewayImpl(new UserMapper(databaseTypeClassNameService)); + userGateway = new UserGatewayImpl( + userMapper + ); } @Test @@ -70,6 +75,13 @@ public void testSave() throws Exception { email ); + pl.gov.coi.cascades.server.persistance.hibernate.entity.User userEntity = + new pl.gov.coi.cascades.server.persistance.hibernate.entity.User(); + userEntity.setUsername(username); + userEntity.setId(Long.parseLong(id)); + userEntity.setEmail(email); + + when(userMapper.toHibernateEntity(user)).thenReturn(userEntity); userGateway.setEntityManager(entityManager); // when @@ -86,16 +98,24 @@ public void testFind() throws Exception { String username = "Kendrick Lamar"; String id = "123456789"; String email = "klamar@example.org"; - pl.gov.coi.cascades.server.persistance.hibernate.entity.User user = new pl.gov.coi.cascades.server.persistance.hibernate.entity.User(); + pl.gov.coi.cascades.server.persistance.hibernate.entity.User user = + new pl.gov.coi.cascades.server.persistance.hibernate.entity.User(); user.setUsername(username); user.setId(Long.parseLong(id)); user.setEmail(email); + User userDomain = new User( + username, + id, + email + ); + userGateway.setEntityManager(entityManager); when(entityManager.createQuery(anyString(), any())).thenReturn(query); when(query.setParameter(anyString(), anyString())).thenReturn(query); when(query.setMaxResults(anyInt())).thenReturn(query); when(query.getSingleResult()).thenReturn(user); + when(userMapper.fromHibernateEntity(user)).thenReturn(userDomain); // when Optional actual = userGateway.find(username); @@ -114,7 +134,9 @@ public void testFindWhenExceptionOccurred() throws Exception { String id = "123456789"; String email = "klamar@example.org"; NoResultException exception = new NoResultException("There is no result."); - pl.gov.coi.cascades.server.persistance.hibernate.entity.User user = new pl.gov.coi.cascades.server.persistance.hibernate.entity.User(); + + pl.gov.coi.cascades.server.persistance.hibernate.entity.User user = + new pl.gov.coi.cascades.server.persistance.hibernate.entity.User(); user.setUsername(username); user.setId(Long.parseLong(id)); user.setEmail(email); From 689dec824d6151976b5e2477faf87f2ad73f1eee Mon Sep 17 00:00:00 2001 From: Lukasz Malek Date: Thu, 28 Jun 2018 20:01:57 +0200 Subject: [PATCH 07/46] feature/create-database-instance-save-in-h2-developer-mode add create DatabaseOperation/Stub to create database anad save information in databaseInstane entity. --- .../application-development.properties | 8 +++ .../server/DatabaseOperationsImpl.java | 53 +++++++++++++++++++ .../coi/cascades/server/NetworkBindImpl.java | 19 +++++++ .../server/domain/DomainConfiguration.java | 6 ++- .../hibernate/HibernateConfiguration.java | 9 ++++ ...DefaultOnDevelopmentAutoConfiguration.java | 7 +++ .../domain/DomainConfigurationTest.java | 6 ++- .../hibernate/HibernateConfigurationTest.java | 7 +++ .../LaunchNewDatabaseGatewayFacade.java | 36 ++++++------- .../LaunchNewDatabaseGatewayFacadeTest.java | 12 +++-- .../domain/DatabaseInstanceGateway.java | 2 +- .../server/domain/DatabaseOperations.java | 22 ++++++++ .../server/domain/DatabaseInstanceTest.java | 1 - .../stub/DatabaseInstanceGatewayStub.java | 2 +- .../stub/DatabaseOperationsStub.java | 48 +++++++++++++++++ .../persistance/stub/NetworkBindStub.java | 1 + .../stub/DatabaseInstanceGatewayStubTest.java | 4 +- .../DatabaseInstanceGatewayImpl.java | 24 ++++++--- .../hibernate/DatabaseLimitGatewayImpl.java | 9 ++-- .../supplier/template/Eaba275Supplier.java | 2 +- .../supplier/template/F4ab6a58Supplier.java | 2 +- .../mapper/DatabaseInstanceMapper.java | 1 - .../DatabaseInstanceGatewayImplTest.java | 6 ++- .../DatabaseLimitGatewayImplTest.java | 8 +-- 24 files changed, 241 insertions(+), 54 deletions(-) create mode 100644 cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/DatabaseOperationsImpl.java create mode 100644 cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/NetworkBindImpl.java create mode 100644 cascades-server/domain/model/src/main/java/pl/gov/coi/cascades/server/domain/DatabaseOperations.java create mode 100644 cascades-server/persistance-stub/src/main/java/pl/gov/coi/cascades/server/persistance/stub/DatabaseOperationsStub.java diff --git a/cascades-server/app/src/main/resources/application-development.properties b/cascades-server/app/src/main/resources/application-development.properties index 51b6055..f250521 100644 --- a/cascades-server/app/src/main/resources/application-development.properties +++ b/cascades-server/app/src/main/resources/application-development.properties @@ -1 +1,9 @@ spring.datasource.url=jdbc:h2:mem:CASCADES;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE + + +cascades.managed-servers[0].serverId=rgey65getg +cascades.managed-servers[0].type=stub +cascades.managed-servers[0].dbname=test +cascades.managed-servers[0].password="passwrd +cascades.managed-servers[0].host=172.17.0.3 +cascades.managed-servers[0].port=5432 diff --git a/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/DatabaseOperationsImpl.java b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/DatabaseOperationsImpl.java new file mode 100644 index 0000000..2697547 --- /dev/null +++ b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/DatabaseOperationsImpl.java @@ -0,0 +1,53 @@ +package pl.gov.coi.cascades.server; + +import lombok.AllArgsConstructor; +import pl.gov.coi.cascades.contract.domain.NetworkBind; +import pl.gov.coi.cascades.contract.domain.Template; +import pl.gov.coi.cascades.server.domain.DatabaseInstance; +import pl.gov.coi.cascades.server.domain.DatabaseOperations; +import pl.gov.coi.cascades.server.domain.TemplateIdGateway; +import pl.wavesoftware.eid.exceptions.EidIllegalArgumentException; + +import java.util.List; + +@AllArgsConstructor +public class DatabaseOperationsImpl implements DatabaseOperations { + + private ServerConfigurationService serverConfigurationService; + private TemplateIdGateway templateIdGateway; + + @Override + @Deprecated + public NetworkBind createDatabase(DatabaseInstance databaseInstance) { + String templateId = databaseInstance.getTemplate().getId(); + NetworkBind networkBind = getNetworkBind(templateId); + // TODO: write implementation + + return networkBind; + } + + @Override + @Deprecated + public void deleteDatabase(DatabaseInstance databaseInstance) { + throw new UnsupportedOperationException("Not yet implemented!"); + } + + private NetworkBind getNetworkBind(String templateId) { + Template template = + templateIdGateway.find(templateId).isPresent() ? templateIdGateway.find(templateId).get() : null; + + if (template != null) { + List managedServers = serverConfigurationService.getManagedServers(); + for (ServerDef managedServer : managedServers) { + if (managedServer.getServerId().equalsIgnoreCase(template.getServerId())) { + return new NetworkBindImpl(managedServer.getHost(), managedServer.getPort()); + } + } + } + + throw new EidIllegalArgumentException( + "20180628:191916", + "Given templateId with serverID hasn't been found in connection settings." + ); + } +} diff --git a/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/NetworkBindImpl.java b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/NetworkBindImpl.java new file mode 100644 index 0000000..9eff1e5 --- /dev/null +++ b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/NetworkBindImpl.java @@ -0,0 +1,19 @@ +package pl.gov.coi.cascades.server; + + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import pl.gov.coi.cascades.contract.domain.NetworkBind; + +@AllArgsConstructor +public class NetworkBindImpl implements NetworkBind { + + @Getter + @Setter + private String host; + + @Getter + @Setter + private int port; +} diff --git a/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/domain/DomainConfiguration.java b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/domain/DomainConfiguration.java index 2eaaa61..e090956 100644 --- a/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/domain/DomainConfiguration.java +++ b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/domain/DomainConfiguration.java @@ -36,12 +36,14 @@ UseCase produceLaunchNewDatabaseUseCase(LaunchNewDatabaseGatewayFacade launchNew LaunchNewDatabaseGatewayFacade produceGateways(TemplateIdGateway templateIdGateway, UserGateway userGateway, DatabaseLimitGateway databaseLimitGateway, - DatabaseInstanceGateway databaseInstanceGateway) { + DatabaseInstanceGateway databaseInstanceGateway, + DatabaseOperations databaseOperations) { return new LaunchNewDatabaseGatewayFacade( templateIdGateway, userGateway, databaseLimitGateway, - databaseInstanceGateway + databaseInstanceGateway, + databaseOperations ); } diff --git a/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java index ce47351..cfdea55 100644 --- a/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java +++ b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfiguration.java @@ -3,10 +3,13 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; +import pl.gov.coi.cascades.server.DatabaseOperationsImpl; import pl.gov.coi.cascades.server.ProfileType; +import pl.gov.coi.cascades.server.ServerConfigurationService; import pl.gov.coi.cascades.server.domain.DatabaseIdGateway; import pl.gov.coi.cascades.server.domain.DatabaseInstanceGateway; import pl.gov.coi.cascades.server.domain.DatabaseLimitGateway; +import pl.gov.coi.cascades.server.domain.DatabaseOperations; import pl.gov.coi.cascades.server.domain.DatabaseTypeClassNameService; import pl.gov.coi.cascades.server.domain.TemplateIdGateway; import pl.gov.coi.cascades.server.domain.UserGateway; @@ -55,4 +58,10 @@ UserMapper createUserMapper(DatabaseTypeClassNameService databaseTypeClassNameSe DatabaseInstanceMapper createDatabaseInstanceMapper(DatabaseTypeClassNameService databaseTypeClassNameService) { return new DatabaseInstanceMapper(databaseTypeClassNameService); } + + @Bean + DatabaseOperations createDatabaseOperations(ServerConfigurationService serverConfigurationService, + TemplateIdGateway templateIdGateway) { + return new DatabaseOperationsImpl(serverConfigurationService, templateIdGateway); + } } diff --git a/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/stub/PersistanceStubByDefaultOnDevelopmentAutoConfiguration.java b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/stub/PersistanceStubByDefaultOnDevelopmentAutoConfiguration.java index 9d5618b..a285e69 100644 --- a/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/stub/PersistanceStubByDefaultOnDevelopmentAutoConfiguration.java +++ b/cascades-server/configuration/src/main/java/pl/gov/coi/cascades/server/persistance/stub/PersistanceStubByDefaultOnDevelopmentAutoConfiguration.java @@ -9,6 +9,7 @@ import pl.gov.coi.cascades.server.domain.DatabaseIdGateway; import pl.gov.coi.cascades.server.domain.DatabaseInstanceGateway; import pl.gov.coi.cascades.server.domain.DatabaseLimitGateway; +import pl.gov.coi.cascades.server.domain.DatabaseOperations; import pl.gov.coi.cascades.server.domain.DatabaseTemplateGateway; import pl.gov.coi.cascades.server.domain.TemplateIdGateway; import pl.gov.coi.cascades.server.domain.User; @@ -52,6 +53,12 @@ DatabaseInstanceGateway produceDatabaseInstanceGateway() { return new DatabaseInstanceGatewayStub(); } + @ConditionalOnMissingBean + @Bean + DatabaseOperations produceDatabaseOperations() { + return new DatabaseOperationsStub(); + } + @ConditionalOnMissingBean @Bean UserGateway produceUserGateway(@Named(STUB_DATABASE) Map database) { diff --git a/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/domain/DomainConfigurationTest.java b/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/domain/DomainConfigurationTest.java index cd72d3c..061bf8e 100644 --- a/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/domain/DomainConfigurationTest.java +++ b/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/domain/DomainConfigurationTest.java @@ -57,6 +57,9 @@ public class DomainConfigurationTest { @Mock private TemplateIdGeneratorService templateIdGeneratorService; + @Mock + private DatabaseOperations databaseOperations; + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @@ -104,7 +107,8 @@ public void testProduceGateways() throws Exception { templateIdGateway, userGateway, databaseLimitGateway, - databaseInstanceGateway + databaseInstanceGateway, + databaseOperations ); // then diff --git a/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfigurationTest.java b/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfigurationTest.java index e633f1f..7acef59 100644 --- a/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfigurationTest.java +++ b/cascades-server/configuration/src/test/java/pl/gov/coi/cascades/server/persistance/hibernate/HibernateConfigurationTest.java @@ -5,6 +5,8 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; +import pl.gov.coi.cascades.contract.domain.NetworkBind; +import pl.gov.coi.cascades.server.ServerConfigurationService; import pl.gov.coi.cascades.server.domain.DatabaseIdGateway; import pl.gov.coi.cascades.server.domain.DatabaseInstanceGateway; import pl.gov.coi.cascades.server.domain.DatabaseLimitGateway; @@ -14,6 +16,8 @@ import pl.gov.coi.cascades.server.persistance.hibernate.mapper.DatabaseInstanceMapper; import pl.gov.coi.cascades.server.persistance.hibernate.mapper.UserMapper; +import java.util.List; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -31,6 +35,9 @@ public class HibernateConfigurationTest { @Mock private DatabaseTypeClassNameService databaseTypeClassNameService; + @Mock + private List networkBindList; + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); diff --git a/cascades-server/domain/logic/src/main/java/pl/gov/coi/cascades/server/domain/launchdatabase/LaunchNewDatabaseGatewayFacade.java b/cascades-server/domain/logic/src/main/java/pl/gov/coi/cascades/server/domain/launchdatabase/LaunchNewDatabaseGatewayFacade.java index a89f7c3..69d1360 100644 --- a/cascades-server/domain/logic/src/main/java/pl/gov/coi/cascades/server/domain/launchdatabase/LaunchNewDatabaseGatewayFacade.java +++ b/cascades-server/domain/logic/src/main/java/pl/gov/coi/cascades/server/domain/launchdatabase/LaunchNewDatabaseGatewayFacade.java @@ -1,9 +1,12 @@ package pl.gov.coi.cascades.server.domain.launchdatabase; +import lombok.AllArgsConstructor; +import pl.gov.coi.cascades.contract.domain.NetworkBind; import pl.gov.coi.cascades.contract.domain.Template; import pl.gov.coi.cascades.server.domain.DatabaseInstance; import pl.gov.coi.cascades.server.domain.DatabaseInstanceGateway; import pl.gov.coi.cascades.server.domain.DatabaseLimitGateway; +import pl.gov.coi.cascades.server.domain.DatabaseOperations; import pl.gov.coi.cascades.server.domain.TemplateIdGateway; import pl.gov.coi.cascades.server.domain.User; import pl.gov.coi.cascades.server.domain.UserGateway; @@ -15,31 +18,14 @@ * @author Agnieszka Celuch * @since 05.04.17. */ +@AllArgsConstructor public class LaunchNewDatabaseGatewayFacade { private TemplateIdGateway templateIdGateway; private UserGateway userGateway; private DatabaseLimitGateway databaseLimitGateway; private DatabaseInstanceGateway databaseInstanceGateway; - - /** - * Default parameter constructor. - * - * @param templateIdGateway Given gateway of templateId. - * @param userGateway Given gateway of user. - * @param databaseLimitGateway Given gateway of database limit. - * @param databaseInstanceGateway Given gateway of database instance. - */ - @Inject - public LaunchNewDatabaseGatewayFacade(TemplateIdGateway templateIdGateway, - UserGateway userGateway, - DatabaseLimitGateway databaseLimitGateway, - DatabaseInstanceGateway databaseInstanceGateway) { - this.templateIdGateway = templateIdGateway; - this.userGateway = userGateway; - this.databaseLimitGateway = databaseLimitGateway; - this.databaseInstanceGateway = databaseInstanceGateway; - } + private DatabaseOperations databaseOperations; Optional