diff --git a/src/main/java/org/qortal/arbitrary/ArbitraryDataWriter.java b/src/main/java/org/qortal/arbitrary/ArbitraryDataWriter.java index 4a5d10af..0244c054 100644 --- a/src/main/java/org/qortal/arbitrary/ArbitraryDataWriter.java +++ b/src/main/java/org/qortal/arbitrary/ArbitraryDataWriter.java @@ -47,6 +47,11 @@ public class ArbitraryDataWriter { private final String tags; private final String category; + private static int MAX_TITLE_LENGTH = 80; + private static int MAX_DESCRIPTION_LENGTH = 500; + private static int MAX_TAGS_LENGTH = 80; + private static int MAX_CATEGORY_LENGTH = 40; + private int chunkSize = ArbitraryDataFile.CHUNK_SIZE; private SecretKey aesKey; @@ -72,10 +77,10 @@ public class ArbitraryDataWriter { this.identifier = identifier; // Metadata (optional) - this.title = title; - this.description = description; - this.tags = tags; - this.category = category; + this.title = title.substring(0, MAX_TITLE_LENGTH);; + this.description = description.substring(0, MAX_DESCRIPTION_LENGTH); + this.tags = tags.substring(0, MAX_TAGS_LENGTH); + this.category = category.substring(0, MAX_CATEGORY_LENGTH); } public void save() throws IOException, DataException, InterruptedException, MissingDataException { diff --git a/src/test/java/org/qortal/test/arbitrary/ArbitraryTransactionMetadataTests.java b/src/test/java/org/qortal/test/arbitrary/ArbitraryTransactionMetadataTests.java index ff517cbb..f892e95e 100644 --- a/src/test/java/org/qortal/test/arbitrary/ArbitraryTransactionMetadataTests.java +++ b/src/test/java/org/qortal/test/arbitrary/ArbitraryTransactionMetadataTests.java @@ -122,4 +122,43 @@ public class ArbitraryTransactionMetadataTests extends Common { } } + @Test + public void testMetadataLengths() 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 = null; // Not used for this test + Service service = Service.ARBITRARY_DATA; + int chunkSize = 100; + int dataLength = 900; // Actual data length will be longer due to encryption + + String title = "title Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent feugiat pretium"; + String description = "description Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent feugiat pretium massa, non pulvinar mi pretium id. Ut gravida sapien vitae dui posuere tincidunt. Quisque in nibh est. Curabitur at blandit nunc, id aliquet neque. Nulla condimentum eget dolor a egestas. Vestibulum vel tincidunt ex. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Cras congue lacus in risus mattis suscipit. Quisque nisl eros, facilisis a lorem quis, vehicula bibendum."; + String tags = "tags Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent feugiat pretium"; + String category = "category Lorem ipsum dolor sit amet, consectetur"; + + String expectedTitle = "title Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent feugiat "; // 80 chars + String expectedDescription = "description Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent feugiat pretium massa, non pulvinar mi pretium id. Ut gravida sapien vitae dui posuere tincidunt. Quisque in nibh est. Curabitur at blandit nunc, id aliquet neque. Nulla condimentum eget dolor a egestas. Vestibulum vel tincidunt ex. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Cras congue lacus in risus mattis suscipit. Quisque nisl eros, facilisis a lorem quis, vehicula biben"; // 500 chars + String expectedTags = "tags Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent feugiat p"; // 80 chars + String expectedCategory = "category Lorem ipsum dolor sit amet, con"; // 40 chars + + // Register the name to Alice + RegisterNameTransactionData transactionData = new RegisterNameTransactionData(TestTransaction.generateBase(alice), name, ""); + TransactionUtils.signAndMint(repository, transactionData, alice); + + // Create PUT transaction + Path path1 = ArbitraryUtils.generateRandomDataPath(dataLength); + ArbitraryDataFile arbitraryDataFile = ArbitraryUtils.createAndMintTxn(repository, publicKey58, path1, name, + identifier, ArbitraryTransactionData.Method.PUT, service, alice, chunkSize, + title, description, tags, category); + + // Check the metadata is correct + assertEquals(expectedTitle, arbitraryDataFile.getMetadata().getTitle()); + assertEquals(expectedDescription, arbitraryDataFile.getMetadata().getDescription()); + assertEquals(expectedTags, arbitraryDataFile.getMetadata().getTags()); + assertEquals(expectedCategory, arbitraryDataFile.getMetadata().getCategory()); + } + } + }