package io.ebean; import io.ebean.config.*; import io.ebean.config.dbplatform.mysql.MySqlPlatform; import io.ebean.config.dbplatform.postgres.PostgresPlatform; import org.junit.Test; import org.mockito.Mockito; import javax.sql.DataSource; public class EbeanServerFactory_MultiTenancy_Test { /** * Tests using multi tenancy per database */ @Test public void create_new_server_with_multi_tenancy_db() { String tenant = "customer"; CurrentTenantProvider tenantProvider = Mockito.mock(CurrentTenantProvider.class); Mockito.doReturn(tenant).when(tenantProvider).currentId(); DataSource mockedDataSource = Mockito.mock(DataSource.class); TenantDataSourceProvider dataSourceProvider = Mockito.mock(TenantDataSourceProvider.class); Mockito.doReturn(mockedDataSource).when(dataSourceProvider).dataSource(tenant); ServerConfig config = new ServerConfig(); config.setName("multiTenantDb"); config.loadFromProperties(); config.loadTestProperties(); config.setRegister(false); config.setDefaultServer(false); config.setTenantMode(TenantMode.DB); config.setCurrentTenantProvider(tenantProvider); config.setTenantDataSourceProvider(dataSourceProvider); // When TenantMode.DB we don't really want to run DDL // and we want to explicitly specify the Database platform //config.setDdlGenerate(false); //config.setDdlRun(false); config.setDatabasePlatform(new PostgresPlatform()); EbeanServerFactory.create(config); } /** * Tests using multi tenancy per schema */ @Test public void create_new_server_with_multi_tenancy_schema() { String tenant = "customer"; CurrentTenantProvider tenantProvider = Mockito.mock(CurrentTenantProvider.class); Mockito.doReturn(tenant).when(tenantProvider).currentId(); TenantSchemaProvider schemaProvider = Mockito.mock(TenantSchemaProvider.class); Mockito.doReturn("tenant_schema").when(schemaProvider).schema(tenant); ServerConfig config = new ServerConfig(); config.setName("h2"); config.loadFromProperties(); config.loadTestProperties(); config.setRegister(false); config.setDefaultServer(false); config.setTenantMode(TenantMode.SCHEMA); config.setCurrentTenantProvider(tenantProvider); config.setTenantSchemaProvider(schemaProvider); config.setDdlRun(false); config.setDatabasePlatform(new MySqlPlatform()); EbeanServerFactory.create(config); } /** * Tests using multi tenancy per schema */ @Test public void create_new_server_with_multi_tenancy_catalog() { String tenant = "customer"; CurrentTenantProvider tenantProvider = Mockito.mock(CurrentTenantProvider.class); Mockito.doReturn(tenant).when(tenantProvider).currentId(); TenantCatalogProvider catalogProvider = Mockito.mock(TenantCatalogProvider.class); Mockito.doReturn("tenant_catalog").when(catalogProvider).catalog(tenant); ServerConfig config = new ServerConfig(); config.setName("h2"); config.loadFromProperties(); config.loadTestProperties(); config.setRegister(false); config.setDefaultServer(false); config.setTenantMode(TenantMode.CATALOG); config.setCurrentTenantProvider(tenantProvider); config.setTenantCatalogProvider(catalogProvider); config.setDdlRun(false); config.setDatabasePlatform(new MySqlPlatform()); EbeanServerFactory.create(config); } }