From b771544c5de75ce107ed8c20ef6b315c011b7b70 Mon Sep 17 00:00:00 2001 From: CalDescent Date: Tue, 2 Nov 2021 09:09:54 +0000 Subject: [PATCH] Added test to check website/data updates. --- .../test/arbitrary/ArbitraryDataTests.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/test/java/org/qortal/test/arbitrary/ArbitraryDataTests.java b/src/test/java/org/qortal/test/arbitrary/ArbitraryDataTests.java index 27761daf..6b954da3 100644 --- a/src/test/java/org/qortal/test/arbitrary/ArbitraryDataTests.java +++ b/src/test/java/org/qortal/test/arbitrary/ArbitraryDataTests.java @@ -25,6 +25,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Arrays; import static org.junit.Assert.*; @@ -157,6 +158,50 @@ public class ArbitraryDataTests extends Common { } } + @Test + public void testUpdateResource() throws DataException, IOException { + try (final Repository repository = RepositoryManager.getRepository()) { + PrivateKeyAccount alice = Common.getTestAccount(repository, "alice"); + String publicKey58 = Base58.encode(alice.getPublicKey()); + String name = "TEST"; // Can be anything for this test + Service service = Service.WEBSITE; // Can be anything for this test + + // Register the name to Alice + RegisterNameTransactionData transactionData = new RegisterNameTransactionData(TestTransaction.generateBase(alice), name, ""); + TransactionUtils.signAndMint(repository, transactionData, alice); + + // Create PUT transaction + Path path1 = Paths.get("src/test/resources/arbitrary/demo1"); + this.createAndMintTxn(repository, publicKey58, path1, name, Method.PUT, service, alice); + + // Now build the latest data state for this name + ArbitraryDataReader arbitraryDataReader1 = new ArbitraryDataReader(name, ResourceIdType.NAME, service); + arbitraryDataReader1.loadSynchronously(true); + Path initialLayerPath = arbitraryDataReader1.getFilePath(); + ArbitraryDataDigest initialLayerDigest = new ArbitraryDataDigest(initialLayerPath); + initialLayerDigest.compute(); + + // Create PATCH transaction + Path path2 = Paths.get("src/test/resources/arbitrary/demo2"); + this.createAndMintTxn(repository, publicKey58, path2, name, Method.PATCH, service, alice); + + // Rebuild the latest state + ArbitraryDataReader arbitraryDataReader2 = new ArbitraryDataReader(name, ResourceIdType.NAME, service); + arbitraryDataReader2.loadSynchronously(false); + Path secondLayerPath = arbitraryDataReader2.getFilePath(); + ArbitraryDataDigest secondLayerDigest = new ArbitraryDataDigest(secondLayerPath); + secondLayerDigest.compute(); + + // Ensure that the second state is different to the first state + assertFalse(Arrays.equals(initialLayerDigest.getHash(), secondLayerDigest.getHash())); + + // Its directory hash should match the hash of demo2 + ArbitraryDataDigest path2Digest = new ArbitraryDataDigest(path2); + path2Digest.compute(); + assertEquals(path2Digest.getHash58(), secondLayerDigest.getHash58()); + } + } + private void createAndMintTxn(Repository repository, String publicKey58, Path path, String name, Method method, Service service, PrivateKeyAccount account) throws DataException {