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();
}
// If identifier is a blank string, treat it as null
if (identifier == "") {
identifier = null;
}
this.resourceId = resourceId;
this.resourceIdType = resourceIdType;
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() {
return this.identifier;
return (this.identifier != "") ? this.identifier : null;
}
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,
Method method, Service service, PrivateKeyAccount account) throws DataException {

Loading…
Cancel
Save