From 8630f3be96a6c5e6155d95434007fd18418e1632 Mon Sep 17 00:00:00 2001 From: CalDescent Date: Sun, 24 Oct 2021 19:08:09 +0100 Subject: [PATCH] Added first end-to-end test of data storage --- .../test/arbitrary/ArbitraryDataTests.java | 89 +++++++++++++++++++ .../arbitrary/demo3/dir1/dir2/lorem5.txt | 1 + .../resources/arbitrary/demo3/dir1/lorem4.txt | 11 +++ src/test/resources/arbitrary/demo3/lorem1.txt | 10 +++ src/test/resources/arbitrary/demo3/lorem2.txt | 10 +++ src/test/resources/arbitrary/demo3/lorem3.txt | 1 + 6 files changed, 122 insertions(+) create mode 100644 src/test/java/org/qortal/test/arbitrary/ArbitraryDataTests.java create mode 100644 src/test/resources/arbitrary/demo3/dir1/dir2/lorem5.txt create mode 100644 src/test/resources/arbitrary/demo3/dir1/lorem4.txt create mode 100644 src/test/resources/arbitrary/demo3/lorem1.txt create mode 100644 src/test/resources/arbitrary/demo3/lorem2.txt create mode 100644 src/test/resources/arbitrary/demo3/lorem3.txt diff --git a/src/test/java/org/qortal/test/arbitrary/ArbitraryDataTests.java b/src/test/java/org/qortal/test/arbitrary/ArbitraryDataTests.java new file mode 100644 index 00000000..83ee7bc9 --- /dev/null +++ b/src/test/java/org/qortal/test/arbitrary/ArbitraryDataTests.java @@ -0,0 +1,89 @@ +package org.qortal.test.arbitrary; + +import org.junit.Before; +import org.junit.Test; +import org.qortal.account.PrivateKeyAccount; +import org.qortal.arbitrary.ArbitraryDataDigest; +import org.qortal.arbitrary.ArbitraryDataFile.*; +import org.qortal.arbitrary.ArbitraryDataReader; +import org.qortal.arbitrary.ArbitraryDataTransactionBuilder; +import org.qortal.arbitrary.metadata.ArbitraryDataMetadataPatch; +import org.qortal.data.transaction.ArbitraryTransactionData; +import org.qortal.data.transaction.ArbitraryTransactionData.*; +import org.qortal.repository.DataException; +import org.qortal.repository.Repository; +import org.qortal.repository.RepositoryManager; +import org.qortal.test.common.BlockUtils; +import org.qortal.test.common.Common; +import org.qortal.test.common.TransactionUtils; +import org.qortal.transaction.Transaction; +import org.qortal.utils.Base58; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import static org.junit.Assert.*; + +public class ArbitraryDataTests extends Common { + + @Before + public void beforeTest() throws DataException { + Common.useDefaultSettings(); + } + + @Test + public void testCombineMultipleLayers() throws DataException, IOException { + try (final Repository repository = RepositoryManager.getRepository()) { + PrivateKeyAccount alice = Common.getTestAccount(repository, "alice"); + String publicKey58 = Base58.encode(alice.getPublicKey()); + String name = "TEST"; + Service service = Service.WEBSITE; + + // Create PUT transaction + Path path1 = Paths.get("src/test/resources/arbitrary/demo1"); + this.createAndMintTxn(repository, publicKey58, path1, name, Method.PUT, service, alice); + + // Create PATCH transaction + Path path2 = Paths.get("src/test/resources/arbitrary/demo2"); + this.createAndMintTxn(repository, publicKey58, path2, name, Method.PATCH, service, alice); + + // Create another PATCH transaction + Path path3 = Paths.get("src/test/resources/arbitrary/demo3"); + this.createAndMintTxn(repository, publicKey58, path3, name, Method.PATCH, service, alice); + + // Now build the latest data state for this name + ArbitraryDataReader arbitraryDataReader = new ArbitraryDataReader(name, ResourceIdType.NAME, service); + arbitraryDataReader.loadSynchronously(true); + Path finalPath = arbitraryDataReader.getFilePath(); + + // Ensure it exists + assertTrue(Files.exists(finalPath)); + + // Its directory hash should match the hash of demo3 + ArbitraryDataDigest path3Digest = new ArbitraryDataDigest(path3); + path3Digest.compute(); + ArbitraryDataDigest finalPathDigest = new ArbitraryDataDigest(finalPath); + finalPathDigest.compute(); + assertEquals(path3Digest.getHash58(), finalPathDigest.getHash58()); + + // .. and its directory hash should also match the one included in the metadata + ArbitraryDataMetadataPatch patchMetadata = new ArbitraryDataMetadataPatch(finalPath); + patchMetadata.read(); + assertArrayEquals(patchMetadata.getCurrentHash(), path3Digest.getHash()); + + } + } + + private void createAndMintTxn(Repository repository, String publicKey58, Path path, String name, + Method method, Service service, PrivateKeyAccount account) throws DataException { + + ArbitraryDataTransactionBuilder txnBuilder = new ArbitraryDataTransactionBuilder(publicKey58, path, name, method, service); + ArbitraryTransactionData transactionData = txnBuilder.build(); + Transaction.ValidationResult result = TransactionUtils.signAndImport(repository, transactionData, account); + assertEquals(Transaction.ValidationResult.OK, result); + BlockUtils.mintBlock(repository); + } + +} diff --git a/src/test/resources/arbitrary/demo3/dir1/dir2/lorem5.txt b/src/test/resources/arbitrary/demo3/dir1/dir2/lorem5.txt new file mode 100644 index 00000000..74d0fda9 --- /dev/null +++ b/src/test/resources/arbitrary/demo3/dir1/dir2/lorem5.txt @@ -0,0 +1 @@ +Pellentesque laoreet laoreet dui ut volutpat. Sentence modified. diff --git a/src/test/resources/arbitrary/demo3/dir1/lorem4.txt b/src/test/resources/arbitrary/demo3/dir1/lorem4.txt new file mode 100644 index 00000000..d2cd1ea4 --- /dev/null +++ b/src/test/resources/arbitrary/demo3/dir1/lorem4.txt @@ -0,0 +1,11 @@ +Pellentesque mollis risus laoreet neque lobortis, ut euismod nisl gravida. +Nullam sit amet scelerisque sapien, id aliquet elit. Suspendisse eu +accumsan eros. Nullam non nunc ut risus facilisis posuere sed sed ipsum. +Pellentesque habitant morbi tristique senectus et netus et malesuada fames +ac turpis egestas. Nullam magna felis; vehicula a accumsan luctus, vulputate +vitae justo. Integer mollis lacus eu nisi iaculis, ac ultrices sem aliquam. +Sed ac lacus eget nibh posuere sodales. Phasellus sodales, augue ac +tincidunt scelerisque, mi erat Varius mauris, sed blandit ex nisl ut +justo. Etiam ac nisl venenatis, malesuada odio vitae, blandit velit. +Phasellus congue leo a porttitor hendrerit. +Line modified. diff --git a/src/test/resources/arbitrary/demo3/lorem1.txt b/src/test/resources/arbitrary/demo3/lorem1.txt new file mode 100644 index 00000000..0def0e23 --- /dev/null +++ b/src/test/resources/arbitrary/demo3/lorem1.txt @@ -0,0 +1,10 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. +Ut ligula felis, imperdiet nec placerat at, placerat +quis diam. Praesent a ultricies lacus. +Aenean luctus blandit dui. Quisque vel augue +diam. Nulla libero libero; condimentum sed +accumsan eu, elementum sit amet turpis. +In semper risus ac libero lobortis, +ut consectetur urna euismod! +Donec ut erat quis mi eleifend tincidunt +aliquet vitae lacus. diff --git a/src/test/resources/arbitrary/demo3/lorem2.txt b/src/test/resources/arbitrary/demo3/lorem2.txt new file mode 100644 index 00000000..47158e17 --- /dev/null +++ b/src/test/resources/arbitrary/demo3/lorem2.txt @@ -0,0 +1,10 @@ +Quisque viverra neque +quis eros dapibus +Quisque viverra neque +quis eros dapibus +Quisque viverra neque +quis eros dapibus +Quisque viverra neque +quis eros dapibus +Quisque viverra neque +quis eros dapibus diff --git a/src/test/resources/arbitrary/demo3/lorem3.txt b/src/test/resources/arbitrary/demo3/lorem3.txt new file mode 100644 index 00000000..5db7e985 --- /dev/null +++ b/src/test/resources/arbitrary/demo3/lorem3.txt @@ -0,0 +1 @@ +Sed ac magna pretium, suscipit mauris sed, ultrices nunc.