Browse Source

Treat a blank identifier as null

qdn
CalDescent 3 years ago
parent
commit
056fc8fbaf
  1. 5
      src/main/java/org/qortal/arbitrary/ArbitraryDataReader.java
  2. 2
      src/main/java/org/qortal/data/transaction/ArbitraryTransactionData.java
  3. 49
      src/test/java/org/qortal/test/arbitrary/ArbitraryDataTests.java

5
src/main/java/org/qortal/arbitrary/ArbitraryDataReader.java

@ -58,6 +58,11 @@ public class ArbitraryDataReader {
resourceId = resourceId.toLowerCase(); resourceId = resourceId.toLowerCase();
} }
// If identifier is a blank string, treat it as null
if (identifier == "") {
identifier = null;
}
this.resourceId = resourceId; this.resourceId = resourceId;
this.resourceIdType = resourceIdType; this.resourceIdType = resourceIdType;
this.service = service; this.service = service;

2
src/main/java/org/qortal/data/transaction/ArbitraryTransactionData.java

@ -182,7 +182,7 @@ public class ArbitraryTransactionData extends TransactionData {
} }
public String getIdentifier() { public String getIdentifier() {
return this.identifier; return (this.identifier != "") ? this.identifier : null;
} }
public Method getMethod() { public Method getMethod() {

49
src/test/java/org/qortal/test/arbitrary/ArbitraryDataTests.java

@ -276,6 +276,55 @@ public class ArbitraryDataTests extends Common {
} }
} }
@Test
public void testBlankIdentifier() throws DataException, IOException, MissingDataException {
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
String identifier = ""; // Blank, not null
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");
ArbitraryDataDigest path1Digest = new ArbitraryDataDigest(path1);
path1Digest.compute();
this.createAndMintTxn(repository, publicKey58, path1, name, identifier, Method.PUT, service, alice);
// Now build the latest data state for this name with a null identifier, ensuring that it succeeds and the data matches
ArbitraryDataReader arbitraryDataReader1a = new ArbitraryDataReader(name, ResourceIdType.NAME, service, null);
arbitraryDataReader1a.loadSynchronously(true);
Path initialLayerPath1a = arbitraryDataReader1a.getFilePath();
ArbitraryDataDigest initialLayerDigest1a = new ArbitraryDataDigest(initialLayerPath1a);
initialLayerDigest1a.compute();
assertEquals(path1Digest.getHash58(), initialLayerDigest1a.getHash58());
// It should also be accessible via a blank string, as we treat null and blank as the same thing
ArbitraryDataReader arbitraryDataReader1b = new ArbitraryDataReader(name, ResourceIdType.NAME, service, "");
arbitraryDataReader1b.loadSynchronously(true);
Path initialLayerPath1b = arbitraryDataReader1b.getFilePath();
ArbitraryDataDigest initialLayerDigest1b = new ArbitraryDataDigest(initialLayerPath1b);
initialLayerDigest1b.compute();
assertEquals(path1Digest.getHash58(), initialLayerDigest1b.getHash58());
// Build the latest data state for this name, with a different identifier, ensuring that it fails
String differentIdentifier = "different_identifier";
ArbitraryDataReader arbitraryDataReader1c = new ArbitraryDataReader(name, ResourceIdType.NAME, service, differentIdentifier);
try {
arbitraryDataReader1c.loadSynchronously(true);
fail("Loading data with incorrect identifier should fail due to nonexistent PUT transaction");
} catch (IllegalStateException expectedException) {
assertEquals(String.format("Couldn't find PUT transaction for name %s, service %s "
+ "and identifier %s", name.toLowerCase(), service, differentIdentifier), expectedException.getMessage());
}
}
}
private void createAndMintTxn(Repository repository, String publicKey58, Path path, String name, String identifier, private void createAndMintTxn(Repository repository, String publicKey58, Path path, String name, String identifier,
Method method, Service service, PrivateKeyAccount account) throws DataException { Method method, Service service, PrivateKeyAccount account) throws DataException {

Loading…
Cancel
Save