#2931 - Failing test for Ebean Redis - Failed to decode cache data for UUID as Id

This commit is contained in:
Rob Bygrave
2023-01-17 23:10:08 +13:00
parent 486044d29b
commit dce6a3e9e1
6 changed files with 123 additions and 38 deletions
@@ -0,0 +1,39 @@
package org.domain;
import io.ebean.Model;
import io.ebean.annotation.Cache;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
@Cache
@Entity
public class UChild extends Model {
@Id
long id;
String name;
@ManyToOne
final UParent parent;
public UChild(UParent parent, String name) {
this.parent = parent;
this.name = name;
}
public long id() {
return id;
}
public String name() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@@ -0,0 +1,51 @@
package org.domain;
import io.ebean.Model;
import io.ebean.annotation.Cache;
import io.ebean.annotation.CacheBeanTuning;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@Cache(enableQueryCache = true)
@CacheBeanTuning(maxSecsToLive = 1)
@Entity
public class UParent extends Model {
@Id
private UUID id;
private String name;
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
private final List<UChild> children = new ArrayList<>();
public UParent(String name) {
this.name = name;
}
public UUID id() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public String name() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<UChild> children() {
return children;
}
}
@@ -1,36 +0,0 @@
package org.domain;
import io.ebean.Model;
import io.ebean.annotation.Cache;
import io.ebean.annotation.CacheBeanTuning;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.UUID;
@Cache(enableQueryCache = true, nearCache = true, naturalKey = "uuidModel")
@CacheBeanTuning(maxSecsToLive = 1)
@Entity
public class UUIDAsIDModel extends Model {
@Id
UUID uuid;
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public UUID getUuid() {
return uuid;
}
public void setUuid(UUID uuid) {
this.uuid = uuid;
}
}
@@ -5,6 +5,8 @@ import io.ebean.cache.ServerCache;
import io.ebean.cache.ServerCacheStatistics;
import org.domain.Person;
import org.domain.RCust;
import org.domain.UChild;
import org.domain.UParent;
import org.domain.query.QPerson;
import org.domain.query.QRCust;
import org.junit.jupiter.api.Test;
@@ -19,6 +21,32 @@ import static org.assertj.core.api.Assertions.assertThat;
class IntegrationTest {
@Test
void uuid_getPut() {
UParent b0 = new UParent("b0");
b0.children().add(new UChild(b0,"b0c0"));
b0.children().add(new UChild(b0,"b0c1"));
b0.save();
ServerCache beanCache = DB.cacheManager().beanCache(UParent.class);
beanCache.clear();
beanCache.statistics(true);
UParent found0 = DB.find(UParent.class, b0.id());
assertThat(found0.name()).isEqualTo("b0");
List<UChild> children = found0.children();
assertThat(children).hasSize(2);
UParent found1 = DB.find(UParent.class, b0.id());
assertThat(found1.name()).isEqualTo("b0");
DB.delete(found1);
ServerCacheStatistics stats1 = beanCache.statistics(true);
assertThat(stats1.getHitCount()).isEqualTo(1);
}
@Test
void mget_when_emptyCollectionOfIds() {
@@ -2,6 +2,7 @@ ebean:
dumpMetricsOnShutdown: true
dumpMetricsOptions: sql,hash,loc
test:
registerTestTenantProvider: false
redis: latest
# shutdown: stop # stop | remove
platform: h2 # h2, postgres, mysql, oracle, sqlserver, sqlite
@@ -38,8 +38,10 @@ public class ProviderAutoConfig {
CurrentTenantProvider tenantProvider = config.getCurrentTenantProvider();
if (tenantProvider == null) {
providerSetFlag += 2;
config.setCurrentTenantProvider(new WhoTenantProvider());
if (Boolean.parseBoolean(properties.getProperty("ebean.test.registerTestTenantProvider", "true"))) {
providerSetFlag += 2;
config.setCurrentTenantProvider(new WhoTenantProvider());
}
}
EncryptKeyManager keyManager = config.getEncryptKeyManager();