Skip to content

Commit

Permalink
Fix app tests
Browse files Browse the repository at this point in the history
Signed-off-by: Nikita Lebedev <nikita.lebedev@limechain.tech>
  • Loading branch information
thenswan committed Sep 23, 2024
1 parent be8b540 commit 1bd18fe
Show file tree
Hide file tree
Showing 13 changed files with 91 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,19 @@
package com.hedera.node.app.platform.event;

import com.hedera.hapi.node.base.SemanticVersion;
import com.hedera.node.app.version.HederaSoftwareVersion;
import com.hedera.node.app.version.ServicesSoftwareVersion;
import com.swirlds.common.constructable.ClassConstructorPair;
import com.swirlds.common.constructable.ConstructableRegistry;
import com.swirlds.common.constructable.ConstructableRegistryException;
import com.swirlds.common.crypto.Hash;
import com.swirlds.platform.event.PlatformEvent;
import com.swirlds.platform.event.hashing.DefaultEventHasher;
import com.swirlds.platform.recovery.internal.EventStreamSingleFileIterator;
import com.swirlds.platform.system.StaticSoftwareVersion;
import com.swirlds.platform.system.events.CesEvent;
import com.swirlds.platform.system.events.EventDescriptorWrapper;
import com.swirlds.virtualmap.VirtualMap;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.io.File;
import java.io.IOException;
Expand All @@ -40,11 +44,17 @@
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

import static com.swirlds.common.test.fixtures.ConfigurationUtils.configuration;

public class EventMigrationTest {

@BeforeAll
public static void setUp() throws ConstructableRegistryException {
ConstructableRegistry.getInstance().registerConstructables("");
ConstructableRegistry registry = ConstructableRegistry.getInstance();
registry.registerConstructable(new ClassConstructorPair(Hash.class, Hash::new));
registry.registerConstructable(new ClassConstructorPair(CesEvent.class, CesEvent::new));
registry.registerConstructable(new ClassConstructorPair(HederaSoftwareVersion.class, HederaSoftwareVersion::new));
registry.registerConstructable(new ClassConstructorPair(VirtualMap.class, () -> new VirtualMap(configuration())));
StaticSoftwareVersion.setSoftwareVersion(new ServicesSoftwareVersion(SemanticVersion.DEFAULT, 0));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ void populateTheMapAndFlushToDiskAndReadBack() throws IOException {

// Before we can read the data back, we need to register the data types
// I plan to deserialize.
final var r = new MerkleSchemaRegistry(registry, SERVICE_NAME, DEFAULT_CONFIG, new SchemaApplications());
final var r = new MerkleSchemaRegistry(registry, SERVICE_NAME, configuration, new SchemaApplications());
r.register(schema);

// read it back now as our map and validate the data come back fine
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
import com.swirlds.common.io.config.TemporaryFileConfig;
import com.swirlds.config.api.Configuration;
import com.swirlds.config.api.ConfigurationBuilder;
import com.swirlds.virtualmap.config.VirtualMapConfig;

public class ConfigurationUtils {
public static Configuration configuration() {
return ConfigurationBuilder.create()
.withConfigDataType(TemporaryFileConfig.class)
.withConfigDataType(StateCommonConfig.class)
.withConfigDataType(VirtualMapConfig.class)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,21 @@

package com.swirlds.merkledb;

import com.swirlds.common.constructable.ConstructableClass;
import com.swirlds.common.io.streams.SerializableDataInputStream;
import com.swirlds.common.io.streams.SerializableDataOutputStream;
import com.swirlds.common.io.utility.LegacyTemporaryFileBuilder;
import com.swirlds.config.api.Configuration;
import com.swirlds.merkledb.constructable.constructors.MerkleDbDataSourceBuilderConstructor;
import com.swirlds.virtualmap.datasource.VirtualDataSource;
import com.swirlds.virtualmap.datasource.VirtualDataSourceBuilder;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.file.Path;
import java.util.Objects;

import static com.swirlds.merkledb.MerkleDbDataSourceBuilder.CLASS_ID;

/**
* Virtual data source builder that manages {@link MerkleDb} based data sources.
*
Expand All @@ -37,9 +41,10 @@
* between data sources with the same label, e.g. on copy or snapshot, MerkleDb builders
* use different database directories, usually managed using {@link LegacyTemporaryFileBuilder}.
*/
@ConstructableClass(value = CLASS_ID, constructorType = MerkleDbDataSourceBuilderConstructor.class)
public class MerkleDbDataSourceBuilder implements VirtualDataSourceBuilder {

private static final long CLASS_ID = 0x176ede0e1a69828L;
public static final long CLASS_ID = 0x176ede0e1a69828L;

private static final class ClassVersion {
public static final int ORIGINAL = 1;
Expand All @@ -62,7 +67,8 @@ private static final class ClassVersion {
/**
* Default constructor for deserialization purposes.
*/
public MerkleDbDataSourceBuilder() {
public MerkleDbDataSourceBuilder(final Configuration configuration) {
this.configuration = configuration;
// for deserialization
}

Expand All @@ -72,7 +78,7 @@ public MerkleDbDataSourceBuilder() {
* @param tableConfig
* Table configuration to use to create new data sources
*/
public MerkleDbDataSourceBuilder(final MerkleDbTableConfig tableConfig, Configuration configuration) {
public MerkleDbDataSourceBuilder(final MerkleDbTableConfig tableConfig, final Configuration configuration) {
this(null, tableConfig, configuration);
}

Expand All @@ -84,7 +90,7 @@ public MerkleDbDataSourceBuilder(final MerkleDbTableConfig tableConfig, Configur
* @param tableConfig
* Table configuration to use to create new data sources
*/
public MerkleDbDataSourceBuilder(final Path databaseDir, final MerkleDbTableConfig tableConfig, Configuration configuration) {
public MerkleDbDataSourceBuilder(final Path databaseDir, final MerkleDbTableConfig tableConfig, final Configuration configuration) {
this.databaseDir = databaseDir;
this.tableConfig = tableConfig;
this.configuration = configuration;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.swirlds.merkledb.constructable.constructors;

import com.swirlds.config.api.Configuration;
import com.swirlds.merkledb.MerkleDbDataSourceBuilder;

@FunctionalInterface
public interface MerkleDbDataSourceBuilderConstructor {
MerkleDbDataSourceBuilder create(final Configuration configuration);
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.hedera.hapi.node.base.SemanticVersion;
import com.hedera.pbj.runtime.Codec;
import com.swirlds.common.config.StateCommonConfig;
import com.swirlds.common.constructable.ClassConstructorPair;
import com.swirlds.common.constructable.ConstructableRegistry;
import com.swirlds.common.constructable.ConstructableRegistryException;
import com.swirlds.common.crypto.DigestType;
Expand Down Expand Up @@ -49,14 +50,19 @@
import com.swirlds.state.test.fixtures.StateTestBase;
import com.swirlds.virtualmap.VirtualMap;
import com.swirlds.virtualmap.config.VirtualMapConfig;
import com.swirlds.virtualmap.internal.cache.VirtualNodeCache;
import com.swirlds.virtualmap.internal.merkle.VirtualMapState;
import com.swirlds.virtualmap.internal.merkle.VirtualRootNode;
import com.swirlds.virtualmap.serialize.KeySerializer;
import com.swirlds.virtualmap.serialize.ValueSerializer;
import edu.umd.cs.findbugs.annotations.NonNull;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.file.Path;
import java.util.stream.Stream;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.io.TempDir;
import org.junit.jupiter.params.provider.Arguments;
Expand Down Expand Up @@ -85,6 +91,15 @@
*/
public class MerkleTestBase extends StateTestBase {

public static Configuration configuration() {
return ConfigurationBuilder.create()
.withConfigDataType(VirtualMapConfig.class)
.withConfigDataType(MerkleDbConfig.class)
.withConfigDataType(TemporaryFileConfig.class)
.withConfigDataType(StateCommonConfig.class)
.build();
}

protected Configuration configuration = ConfigurationBuilder.create()
.withConfigDataType(VirtualMapConfig.class)
.withConfigDataType(MerkleDbConfig.class)
Expand Down Expand Up @@ -266,7 +281,11 @@ protected void setupConstructableRegistry() {
registry.registerConstructables("com.swirlds.merklemap");
registry.registerConstructables("com.swirlds.merkledb");
registry.registerConstructables("com.swirlds.fcqueue");
registry.registerConstructables("com.swirlds.virtualmap");
registry.registerConstructable(new ClassConstructorPair(VirtualMap.class, () -> new VirtualMap(configuration())));
registry.registerConstructable(new ClassConstructorPair(VirtualMapState.class, VirtualMapState::new));
registry.registerConstructable(new ClassConstructorPair(VirtualRootNode.class, () -> new VirtualRootNode<>(configuration())));
registry.registerConstructable(new ClassConstructorPair(VirtualNodeCache.class, () -> new VirtualNodeCache<>(configuration().getConfigData(VirtualMapConfig.class))));
registry.registerConstructable(new ClassConstructorPair(MerkleDbDataSourceBuilder.class, () -> new MerkleDbDataSourceBuilder(configuration())));
registry.registerConstructables("com.swirlds.common.merkle");
registry.registerConstructables("com.swirlds.common");
registry.registerConstructables("com.swirlds.merkle");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,8 @@ private static final class ChildIndices {
* Required by the {@link com.swirlds.common.constructable.RuntimeConstructable} contract.
* This can <strong>only</strong> be called as part of serialization and reconnect, not for normal use.
*/
public VirtualMap() {
public VirtualMap(Configuration configuration) {
this.configuration = configuration;
registryRecord = RuntimeObjectRegistry.createRecord(getClass());
}

Expand All @@ -192,7 +193,7 @@ public VirtualMap(
final ValueSerializer<V> valueSerializer,
final VirtualDataSourceBuilder dataSourceBuilder,
final Configuration configuration) {
this();
this(configuration);
this.configuration = configuration;
setChild(ChildIndices.MAP_STATE_CHILD_INDEX, new VirtualMapState(Objects.requireNonNull(label)));
setChild(
Expand All @@ -207,8 +208,7 @@ public VirtualMap(
* must not be null.
*/
private VirtualMap(final VirtualMap<K, V> source) {
this();
this.configuration = source.configuration;
this(source.configuration);
setChild(ChildIndices.MAP_STATE_CHILD_INDEX, source.getState().copy());
setChild(ChildIndices.VIRTUAL_ROOT_CHILD_INDEX, source.getRoot().copy());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.swirlds.virtualmap.constructable.constructors;

import com.swirlds.virtualmap.config.VirtualMapConfig;
import com.swirlds.virtualmap.internal.cache.VirtualNodeCache;

@FunctionalInterface
public interface VirtualNodeCacheConstructor {
VirtualNodeCache create(final VirtualMapConfig vmConfig);
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.swirlds.virtualmap.constructable.constructors;

import com.swirlds.config.api.Configuration;
import com.swirlds.virtualmap.internal.merkle.VirtualRootNode;
import edu.umd.cs.findbugs.annotations.NonNull;

@FunctionalInterface
public interface VirtualRootNodeConstructor {
VirtualRootNode create(final @NonNull Configuration configuration);
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
package com.swirlds.virtualmap.datasource;

import com.swirlds.common.io.SelfSerializable;
import com.swirlds.config.api.Configuration;

import java.nio.file.Path;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,11 @@

import static com.swirlds.common.threading.manager.AdHocThreadManager.getStaticThreadManager;
import static com.swirlds.logging.legacy.LogMarker.EXCEPTION;
import static com.swirlds.virtualmap.internal.cache.VirtualNodeCache.CLASS_ID;

import com.swirlds.base.state.MutabilityException;
import com.swirlds.common.FastCopyable;
import com.swirlds.common.constructable.ConstructableClass;
import com.swirlds.common.crypto.Hash;
import com.swirlds.common.exceptions.PlatformException;
import com.swirlds.common.io.SelfSerializable;
Expand All @@ -32,6 +34,7 @@
import com.swirlds.virtualmap.VirtualMap;
import com.swirlds.virtualmap.VirtualValue;
import com.swirlds.virtualmap.config.VirtualMapConfig;
import com.swirlds.virtualmap.constructable.constructors.VirtualNodeCacheConstructor;
import com.swirlds.virtualmap.datasource.VirtualHashRecord;
import com.swirlds.virtualmap.datasource.VirtualLeafRecord;
import java.io.IOException;
Expand Down Expand Up @@ -112,12 +115,14 @@
* @param <V>
* The type of value used for leaves
*/
@ConstructableClass(value = CLASS_ID, constructorType = VirtualNodeCacheConstructor.class)
public final class VirtualNodeCache<K extends VirtualKey, V extends VirtualValue>
implements FastCopyable, SelfSerializable {

private static final Logger logger = LogManager.getLogger(VirtualNodeCache.class);

private static final long CLASS_ID = 0x493743f0ace96d2cL;
@SuppressWarnings("ProtectedMemberInFinalClass")
public static final long CLASS_ID = 0x493743f0ace96d2cL;

private static final class ClassVersion {
public static final int ORIGINAL = 1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,12 @@
import static com.swirlds.virtualmap.internal.Path.getSiblingPath;
import static com.swirlds.virtualmap.internal.Path.isFarRight;
import static com.swirlds.virtualmap.internal.Path.isLeft;
import static com.swirlds.virtualmap.internal.merkle.VirtualMapState.CLASS_ID;
import static com.swirlds.virtualmap.internal.merkle.VirtualMapState.MAX_LABEL_LENGTH;
import static java.util.concurrent.TimeUnit.MINUTES;
import static java.util.concurrent.TimeUnit.SECONDS;

import com.swirlds.common.constructable.ConstructableClass;
import com.swirlds.common.crypto.DigestType;
import com.swirlds.common.crypto.Hash;
import com.swirlds.common.io.ExternalSelfSerializable;
Expand All @@ -64,6 +66,7 @@
import com.swirlds.virtualmap.VirtualValue;
import com.swirlds.virtualmap.config.VirtualMapConfig;
import com.swirlds.virtualmap.config.VirtualMapReconnectMode;
import com.swirlds.virtualmap.constructable.constructors.VirtualRootNodeConstructor;
import com.swirlds.virtualmap.datasource.VirtualDataSource;
import com.swirlds.virtualmap.datasource.VirtualDataSourceBuilder;
import com.swirlds.virtualmap.datasource.VirtualHashRecord;
Expand Down Expand Up @@ -135,6 +138,7 @@
* The value
*/
@DebugIterationEndpoint
@ConstructableClass(value = CLASS_ID, constructorType = VirtualRootNodeConstructor.class)
public final class VirtualRootNode<K extends VirtualKey, V extends VirtualValue> extends PartialBinaryMerkleInternal
implements CustomReconnectRoot<Long, Long>, ExternalSelfSerializable, VirtualRoot, MerkleInternal {

Expand Down Expand Up @@ -354,7 +358,7 @@ public static class ClassVersion {
* Creates a new empty root node. This constructor is used for deserialization and
* reconnects, not for normal use.
*/
public VirtualRootNode(Configuration configuration) {
public VirtualRootNode(final @NonNull Configuration configuration) {
this.fastCopyVersion = 0;
// Hasher is required during reconnects
this.hasher = new VirtualHasher<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
exports com.swirlds.virtualmap.internal to
com.swirlds.virtualmap.test.fixtures;
exports com.swirlds.virtualmap.internal.cache to
com.swirlds.virtualmap.test.fixtures;
com.swirlds.virtualmap.test.fixtures, com.swirlds.common, com.swirlds.state.api.test.fixtures;

requires transitive com.swirlds.common;
requires transitive com.swirlds.config.api;
Expand Down

0 comments on commit 1bd18fe

Please sign in to comment.