Skip to content

Commit 4176624

Browse files
tests: Add and modify TxMetadata tests
1 parent b590753 commit 4176624

File tree

2 files changed

+362
-6
lines changed

2 files changed

+362
-6
lines changed

dpp/src/test/kotlin/org/dashj/platform/contracts/wallet/TxMetaDataTests.kt

Lines changed: 101 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,25 @@
77

88
package org.dashj.platform.contracts.wallet
99

10+
import org.bitcoinj.core.Sha256Hash
1011
import org.bitcoinj.crypto.ChildNumber
1112
import org.bitcoinj.crypto.KeyCrypterAESCBC
1213
import org.bitcoinj.crypto.KeyCrypterException
1314
import org.dashj.platform.assertListEquals
1415
import org.dashj.platform.assertMapEquals
1516
import org.dashj.platform.dashpay.BlockchainIdentity
1617
import org.dashj.platform.dashpay.PlatformNetwork
17-
import org.dashj.platform.dpp.identity.IdentityPublicKey
18+
import org.dashj.platform.dpp.toHex
1819
import org.dashj.platform.dpp.util.Cbor
1920
import org.dashj.platform.dpp.util.Converters
2021
import org.dashj.platform.dpp.util.Entropy
2122
import org.dashj.platform.sdk.KeyType
23+
import org.dashj.platform.wallet.TxMetadataItem
24+
import org.dashj.platform.wallet.WalletUtils
25+
import org.dashj.platform.wallet.WalletUtils.TxMetadataBatch
2226
import org.junit.jupiter.api.Assertions.assertArrayEquals
2327
import org.junit.jupiter.api.Assertions.assertEquals
28+
import org.junit.jupiter.api.Assertions.assertTrue
2429
import org.junit.jupiter.api.BeforeEach
2530
import org.junit.jupiter.api.Test
2631
import org.junit.jupiter.api.assertThrows
@@ -29,20 +34,24 @@ class TxMetaDataTests : PlatformNetwork() {
2934
lateinit var txId: ByteArray
3035
lateinit var txMetadataItem: TxMetadataItem
3136
lateinit var txMetadataItemTwo: TxMetadataItem
37+
lateinit var txMetadataItemThree: TxMetadataItem
38+
lateinit var txMetadataItemFour: TxMetadataItem
3239
lateinit var txMetadataItems: List<TxMetadataItem>
3340

3441
@BeforeEach
3542
fun beforeEach() {
3643
txId = Entropy.generateRandomBytes(32)
44+
45+
// protobuf bytes
46+
// 0a2028f18c0366f4b3cbf5aca02653d038764b786b5ec1eddc601e82179464f3173f109df3e9bc061a13416c69636527732050697a7a612050617274792100000000008049402a035553443207657870656e7365
3747
txMetadataItem = TxMetadataItem(
3848
txId,
3949
System.currentTimeMillis() / 1000,
4050
"Alice's Pizza Party",
4151
51.00,
4252
"USD",
4353
"expense",
44-
null,
45-
version = 0
54+
null
4655
)
4756

4857
txMetadataItemTwo = TxMetadataItem(
@@ -55,7 +64,34 @@ class TxMetaDataTests : PlatformNetwork() {
5564
"DashDirect"
5665
)
5766

58-
txMetadataItems = listOf(txMetadataItem, txMetadataItemTwo)
67+
txMetadataItemThree = TxMetadataItem(
68+
Entropy.generateRandomBytes(32),
69+
System.currentTimeMillis() / 1000,
70+
null,
71+
52.23,
72+
"USD",
73+
"expense"
74+
)
75+
76+
txMetadataItemFour = TxMetadataItem(
77+
Converters.fromHex("c44d1077cd4628d0ac06e22032a4e8458f9d01be6342453de3eef88657b193ce"),
78+
System.currentTimeMillis() / 1000,
79+
"Bob's Burger Joint",
80+
52.23,
81+
"USD",
82+
"expense",
83+
"DashDirect",
84+
customIconUrl = "https://storage.googleapis.com/mash-potato-fireplace.appspot.com/alhi323/alhi/alhirafiyun.png",
85+
giftCardNumber = "123456-7899-abcdef",
86+
giftCardPin = "1234",
87+
merchantName = "1-800-HotSoup",
88+
originalPrice = 54.99,
89+
barcodeValue = "3249u3ou234238403820820840238082304823047234098234023802384",
90+
barcodeFormat = "EAN_8",
91+
merchantUrl = "https://1-800-hotsoup.com"
92+
)
93+
94+
txMetadataItems = listOf(txMetadataItem, txMetadataItemTwo, txMetadataItemThree, txMetadataItemFour)
5995
}
6096

6197
@Test
@@ -67,26 +103,80 @@ class TxMetaDataTests : PlatformNetwork() {
67103
"exchangeRate" to 51.00,
68104
"currencyCode" to "USD",
69105
"taxCategory" to "expense",
70-
"version" to 0
71106
),
72107
txMetadataItem.toObject()
73108
)
74109
}
75110

111+
@Test
112+
fun toProtobufTest() {
113+
txMetadataItem.toProtobuf().toByteArray()
114+
}
115+
76116
@Test
77117
fun toCborTestForOneItemTest() {
78118
assertArrayEquals(
79-
Converters.fromHex("a7646d656d6f72426f62277320427572676572204a6f696e7464747849645820c44d1077cd4628d0ac06e22032a4e8458f9d01be6342453de3eef88657b193ce67736572766963656a446173684469726563746776657273696f6e006b74617843617465676f727967657870656e73656c63757272656e6379436f6465635553446c65786368616e676552617465fb404a1d70a3d70a3d"),
119+
Converters.fromHex("A6646D656D6F72426F62277320427572676572204A6F696E7464747849645820C44D1077CD4628D0AC06E22032A4E8458F9D01BE6342453DE3EEF88657B193CE67736572766963656A446173684469726563746B74617843617465676F727967657870656E73656C63757272656E6379436F6465635553446C65786368616E676552617465FB404A1D70A3D70A3D".lowercase()),
80120
Cbor.encode(txMetadataItemTwo.toObject())
81121
)
82122
}
83123

124+
//
125+
// 0a
126+
// 20 - 32 bytes
127+
// 28f18c0366f4b3cbf5aca02653d038764b786b5ec1eddc601e82179464f3173f - txId
128+
// 10
129+
// b7f9e9bc061a13416c69636527732050697a7a612050617274792100000000008049402a035553443207657870656e7365
130+
131+
@Test
132+
fun toProtobufForOneItemtest() {
133+
txMetadataItem = TxMetadataItem(
134+
Sha256Hash.wrap("28f18c0366f4b3cbf5aca02653d038764b786b5ec1eddc601e82179464f3173f").bytes,
135+
1738177719933 / 1000,
136+
"Alice's Pizza Party",
137+
51.00,
138+
"USD",
139+
"expense",
140+
null
141+
)
142+
println(System.currentTimeMillis())
143+
println(txMetadataItem.toProtobuf().toByteArray().toHex())
144+
assertArrayEquals(
145+
Converters.fromHex("0a2028f18c0366f4b3cbf5aca02653d038764b786b5ec1eddc601e82179464f3173f10b7f9e9bc061a13416c69636527732050697a7a612050617274792100000000008049402a035553443207657870656e7365"),
146+
txMetadataItem.toProtobuf().toByteArray()
147+
)
148+
}
149+
84150
@Test
85151
fun toCborTestForAllItemsTest() {
86152
val cborData = Cbor.encode(txMetadataItems.map { it.toObject() })
87153
val map = Cbor.decodeList(cborData)
88154
}
89155

156+
@Test
157+
fun serializedSizeTest() {
158+
txMetadataItems.forEachIndexed { i, item ->
159+
val cborData = Cbor.encode(item.toObject())
160+
val protobufData = item.toProtobuf().toByteArray()
161+
assertTrue(cborData.size > protobufData.size)
162+
println("$i: cbor = ${cborData.size} bytes; protobuf = ${protobufData.size}; %less = ${(cborData.size-protobufData.size).toDouble()/cborData.size}")
163+
}
164+
val cborData = Cbor.encode(txMetadataItems.map { it.toObject() })
165+
val protobufData = TxMetadataBatch.newBuilder()
166+
.addAllItems(txMetadataItems.map { it.toProtobuf() })
167+
.build().toByteArray()
168+
assertTrue(cborData.size > protobufData.size)
169+
println("all: cbor = ${cborData.size} bytes; protobuf = ${protobufData.size}; %less = ${(cborData.size-protobufData.size).toDouble()/cborData.size}")
170+
}
171+
172+
@Test
173+
fun deserializedTest() {
174+
val serializedBytes = txMetadataItem.toProtobuf().toByteArray()
175+
assertEquals(84, serializedBytes.size)
176+
val deserializedTxMetadata = TxMetadataItem(WalletUtils.TxMetadataItem.parseFrom(serializedBytes))
177+
assertEquals(txMetadataItem, deserializedTxMetadata)
178+
}
179+
90180
@Test
91181
fun roundTripTest() {
92182
val blockchainIdentity = BlockchainIdentity(platform, 0, wallet, authenticationGroupExtension)
@@ -132,4 +222,9 @@ class TxMetaDataTests : PlatformNetwork() {
132222
// 32 bytes = IV (16 bytes) + 1 block (16 bytes)
133223
assertEquals(32, encryptedData.initialisationVector.size + encryptedData.encryptedBytes.size)
134224
}
225+
226+
@Test
227+
fun publishToPlatform() {
228+
229+
}
135230
}

0 commit comments

Comments
 (0)