|
|
@@ -18,26 +18,39 @@ public class MerkleDataNodeEncoderTest { |
|
|
|
|
|
|
|
|
@Test |
|
|
@Test |
|
|
public void testEnocoderV0() { |
|
|
public void testEnocoderV0() { |
|
|
MerkleDataNodeEncoder encoderV0 = new MerkleDataNodeEncoder_V0(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Random rand = new Random(); |
|
|
Random rand = new Random(); |
|
|
|
|
|
|
|
|
byte[] data = new byte[512]; |
|
|
byte[] data = new byte[512]; |
|
|
byte[] key = new byte[256]; |
|
|
|
|
|
|
|
|
byte[] keyBytes = new byte[256]; |
|
|
|
|
|
|
|
|
rand.nextBytes(data); |
|
|
rand.nextBytes(data); |
|
|
rand.nextBytes(key); |
|
|
|
|
|
|
|
|
rand.nextBytes(keyBytes); |
|
|
|
|
|
Bytes key = new Bytes(keyBytes); |
|
|
|
|
|
|
|
|
long sn = 1024; |
|
|
long sn = 1024; |
|
|
long version = 1; |
|
|
long version = 1; |
|
|
|
|
|
|
|
|
DataNode nodeV0 = encoderV0.create(ClassicAlgorithm.SHA256.code(), sn, new Bytes(key), version, data); |
|
|
|
|
|
|
|
|
doTestV0(sn, version, key, data); |
|
|
|
|
|
|
|
|
|
|
|
sn = 0; |
|
|
|
|
|
version = 1000; |
|
|
|
|
|
doTestV0(sn, version, key, data); |
|
|
|
|
|
|
|
|
|
|
|
sn = (1 << 56) -1; |
|
|
|
|
|
version = 1000; |
|
|
|
|
|
doTestV0(sn, version, key, data); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void doTestV0(long sn, long version, Bytes key, byte[] data) { |
|
|
|
|
|
MerkleDataNodeEncoder encoderV0 = new MerkleDataNodeEncoder_V0(); |
|
|
|
|
|
DataNode nodeV0 = encoderV0.create(ClassicAlgorithm.SHA256.code(), sn, key, version, data); |
|
|
|
|
|
|
|
|
assertNull(nodeV0.getValueHash()); |
|
|
assertNull(nodeV0.getValueHash()); |
|
|
|
|
|
|
|
|
assertEquals(sn, nodeV0.getSN()); |
|
|
assertEquals(sn, nodeV0.getSN()); |
|
|
assertEquals(version, nodeV0.getVersion()); |
|
|
assertEquals(version, nodeV0.getVersion()); |
|
|
assertEquals(new Bytes(key), nodeV0.getKey()); |
|
|
|
|
|
|
|
|
assertEquals(key, nodeV0.getKey()); |
|
|
|
|
|
|
|
|
byte[] nodeBytes = nodeV0.toBytes(); |
|
|
byte[] nodeBytes = nodeV0.toBytes(); |
|
|
|
|
|
|
|
|
@@ -47,37 +60,47 @@ public class MerkleDataNodeEncoderTest { |
|
|
assertEquals(nodeV0.getNodeHash(), nodeV0_reversed.getNodeHash()); |
|
|
assertEquals(nodeV0.getNodeHash(), nodeV0_reversed.getNodeHash()); |
|
|
assertEquals(encoderV0.getFormatVersion(), nodeBytes[0]); |
|
|
assertEquals(encoderV0.getFormatVersion(), nodeBytes[0]); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertEquals(sn, nodeV0_reversed.getSN()); |
|
|
assertEquals(sn, nodeV0_reversed.getSN()); |
|
|
assertEquals(version, nodeV0_reversed.getVersion()); |
|
|
assertEquals(version, nodeV0_reversed.getVersion()); |
|
|
assertEquals(new Bytes(key), nodeV0_reversed.getKey()); |
|
|
|
|
|
|
|
|
assertEquals(key, nodeV0_reversed.getKey()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Test |
|
|
@Test |
|
|
public void testEnocoderV1() { |
|
|
public void testEnocoderV1() { |
|
|
MerkleDataNodeEncoder encoderV1 = new MerkleDataNodeEncoder_V1(); |
|
|
|
|
|
|
|
|
|
|
|
Random rand = new Random(); |
|
|
Random rand = new Random(); |
|
|
|
|
|
|
|
|
byte[] data = new byte[512]; |
|
|
byte[] data = new byte[512]; |
|
|
byte[] key = new byte[256]; |
|
|
|
|
|
|
|
|
byte[] keyBytes = new byte[256]; |
|
|
|
|
|
|
|
|
rand.nextBytes(data); |
|
|
rand.nextBytes(data); |
|
|
rand.nextBytes(key); |
|
|
|
|
|
|
|
|
|
|
|
HashFunction hashFunc = Crypto.getHashFunction(ClassicAlgorithm.SHA256); |
|
|
|
|
|
HashDigest dataHash = hashFunc.hash(data); |
|
|
|
|
|
|
|
|
rand.nextBytes(keyBytes); |
|
|
|
|
|
Bytes key = new Bytes(keyBytes); |
|
|
|
|
|
|
|
|
long sn = 1024; |
|
|
long sn = 1024; |
|
|
long version = 1; |
|
|
long version = 1; |
|
|
|
|
|
|
|
|
DataNode node = encoderV1.create(ClassicAlgorithm.SHA256.code(), sn, new Bytes(key), version, data); |
|
|
|
|
|
|
|
|
doTestV1(sn, version, key, data); |
|
|
|
|
|
|
|
|
|
|
|
sn = 0; |
|
|
|
|
|
version = 10088; |
|
|
|
|
|
doTestV1(sn, version, key, data); |
|
|
|
|
|
|
|
|
|
|
|
sn = (1 << 56) -1; |
|
|
|
|
|
version = 1000; |
|
|
|
|
|
doTestV1(sn, version, key, data); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void doTestV1(long sn, long version, Bytes key, byte[] data) { |
|
|
|
|
|
HashFunction hashFunc = Crypto.getHashFunction(ClassicAlgorithm.SHA256); |
|
|
|
|
|
HashDigest dataHash = hashFunc.hash(data); |
|
|
|
|
|
|
|
|
|
|
|
MerkleDataNodeEncoder encoderV1 = new MerkleDataNodeEncoder_V1(); |
|
|
|
|
|
DataNode node = encoderV1.create(ClassicAlgorithm.SHA256.code(), sn, key, version, data); |
|
|
|
|
|
|
|
|
assertEquals(dataHash, node.getValueHash()); |
|
|
assertEquals(dataHash, node.getValueHash()); |
|
|
|
|
|
|
|
|
assertEquals(sn, node.getSN()); |
|
|
assertEquals(sn, node.getSN()); |
|
|
assertEquals(version, node.getVersion()); |
|
|
assertEquals(version, node.getVersion()); |
|
|
assertEquals(new Bytes(key), node.getKey()); |
|
|
|
|
|
|
|
|
assertEquals(key, node.getKey()); |
|
|
|
|
|
|
|
|
byte[] nodeBytes = node.toBytes(); |
|
|
byte[] nodeBytes = node.toBytes(); |
|
|
|
|
|
|
|
|
@@ -89,8 +112,42 @@ public class MerkleDataNodeEncoderTest { |
|
|
|
|
|
|
|
|
assertEquals(sn, node_reversed.getSN()); |
|
|
assertEquals(sn, node_reversed.getSN()); |
|
|
assertEquals(version, node_reversed.getVersion()); |
|
|
assertEquals(version, node_reversed.getVersion()); |
|
|
assertEquals(new Bytes(key), node_reversed.getKey()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertEquals(key, node_reversed.getKey()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
public void testCompatibility() { |
|
|
|
|
|
Random rand = new Random(); |
|
|
|
|
|
|
|
|
|
|
|
byte[] data = new byte[512]; |
|
|
|
|
|
byte[] keyBytes = new byte[256]; |
|
|
|
|
|
|
|
|
|
|
|
rand.nextBytes(data); |
|
|
|
|
|
rand.nextBytes(keyBytes); |
|
|
|
|
|
|
|
|
|
|
|
Bytes key = new Bytes(keyBytes); |
|
|
|
|
|
|
|
|
|
|
|
long sn = 1024; |
|
|
|
|
|
long version = 1; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PreviousDataNode pdataNode = PreviousDataNode.newDataNode(ClassicAlgorithm.SHA256.code(), sn, key, version, |
|
|
|
|
|
data); |
|
|
|
|
|
|
|
|
|
|
|
MerkleDataNodeEncoder encoderV0 = new MerkleDataNodeEncoder_V0(); |
|
|
|
|
|
DataNode dataNode = encoderV0.create(ClassicAlgorithm.SHA256.code(), sn, key, version, data); |
|
|
|
|
|
|
|
|
|
|
|
assertEquals(pdataNode.getNodeHash(), dataNode.getNodeHash()); |
|
|
|
|
|
assertEquals(pdataNode.getSN(), dataNode.getSN()); |
|
|
|
|
|
assertEquals(pdataNode.getVersion(), dataNode.getVersion()); |
|
|
|
|
|
assertEquals(pdataNode.getKey(), dataNode.getKey()); |
|
|
|
|
|
|
|
|
|
|
|
DataNode dataNode_reversed = encoderV0.resolve(pdataNode.toBytes()); |
|
|
|
|
|
|
|
|
|
|
|
assertNull(dataNode_reversed.getValueHash()); |
|
|
|
|
|
assertEquals(pdataNode.getNodeHash(), dataNode_reversed.getNodeHash()); |
|
|
|
|
|
assertEquals(pdataNode.getSN(), dataNode_reversed.getSN()); |
|
|
|
|
|
assertEquals(pdataNode.getVersion(), dataNode_reversed.getVersion()); |
|
|
|
|
|
assertEquals(pdataNode.getKey(), dataNode_reversed.getKey()); |
|
|
|
|
|
} |
|
|
} |
|
|
} |