bdledger-java-sdk/src/test/java/bdchain/api/AccountingChainClientTests.java
2019-04-23 15:58:21 +08:00

197 lines
7.4 KiB
Java

package bdchain.api;
import bdchain.api.grpc.acchain.Block;
import bdchain.api.grpc.acchain.Transaction;
import bdchain.api.grpc.common.TransactionType;
import com.google.protobuf.ByteString;
import io.grpc.Status;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
@DisplayName("Accounting Chain tests")
class AccountingChainClientTests {
private static final String ledger = "test";
private static final int blockNumber = 2018;
private static final String blockHashStr =
"deadc0dedeadc0dedeadc0dedeadc0dedeadc0dedeadc0dedeadc0dedeadc0de";
private static final ByteString blockHash =
ByteString.copyFrom(Utils.hexStringToByteArray(blockHashStr));
private static final ByteString parentHash =
ByteString.copyFrom(
Utils.hexStringToByteArray(
"babefacebabefacebabefacebabefacebabefacebabefacebabefacebabeface"));
private static final String[] witnessStrs = {
"0404040404040404040404040404040404040404",
"1313131313131313131313131313131313131313",
"5252525252525252525252525252525252525252"
};
private static final List<ByteString> witnesses =
Arrays.stream(witnessStrs)
.map(s -> ByteString.copyFrom(Utils.hexStringToByteArray(s)))
.collect(Collectors.toList());
private static final long timestamp = 2018050400000L;
private static final long size = 20180504L;
private static final ByteString transactionsRoot =
ByteString.copyFrom(
Utils.hexStringToByteArray(
"50bada5550bada5550bada5550bada5550bada5550bada5550bada5550bada55"));
private static final int index = 0;
private static final ByteString from =
ByteString.copyFrom(Utils.hexStringToByteArray("f00dcafef00dcafef00dcafef00dcafef00dcafe"));
private static final long nonce = 2018L;
private static final ByteString to =
ByteString.copyFrom(Utils.hexStringToByteArray("feedbabefeedbabefeedbabefeedbabefeedbabe"));
private static final ByteString data =
ByteString.copyFrom(Utils.hexStringToByteArray("deadbeef"));
private static final ByteString v = ByteString.copyFrom(Utils.hexStringToByteArray("25"));
private static final ByteString r =
ByteString.copyFrom(
Utils.hexStringToByteArray(
"1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea"));
private static final ByteString s =
ByteString.copyFrom(
Utils.hexStringToByteArray(
"4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c"));
private static final String txHashStr =
"0404040404040404040404040404040404040404040404040404040404040404";
private static final ByteString txHash1 =
ByteString.copyFrom(Utils.hexStringToByteArray(txHashStr));
private static final ByteString txHash2 =
ByteString.copyFrom(
Utils.hexStringToByteArray(
"1313131313131313131313131313131313131313131313131313131313131313"));
private static final Block block =
Block.newBuilder()
.setNumber(blockNumber)
.setHash(blockHash)
.setParentHash(parentHash)
.addAllWitnesses(witnesses)
.setTimestamp(timestamp)
.setSize(size)
.setTransactionsRoot(transactionsRoot)
.addAllTransactionHashes(Arrays.asList(txHash1, txHash2))
.build();
private static final Transaction tx =
Transaction.newBuilder()
.setBlockNumber(blockNumber)
.setBlockHash(blockHash)
.setIndex(index)
.setHash(txHash1)
.setType(TransactionType.RECORD)
.setFrom(from)
.setNonce(nonce)
.setTo(from)
.setData(data)
.setV(v)
.setR(r)
.setS(s)
.build();
private static AccountingChainClient acClient;
@BeforeAll
static void initAll() {
acClient = new AccountingChainClient("47.92.69.234", 18080);
// acClient = new AccountingChainClient("localhost", 10001);
}
@Test
@DisplayName("ClientVersion#1")
void clientVersion1() throws InterruptedException, ExecutionException {
assertEquals(
"AcChainGo/v0.0.1alpha/darwin/go1.11", acClient.clientVersion().get().getVersion());
}
@Test
@DisplayName("BlockNumber#1")
void blockNumber1() throws InterruptedException, ExecutionException {
System.out.println(acClient.blockNumber(ledger).get().getBlockNumber());
// assertEquals(blockNumber, acClient.blockNumber(ledger).get().getBlockNumber());
}
@Test
@DisplayName("BlockNumber#2")
void blockNumber2() {
Throwable e = assertThrows(Exception.class, () -> acClient.blockNumber("").get());
Status s = Status.fromThrowable(e);
assertEquals(Status.Code.INVALID_ARGUMENT, s.getCode());
assertEquals("ledger must not be empty", s.getDescription());
}
@Test
@DisplayName("GetBlockByNumber#1")
void getBlockByNumber1() throws ExecutionException, InterruptedException {
// Block b = acClient.getBlockByNumber(ledger, blockNumber, true).get();
Block b = acClient.getBlockByNumber(ledger, 2595, false).get();
System.out.println(b.getNumber());
// Block blockFull =
// Block.newBuilder(block)
// .addAllTransactions(
// Arrays.asList(
// Transaction.newBuilder(tx).setIndex(0).build(),
// Transaction.newBuilder(tx)
// .setIndex(1)
// .setHash(txHash2)
// .setType(TransactionType.MESSAGE)
// .setNonce(2019L)
// .setTo(to)
// .clearData()
// .build()))
// .clearTransactionHashes()
// .build();
// assertEquals(blockFull, b);
}
@Test
@DisplayName("GetBlockByNumber#2")
void GetBlockByNumber2() throws ExecutionException, InterruptedException {
Block b = acClient.getBlockByNumber(ledger, blockNumber, false).get();
assertEquals(block, b);
}
@Test
@DisplayName("GetBlockByHash#1")
void getBlockByHash1() throws ExecutionException, InterruptedException {
Block b = acClient.getBlockByHash(ledger, blockHashStr, false).get();
assertEquals(block, b);
}
@Test
@DisplayName("GetTransactionByHash#1")
void getTransactionByHash1() throws ExecutionException, InterruptedException {
Transaction t = acClient.getTransactionByHash(ledger, txHashStr).get();
assertEquals(tx, t);
}
@Test
@DisplayName("GetTransactionByBlockNumberAndIndex#1")
void GetTransactionByBlockNumberAndIndex1() throws ExecutionException, InterruptedException {
Transaction t = acClient.getTransactionByBlockNumberAndIndex(ledger, blockNumber, index).get();
assertEquals(tx, t);
}
@Test
@DisplayName("GetTransactionByBlockHashAndIndex#1")
void GetTransactionByBlockHashAndIndex1() throws ExecutionException, InterruptedException {
Transaction t = acClient.getTransactionByBlockHashAndIndex(ledger, blockHashStr, index).get();
assertEquals(tx, t);
}
@AfterAll
static void teadDwonAll() throws InterruptedException {
acClient.shutdown();
}
}