Skip to content

Commit a6cdd69

Browse files
authored
CORE-6121: Add Java compatibility tests for Merkle tree interfaces (#709)
Add some compatibility tests to make sure the Merkle tree related Kotlin interfaces are callable from Java.
1 parent 530b62b commit a6cdd69

File tree

4 files changed

+150
-0
lines changed

4 files changed

+150
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package net.corda.v5.application.crypto;
2+
3+
import net.corda.v5.crypto.DigestAlgorithmName;
4+
import net.corda.v5.crypto.merkle.MerkleTree;
5+
import net.corda.v5.crypto.merkle.MerkleTreeHashDigest;
6+
import org.assertj.core.api.Assertions;
7+
import org.junit.jupiter.api.Test;
8+
9+
import java.util.ArrayList;
10+
import java.util.HashMap;
11+
import java.util.List;
12+
13+
import static org.mockito.ArgumentMatchers.any;
14+
import static org.mockito.Mockito.mock;
15+
import static org.mockito.Mockito.when;
16+
17+
class MerkleTreeFactoryJavaApiTest {
18+
19+
private final MerkleTreeFactory merkleTreeFactory = mock(MerkleTreeFactory.class);
20+
21+
@Test
22+
void createTree() {
23+
final MerkleTree tree = mock(MerkleTree.class);
24+
when(merkleTreeFactory.createTree(any(), any())).thenReturn(tree);
25+
26+
final List<byte[]> leaves = new ArrayList<>();
27+
final MerkleTreeHashDigest digest = mock(MerkleTreeHashDigest.class);
28+
final MerkleTree result = merkleTreeFactory.createTree(leaves, digest);
29+
30+
Assertions.assertThat(result).isEqualTo(tree);
31+
}
32+
33+
@Test
34+
void createHashDigest() {
35+
final DigestAlgorithmName digestAlgorithmName = DigestAlgorithmName.DEFAULT_ALGORITHM_NAME;
36+
final MerkleTreeHashDigest hashDigest = mock(MerkleTreeHashDigest.class);
37+
// TODO: figure out what to do about the default third argument to createHashDigest, not supported in Java
38+
// by default. According to our coding standards doc, we should either replace this with a manual
39+
// overload. See JIRA CORE-8374.
40+
when(merkleTreeFactory.createHashDigest(any(), any(), any())).thenReturn(hashDigest);
41+
42+
final MerkleTreeHashDigest result = merkleTreeFactory.createHashDigest(
43+
"FakeProvider",
44+
digestAlgorithmName,
45+
new HashMap<>());
46+
Assertions.assertThat(result).isEqualTo(hashDigest);
47+
}
48+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package net.corda.v5.application.crypto.merkle;
2+
3+
import net.corda.v5.crypto.merkle.MerkleProof;
4+
import net.corda.v5.crypto.merkle.MerkleTree;
5+
import org.assertj.core.api.Assertions;
6+
import org.junit.jupiter.api.Test;
7+
8+
import java.util.ArrayList;
9+
import java.util.List;
10+
11+
import static org.mockito.ArgumentMatchers.any;
12+
import static org.mockito.Mockito.mock;
13+
import static org.mockito.Mockito.when;
14+
15+
class MerkleTreeJavaApiTest {
16+
17+
private final MerkleTree merkleTree = mock(MerkleTree.class);
18+
19+
@Test
20+
void createAuditProof() {
21+
final MerkleProof proof = mock(MerkleProof.class);
22+
when(merkleTree.createAuditProof(any())).thenReturn(proof);
23+
24+
final List<Integer> leafIndices = new ArrayList<>();
25+
final MerkleProof result = merkleTree.createAuditProof(leafIndices);
26+
27+
Assertions.assertThat(result).isEqualTo(proof);
28+
}
29+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package net.corda.v5.crypto.merkle;
2+
3+
import net.corda.v5.crypto.SecureHash;
4+
import org.assertj.core.api.Assertions;
5+
import org.junit.jupiter.api.Test;
6+
7+
import static org.mockito.ArgumentMatchers.any;
8+
import static org.mockito.Mockito.mock;
9+
import static org.mockito.Mockito.when;
10+
11+
class MerkleProofJavaApiTest {
12+
13+
private final MerkleProof merkleProof = mock(MerkleProof.class);
14+
15+
@Test
16+
void verify() {
17+
when(merkleProof.verify(any(), any())).thenReturn(true);
18+
19+
final SecureHash hash = new SecureHash("SHA-256", "123".getBytes());
20+
final MerkleTreeHashDigest digest = mock(MerkleTreeHashDigest.class);
21+
final boolean result = merkleProof.verify(hash, digest);
22+
23+
Assertions.assertThat(result).isEqualTo(true);
24+
}
25+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package net.corda.v5.cipher.suite.merkle;
2+
3+
import net.corda.v5.crypto.DigestAlgorithmName;
4+
import net.corda.v5.crypto.extensions.merkle.MerkleTreeHashDigestProvider;
5+
import net.corda.v5.crypto.merkle.MerkleTree;
6+
import org.assertj.core.api.Assertions;
7+
import org.junit.jupiter.api.Test;
8+
9+
import java.util.ArrayList;
10+
import java.util.HashMap;
11+
import java.util.List;
12+
13+
import static org.mockito.ArgumentMatchers.any;
14+
import static org.mockito.Mockito.mock;
15+
import static org.mockito.Mockito.when;
16+
17+
class MerkleTreeProviderJavaApiTest {
18+
19+
private final MerkleTreeProvider merkleTreeProvider = mock(MerkleTreeProvider.class);
20+
21+
@Test
22+
void createTree() {
23+
final MerkleTree tree = mock(MerkleTree.class);
24+
when(merkleTreeProvider.createTree(any(), any())).thenReturn(tree);
25+
26+
final List<byte[]> leaves = new ArrayList<>();
27+
final MerkleTreeHashDigestProvider digestProvider = mock(MerkleTreeHashDigestProvider.class);
28+
final MerkleTree result = merkleTreeProvider.createTree(leaves, digestProvider);
29+
30+
Assertions.assertThat(result).isEqualTo(tree);
31+
}
32+
33+
@Test
34+
void createHashDigestProvider() {
35+
final DigestAlgorithmName digestAlgorithmName = DigestAlgorithmName.DEFAULT_ALGORITHM_NAME;
36+
final MerkleTreeHashDigestProvider hashDigestProvider = mock(MerkleTreeHashDigestProvider.class);
37+
// TODO: figure out what to do about the default third argument to createHashDigestProvider, not supported in Java
38+
// by default. According to our coding standards doc, we should either replace this with a manual
39+
// overload. See JIRA CORE-8374.
40+
when(merkleTreeProvider.createHashDigestProvider(any(), any(), any())).thenReturn(hashDigestProvider);
41+
42+
final MerkleTreeHashDigestProvider result = merkleTreeProvider.createHashDigestProvider(
43+
"FakeProvider",
44+
digestAlgorithmName,
45+
new HashMap<>());
46+
Assertions.assertThat(result).isEqualTo(hashDigestProvider);
47+
}
48+
}

0 commit comments

Comments
 (0)