mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
Merge branch 'master' into wip/EntityBeanIntercept-interface
This commit is contained in:
@@ -68,6 +68,8 @@ public abstract class BaseTestCase {
|
||||
DB_CLOCK_DELTA = 100;
|
||||
}
|
||||
try {
|
||||
String propsFile = System.getProperty("props.file");
|
||||
System.out.println("BaseTestCase: -Dprops.file=" + propsFile); // help debug CI
|
||||
// First try, if we get the default server. If this fails, all tests will fail.
|
||||
DB.getDefault();
|
||||
} catch (Throwable e) {
|
||||
|
||||
@@ -1,202 +0,0 @@
|
||||
package io.ebean.xtest.config;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.ebean.annotation.MutationDetection;
|
||||
import io.ebean.annotation.PersistBatch;
|
||||
import io.ebean.config.DatabaseConfig;
|
||||
import io.ebean.config.JsonConfig;
|
||||
import io.ebean.config.MatchingNamingConvention;
|
||||
import io.ebean.config.PlatformConfig;
|
||||
import io.ebean.config.dbplatform.IdType;
|
||||
import io.ebean.datasource.DataSourceConfig;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
public class DatabaseConfigTest {
|
||||
|
||||
@Test
|
||||
public void testLoadFromEbeanProperties() {
|
||||
|
||||
DatabaseConfig config = new DatabaseConfig();
|
||||
config.loadFromProperties();
|
||||
|
||||
assertEquals(PersistBatch.NONE, config.getPersistBatch());
|
||||
assertNotNull(config.getProperties());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void evalPropertiesInput() {
|
||||
|
||||
String home = System.getProperty("user.home");
|
||||
String fileSeparator = System.getProperty("file.separator");
|
||||
|
||||
Properties props = new Properties();
|
||||
props.setProperty("ddl.initSql", "${user.home}" + fileSeparator + "initSql");
|
||||
|
||||
DatabaseConfig config = new DatabaseConfig();
|
||||
config.loadFromProperties(props);
|
||||
|
||||
String ddlInitSql = config.getDdlInitSql();
|
||||
assertThat(ddlInitSql).isEqualTo(home + fileSeparator + "initSql");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoadWithProperties() {
|
||||
|
||||
DatabaseConfig config = new DatabaseConfig();
|
||||
config.setPersistBatch(PersistBatch.NONE);
|
||||
config.setPersistBatchOnCascade(PersistBatch.NONE);
|
||||
config.setAutoReadOnlyDataSource(false);
|
||||
config.setReadOnlyDataSource(null);
|
||||
config.setReadOnlyDataSourceConfig(new DataSourceConfig());
|
||||
|
||||
Properties props = new Properties();
|
||||
props.setProperty("persistBatch", "ALL");
|
||||
props.setProperty("persistBatchOnCascade", "ALL");
|
||||
props.setProperty("dbuuid", "binary");
|
||||
props.setProperty("jdbcFetchSizeFindEach", "42");
|
||||
props.setProperty("jdbcFetchSizeFindList", "43");
|
||||
props.setProperty("backgroundExecutorShutdownSecs", "98");
|
||||
props.setProperty("backgroundExecutorSchedulePoolSize", "4");
|
||||
props.setProperty("dbOffline", "true");
|
||||
props.setProperty("jsonDateTime", "MILLIS");
|
||||
props.setProperty("jsonDate", "MILLIS");
|
||||
props.setProperty("jsonMutationDetection", "NONE");
|
||||
props.setProperty("autoReadOnlyDataSource", "true");
|
||||
props.setProperty("disableL2Cache", "true");
|
||||
props.setProperty("notifyL2CacheInForeground", "true");
|
||||
props.setProperty("idType", "SEQUENCE");
|
||||
props.setProperty("mappingLocations", "classpath:/foo;bar");
|
||||
props.setProperty("namingConvention", "io.ebean.config.MatchingNamingConvention");
|
||||
props.setProperty("idGeneratorAutomatic", "true");
|
||||
props.setProperty("enabledL2Regions", "r0,users,orgs");
|
||||
props.setProperty("caseSensitiveCollation", "false");
|
||||
props.setProperty("loadModuleInfo", "true");
|
||||
props.setProperty("forUpdateNoKey", "true");
|
||||
props.setProperty("defaultServer", "false");
|
||||
props.setProperty("skipDataSourceCheck", "true");
|
||||
|
||||
props.setProperty("queryPlan.enable", "true");
|
||||
props.setProperty("queryPlan.thresholdMicros", "10000");
|
||||
props.setProperty("queryPlan.capture", "true");
|
||||
props.setProperty("queryPlan.capturePeriodSecs", "42");
|
||||
props.setProperty("queryPlan.captureMaxTimeMillis", "560");
|
||||
props.setProperty("queryPlan.captureMaxCount", "7");
|
||||
|
||||
config.loadFromProperties(props);
|
||||
|
||||
assertFalse(config.isDefaultServer());
|
||||
assertTrue(config.isDisableL2Cache());
|
||||
assertTrue(config.isNotifyL2CacheInForeground());
|
||||
assertTrue(config.isDbOffline());
|
||||
assertTrue(config.isAutoReadOnlyDataSource());
|
||||
assertTrue(config.isAutoLoadModuleInfo());
|
||||
assertTrue(config.skipDataSourceCheck());
|
||||
|
||||
assertTrue(config.isIdGeneratorAutomatic());
|
||||
assertFalse(config.getPlatformConfig().isCaseSensitiveCollation());
|
||||
assertTrue(config.getPlatformConfig().isForUpdateNoKey());
|
||||
|
||||
assertThat(config.getNamingConvention()).isInstanceOf(MatchingNamingConvention.class);
|
||||
|
||||
assertEquals(MutationDetection.NONE, config.getJsonMutationDetection());
|
||||
config.setJsonMutationDetection(MutationDetection.SOURCE);
|
||||
assertEquals(MutationDetection.SOURCE, config.getJsonMutationDetection());
|
||||
assertEquals(IdType.SEQUENCE, config.getIdType());
|
||||
assertEquals(PersistBatch.ALL, config.getPersistBatch());
|
||||
assertEquals(PersistBatch.ALL, config.getPersistBatchOnCascade());
|
||||
Assertions.assertEquals(PlatformConfig.DbUuid.BINARY, config.getPlatformConfig().getDbUuid());
|
||||
Assertions.assertEquals(JsonConfig.DateTime.MILLIS, config.getJsonDateTime());
|
||||
assertEquals(JsonConfig.Date.MILLIS, config.getJsonDate());
|
||||
|
||||
assertEquals("r0,users,orgs", config.getEnabledL2Regions());
|
||||
|
||||
assertEquals(42, config.getJdbcFetchSizeFindEach());
|
||||
assertEquals(43, config.getJdbcFetchSizeFindList());
|
||||
assertEquals(4, config.getBackgroundExecutorSchedulePoolSize());
|
||||
assertEquals(98, config.getBackgroundExecutorShutdownSecs());
|
||||
|
||||
assertTrue(config.isQueryPlanEnable());
|
||||
assertEquals(10000, config.getQueryPlanThresholdMicros());
|
||||
assertTrue(config.isQueryPlanCapture());
|
||||
assertEquals(42, config.getQueryPlanCapturePeriodSecs());
|
||||
assertEquals(560, config.getQueryPlanCaptureMaxTimeMillis());
|
||||
assertEquals(7, config.getQueryPlanCaptureMaxCount());
|
||||
|
||||
assertThat(config.getMappingLocations()).containsExactly("classpath:/foo","bar");
|
||||
|
||||
config.setPersistBatch(PersistBatch.NONE);
|
||||
config.setPersistBatchOnCascade(PersistBatch.NONE);
|
||||
|
||||
Properties props1 = new Properties();
|
||||
props1.setProperty("ebean.persistBatch", "ALL");
|
||||
props1.setProperty("ebean.persistBatchOnCascade", "ALL");
|
||||
|
||||
config.setNotifyL2CacheInForeground(true);
|
||||
config.setDisableL2Cache(true);
|
||||
props1.setProperty("ebean.disableL2Cache", "false");
|
||||
props1.setProperty("ebean.notifyL2CacheInForeground", "false");
|
||||
|
||||
config.loadFromProperties(props1);
|
||||
assertFalse(config.isDisableL2Cache());
|
||||
assertFalse(config.isNotifyL2CacheInForeground());
|
||||
|
||||
assertEquals(PersistBatch.ALL, config.getPersistBatch());
|
||||
assertEquals(PersistBatch.ALL, config.getPersistBatchOnCascade());
|
||||
|
||||
config.setEnabledL2Regions("r0,orgs");
|
||||
assertEquals("r0,orgs", config.getEnabledL2Regions());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_defaults() {
|
||||
|
||||
DatabaseConfig config = new DatabaseConfig();
|
||||
assertTrue(config.isIdGeneratorAutomatic());
|
||||
assertTrue(config.isDefaultServer());
|
||||
assertFalse(config.isAutoPersistUpdates());
|
||||
assertFalse(config.skipDataSourceCheck());
|
||||
|
||||
config.setIdGeneratorAutomatic(false);
|
||||
assertFalse(config.isIdGeneratorAutomatic());
|
||||
assertEquals(JsonConfig.DateTime.ISO8601, config.getJsonDateTime());
|
||||
assertEquals(JsonConfig.Date.ISO8601, config.getJsonDate());
|
||||
assertEquals(MutationDetection.HASH, config.getJsonMutationDetection());
|
||||
assertTrue(config.getPlatformConfig().isCaseSensitiveCollation());
|
||||
assertTrue(config.isAutoLoadModuleInfo());
|
||||
|
||||
assertFalse(config.isQueryPlanEnable());
|
||||
assertEquals(Long.MAX_VALUE, config.getQueryPlanThresholdMicros());
|
||||
assertFalse(config.isQueryPlanCapture());
|
||||
assertEquals(600, config.getQueryPlanCapturePeriodSecs());
|
||||
assertEquals(10000L, config.getQueryPlanCaptureMaxTimeMillis());
|
||||
assertEquals(10, config.getQueryPlanCaptureMaxCount());
|
||||
|
||||
config.setLoadModuleInfo(false);
|
||||
assertFalse(config.isAutoLoadModuleInfo());
|
||||
config.setAutoPersistUpdates(true);
|
||||
assertTrue(config.isAutoPersistUpdates());
|
||||
config.setSkipDataSourceCheck(true);
|
||||
assertTrue(config.skipDataSourceCheck());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_putServiceObject() {
|
||||
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
DatabaseConfig config = new DatabaseConfig();
|
||||
config.putServiceObject(objectMapper);
|
||||
|
||||
ObjectMapper mapper0 = config.getServiceObject(ObjectMapper.class);
|
||||
ObjectMapper mapper1 = (ObjectMapper)config.getServiceObject("objectMapper");
|
||||
|
||||
assertThat(objectMapper).isSameAs(mapper0);
|
||||
assertThat(objectMapper).isSameAs(mapper1);
|
||||
}
|
||||
}
|
||||
@@ -495,21 +495,11 @@ public class TDSpiEbeanServer extends TDSpiServer implements SpiEbeanServer {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SqlQuery createSqlQuery(String sql) {
|
||||
return sqlQuery(sql);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SqlUpdate sqlUpdate(String sql) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SqlUpdate createSqlUpdate(String sql) {
|
||||
return sqlUpdate(sql);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CallableSql createCallableSql(String callableSql) {
|
||||
return null;
|
||||
@@ -653,11 +643,6 @@ public class TDSpiEbeanServer extends TDSpiServer implements SpiEbeanServer {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> Stream<T> findLargeStream(Query<T> query, Transaction transaction) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> void findEach(Query<T> query, Consumer<T> consumer, Transaction transaction) {
|
||||
}
|
||||
|
||||
@@ -177,21 +177,11 @@ public class TDSpiServer implements SpiServer {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SqlQuery createSqlQuery(String sql) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SqlUpdate sqlUpdate(String sql) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SqlUpdate createSqlUpdate(String sql) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CallableSql createCallableSql(String callableSql) {
|
||||
return null;
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package org.tests.model;
|
||||
|
||||
import io.ebean.annotation.CreatedTimestamp;
|
||||
import io.ebean.annotation.UpdatedTimestamp;
|
||||
import io.ebean.annotation.WhenCreated;
|
||||
import io.ebean.annotation.WhenModified;
|
||||
|
||||
@@ -31,40 +29,40 @@ public class EGenProps {
|
||||
@WhenModified
|
||||
Timestamp whenModified;
|
||||
|
||||
@CreatedTimestamp
|
||||
@WhenCreated
|
||||
Timestamp tsCreated;
|
||||
|
||||
@UpdatedTimestamp
|
||||
@WhenModified
|
||||
Timestamp tsUpdated;
|
||||
|
||||
@CreatedTimestamp
|
||||
@WhenCreated
|
||||
LocalDateTime ldtCreated;
|
||||
|
||||
@UpdatedTimestamp
|
||||
@WhenModified
|
||||
LocalDateTime ldtUpdated;
|
||||
|
||||
@CreatedTimestamp
|
||||
@WhenCreated
|
||||
OffsetDateTime odtCreated;
|
||||
|
||||
@UpdatedTimestamp
|
||||
@WhenModified
|
||||
OffsetDateTime odtUpdated;
|
||||
|
||||
@CreatedTimestamp
|
||||
@WhenCreated
|
||||
ZonedDateTime zdtCreated;
|
||||
|
||||
@UpdatedTimestamp
|
||||
@WhenModified
|
||||
ZonedDateTime zdtUpdated;
|
||||
|
||||
@CreatedTimestamp
|
||||
@WhenCreated
|
||||
Instant instantCreated;
|
||||
|
||||
@UpdatedTimestamp
|
||||
@WhenModified
|
||||
Instant instantUpdated;
|
||||
|
||||
@CreatedTimestamp
|
||||
@WhenCreated
|
||||
long longCreated;
|
||||
|
||||
@UpdatedTimestamp
|
||||
@WhenModified
|
||||
long longUpdated;
|
||||
|
||||
public Long getId() {
|
||||
|
||||
@@ -40,7 +40,7 @@ public class Contact {
|
||||
@OneToMany(cascade = CascadeType.ALL)
|
||||
List<ContactNote> notes;
|
||||
|
||||
@CreatedTimestamp
|
||||
@WhenCreated
|
||||
Timestamp cretime;
|
||||
|
||||
@Version
|
||||
|
||||
@@ -33,7 +33,7 @@ public class Product implements Serializable {
|
||||
|
||||
String name;
|
||||
|
||||
@CreatedTimestamp
|
||||
@WhenCreated
|
||||
Timestamp cretime;
|
||||
|
||||
@Version
|
||||
|
||||
+1
-1
@@ -117,9 +117,9 @@ public class TestNatKeyCacheWithForeignKey extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void findSimple() {
|
||||
|
||||
setupData();
|
||||
clearAllL2Cache();
|
||||
appStats();
|
||||
|
||||
OCachedApp app0 = findAppByName("app0");
|
||||
assertThat(app0).isNotNull();
|
||||
|
||||
+1
-1
@@ -192,6 +192,6 @@ public class TestElementCollectionBasicMap extends BaseTestCase {
|
||||
final EcmPerson fromJson = DB.json().toBean(EcmPerson.class, asJson);
|
||||
assertThat(fromJson.getName()).isEqualTo("Fiona021");
|
||||
assertThat(fromJson.getPhoneNumbers()).hasSize(2);
|
||||
assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("BeanMap size[2] map{home=021 1234, work=021 4321}");
|
||||
assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("{home=021 1234, work=021 4321}");
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -183,6 +183,6 @@ class TestElementCollectionBasicSet extends BaseTestCase {
|
||||
final EcsPerson fromJson = DB.json().toBean(EcsPerson.class, asJson);
|
||||
assertThat(fromJson.getName()).isEqualTo("Fiona021");
|
||||
assertThat(fromJson.getPhoneNumbers()).hasSize(2);
|
||||
assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("BeanSet size[2] set[021 1234, 021 4321]");
|
||||
assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("[021 1234, 021 4321]");
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -190,6 +190,6 @@ public class TestElementCollectionEmbeddedList extends BaseTestCase {
|
||||
final EcblPerson fromJson = DB.json().toBean(EcblPerson.class, asJson);
|
||||
assertThat(fromJson.getName()).isEqualTo("Fiona64021");
|
||||
assertThat(fromJson.getPhoneNumbers()).hasSize(2);
|
||||
assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("BeanList size[2] list[64-021-1234, 64-021-4321]");
|
||||
assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("[64-021-1234, 64-021-4321]");
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -181,6 +181,6 @@ public class TestElementCollectionEmbeddedMap extends BaseTestCase {
|
||||
final EcbmPerson fromJson = DB.json().toBean(EcbmPerson.class, asJson);
|
||||
assertThat(fromJson.getName()).isEqualTo("Fiona64021");
|
||||
assertThat(fromJson.getPhoneNumbers()).hasSize(2);
|
||||
assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("BeanMap size[2] map{home=64-021-1234, work=64-021-4321}");
|
||||
assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("{home=64-021-1234, work=64-021-4321}");
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -45,6 +45,6 @@ public class TestElementCollectionEnumSet extends BaseTestCase {
|
||||
final EcEnumPerson fromJson = DB.json().toBean(EcEnumPerson.class, asJson);
|
||||
assertThat(fromJson.getName()).isEqualTo("Enum Person");
|
||||
assertThat(fromJson.getTags()).hasSize(2);
|
||||
assertThat(fromJson.getTags().toString()).isEqualTo("BeanSet size[2] set[BLUE, RED]");
|
||||
assertThat(fromJson.getTags().toString()).isEqualTo("[BLUE, RED]");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,27 +37,6 @@ public class TestQueryFindStream extends BaseTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void findLargeStream_basic() {
|
||||
ResetBasicData.reset();
|
||||
try (Stream<Customer> stream = DB.find(Customer.class)
|
||||
.findLargeStream()) {
|
||||
|
||||
// bad example, don't use a stream like this when we can
|
||||
// use findSingleAttributeList() instead
|
||||
final List<String> namesStream = stream
|
||||
.map(Customer::getName)
|
||||
.collect(toList());
|
||||
|
||||
final List<String> namesQuery = DB.find(Customer.class)
|
||||
.select("name")
|
||||
.findSingleAttributeList();
|
||||
|
||||
assertThat(namesStream).hasSize(namesQuery.size());
|
||||
assertThat(namesStream).containsAll(namesQuery);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void manualTest_findSteam_when_closeWithResources() {
|
||||
// confirm manually the stream is closed via try with resources block
|
||||
|
||||
Reference in New Issue
Block a user