From 89a1a22fe56f00df8d894af785e73c7bc5b9e070 Mon Sep 17 00:00:00 2001 From: huanghaiquan Date: Wed, 12 Jun 2019 23:26:08 +0800 Subject: [PATCH] Fixed errors of TransactionBatchProcessor's testcase; --- .../ledger/core/impl/LedgerInitializer.java | 85 --- .../blockchain/ledger/LedgerEditerTest.java | 48 +- .../blockchain/ledger/LedgerManagerTest.java | 8 +- .../jd/blockchain/ledger/LedgerTestUtils.java | 103 ++-- .../ledger/TransactionBatchProcessorTest.java | 532 +++++------------- .../ContractInvocationProxyBuilder.java | 11 +- .../jd/blockchain/intgr/IntegrationBase.java | 56 +- .../intgr/contract/AssetContract2.java | 41 -- .../intgr/contract/AssetContractImpl.java | 5 + .../contract/ContractInvocationTest.java | 14 + .../ledger/LedgerBlockGeneratingTest.java | 2 - .../com/jd/blockchain/utils/io/FileUtils.java | 31 +- 12 files changed, 286 insertions(+), 650 deletions(-) delete mode 100644 source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/LedgerInitializer.java delete mode 100644 source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/contract/AssetContract2.java create mode 100644 source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/contract/AssetContractImpl.java create mode 100644 source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/contract/ContractInvocationTest.java diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/LedgerInitializer.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/LedgerInitializer.java deleted file mode 100644 index 78fec379..00000000 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/LedgerInitializer.java +++ /dev/null @@ -1,85 +0,0 @@ -//package com.jd.blockchain.ledger.core.impl; -// -//import com.jd.blockchain.crypto.hash.HashDigest; -//import com.jd.blockchain.ledger.TransactionState; -//import com.jd.blockchain.ledger.LedgerBlock; -//import com.jd.blockchain.ledger.LedgerTransaction; -//import com.jd.blockchain.ledger.TransactionRequest; -//import com.jd.blockchain.ledger.core.LedgerDataSet; -//import com.jd.blockchain.ledger.core.LedgerEditor; -//import com.jd.blockchain.ledger.core.LedgerManage; -//import com.jd.blockchain.ledger.core.LedgerTransactionContext; -//import com.jd.blockchain.ledger.core.PrefixAppender; -//import com.jd.blockchain.storage.service.ExPolicyKVStorage; -//import com.jd.blockchain.storage.service.KVStorageService; -//import com.jd.blockchain.storage.service.VersioningKVStorage; -//import com.jd.blockchain.storage.service.utils.BufferedKVStorage; -// -///** -// * 账本初始化;
-// * -// * 初始生成账本时,所有的KV数据先缓冲写入到内存中,待计算得到账本 hash 之后,再重写入到与账本hash相关的持久化存储; -// * -// * @author huanghaiquan -// * -// */ -//class LedgerInitializer implements LedgerEditor { -// -// private KVStorageService baseStorage; -// -// private GenesisLedgerStorageProxy ledgerStorageProxy; -// -// private BufferedKVStorage genesisBufferedStorage; -// -// private LedgerEditor genesisBlockEditor; -// -// private LedgerBlock genesisBlock; -// -// private LedgerManage ledgerManager; -// -// LedgerInitializer(LedgerEditor genesisBlockEditor, BufferedKVStorage bufferedStorage, -// GenesisLedgerStorageProxy ledgerStorageProxy, KVStorageService kvStorage, LedgerManage ledgerManager) { -// this.genesisBlockEditor = genesisBlockEditor; -// this.genesisBufferedStorage = bufferedStorage; -// this.ledgerStorageProxy = ledgerStorageProxy; -// this.baseStorage = kvStorage; -// -// this.ledgerManager = ledgerManager; -// } -// -// @Override -// public LedgerTransactionContext newTransaction(TransactionRequest txRequest) { -// return genesisBlockEditor.newTransaction(txRequest); -// } -// -// @Override -// public LedgerBlock prepare() { -// // create genesis block; -// genesisBlock = genesisBlockEditor.prepare(); -// -// return genesisBlock; -// } -// -// @Override -// public void commit() { -// // commit data of editor; it will flush data to genesisBufferedStorage; -// genesisBlockEditor.commit(); -// -// // redirect persistence to storage which created for this new ledger with ledger hash; -// HashDigest ledgerHash = genesisBlock.getHash(); -// String ledgerPrefix =LedgerManager.getLedgerStoragePrefix(ledgerHash); -// ExPolicyKVStorage ledgerExStorage = PrefixAppender.prefix(ledgerPrefix, baseStorage.getExPolicyKVStorage()); -// VersioningKVStorage ledgerVerStorage = PrefixAppender.prefix(ledgerPrefix, baseStorage.getVersioningKVStorage()); -// -// // ready to persistent; -// ledgerStorageProxy.setPersistentStorage(ledgerExStorage, ledgerVerStorage); -// -// // flush output; -// genesisBufferedStorage.flush(); -// } -// -// @Override -// public void cancel() { -// genesisBlockEditor.cancel(); -// } -//} \ No newline at end of file diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerEditerTest.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerEditerTest.java index defed4b8..c7f3d6e6 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerEditerTest.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerEditerTest.java @@ -68,17 +68,17 @@ public class LedgerEditerTest { MemoryKVStorage storage = new MemoryKVStorage(); // 创建初始化配置; - LedgerInitSetting initSetting = createLedgerInitSetting(); + LedgerInitSetting initSetting = LedgerTestUtils.createLedgerInitSetting(); // 创建账本; return LedgerTransactionalEditor.createEditor(initSetting, LEDGER_KEY_PREFIX, storage, storage); } private LedgerTransactionContext createGenisisTx(LedgerEditor ldgEdt) { - TransactionRequest genesisTxReq = LedgerTestUtils.createTxRequest(null, signatureFunction); + TransactionRequest genesisTxReq = LedgerTestUtils.createTxRequest_UserReg(null); LedgerTransactionContext txCtx = ldgEdt.newTransaction(genesisTxReq); - + return txCtx; } @@ -88,8 +88,7 @@ public class LedgerEditerTest { LedgerEditor ldgEdt = createLedgerInitEditor(); LedgerTransactionContext genisisTxCtx = createGenisisTx(ldgEdt); LedgerDataSet ldgDS = genisisTxCtx.getDataSet(); - - + AsymmetricKeypair cryptoKeyPair = signatureFunction.generateKeypair(); BlockchainKeypair dataKP = new BlockchainKeypair(cryptoKeyPair.getPubKey(), cryptoKeyPair.getPrivKey()); @@ -147,42 +146,5 @@ public class LedgerEditerTest { ldgEdt.commit(); } - - private LedgerInitSetting createLedgerInitSetting() { - SignatureFunction signFunc = Crypto.getSignatureFunction("ED25519"); - - CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; - for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { - supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); - } - - CryptoConfig defCryptoSetting = new CryptoConfig(); - defCryptoSetting.setSupportedProviders(supportedProviders); - defCryptoSetting.setAutoVerifyHash(true); - defCryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256); - - LedgerInitSettingData initSetting = new LedgerInitSettingData(); - - initSetting.setLedgerSeed(BytesUtils.toBytes("A Test Ledger seed!", "UTF-8")); - initSetting.setCryptoSetting(defCryptoSetting); - ConsensusParticipantData[] parties = new ConsensusParticipantData[2]; - parties[0] = new ConsensusParticipantData(); - parties[0].setId(0); - parties[0].setName("John"); - AsymmetricKeypair kp0 = signFunc.generateKeypair(); - parties[0].setPubKey(kp0.getPubKey()); - parties[0].setAddress(AddressEncoding.generateAddress(kp0.getPubKey()).toBase58()); - parties[0].setHostAddress(new NetworkAddress("192.168.1.6", 9000)); - - parties[1] = new ConsensusParticipantData(); - parties[1].setId(1); - parties[1].setName("John"); - AsymmetricKeypair kp1 = signFunc.generateKeypair(); - parties[1].setPubKey(kp1.getPubKey()); - parties[1].setAddress(AddressEncoding.generateAddress(kp1.getPubKey()).toBase58()); - parties[1].setHostAddress(new NetworkAddress("192.168.1.7", 9000)); - initSetting.setConsensusParticipants(parties); - - return initSetting; - } + } diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerManagerTest.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerManagerTest.java index f8297824..9639602c 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerManagerTest.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerManagerTest.java @@ -83,13 +83,13 @@ public class LedgerManagerTest { LedgerEditor ldgEdt = ledgerManager.newLedger(initSetting, storage); // 创建一个模拟的创世交易; - TransactionRequest genesisTxReq = LedgerTestUtils.createTxRequest(null, signatureFunction); + TransactionRequest genesisTxReq = LedgerTestUtils.createTxRequest_UserReg(null); // 记录交易,注册用户; LedgerTransactionContext txCtx = ldgEdt.newTransaction(genesisTxReq); LedgerDataSet ldgDS = txCtx.getDataSet(); BlockchainKeypair userKP = BlockchainKeyGenerator.getInstance().generate(); - ; + UserAccount userAccount = ldgDS.getUserAccountSet().register(userKP.getAddress(), userKP.getPubKey()); userAccount.setProperty("Name", "孙悟空", -1); userAccount.setProperty("Age", "10000", -1); @@ -97,7 +97,7 @@ public class LedgerManagerTest { System.out.println("UserAddress=" + userAccount.getAddress()); // 提交交易结果; - LedgerTransaction tx = txCtx.commit(TransactionState.SUCCESS, null); + LedgerTransaction tx = txCtx.commit(TransactionState.SUCCESS); assertEquals(genesisTxReq.getTransactionContent().getHash(), tx.getTransactionContent().getHash()); assertEquals(0, tx.getBlockHeight()); @@ -137,7 +137,7 @@ public class LedgerManagerTest { LedgerTransactionContext txCtx1 = editor1.newTransaction(txRequest); txCtx1.getDataSet().getDataAccountSet().register(dataKey.getAddress(), dataKey.getPubKey(), null); - txCtx1.commit(TransactionState.SUCCESS, null); + txCtx1.commit(TransactionState.SUCCESS); LedgerBlock block1 = editor1.prepare(); editor1.commit(); diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerTestUtils.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerTestUtils.java index 52f050c4..82369888 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerTestUtils.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/LedgerTestUtils.java @@ -2,69 +2,102 @@ package test.com.jd.blockchain.ledger; import java.util.Random; -import com.jd.blockchain.crypto.AsymmetricKeypair; +import com.jd.blockchain.crypto.AddressEncoding; import com.jd.blockchain.crypto.Crypto; +import com.jd.blockchain.crypto.CryptoAlgorithm; import com.jd.blockchain.crypto.CryptoProvider; import com.jd.blockchain.crypto.HashDigest; -import com.jd.blockchain.crypto.PubKey; import com.jd.blockchain.crypto.SignatureFunction; import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; import com.jd.blockchain.crypto.service.sm.SMCryptoService; -import com.jd.blockchain.ledger.BlockchainIdentityData; +import com.jd.blockchain.ledger.BlockchainKeyGenerator; +import com.jd.blockchain.ledger.BlockchainKeypair; import com.jd.blockchain.ledger.CryptoSetting; -import com.jd.blockchain.ledger.PreparedTransaction; +import com.jd.blockchain.ledger.LedgerInitSetting; import com.jd.blockchain.ledger.TransactionRequest; +import com.jd.blockchain.ledger.TransactionRequestBuilder; import com.jd.blockchain.ledger.TransactionResponse; import com.jd.blockchain.ledger.core.CryptoConfig; import com.jd.blockchain.ledger.core.impl.TransactionStagedSnapshot; +import com.jd.blockchain.transaction.ConsensusParticipantData; +import com.jd.blockchain.transaction.LedgerInitSettingData; import com.jd.blockchain.transaction.TransactionService; -import com.jd.blockchain.transaction.TxTemplate; +import com.jd.blockchain.transaction.TxBuilder; +import com.jd.blockchain.utils.io.BytesUtils; +import com.jd.blockchain.utils.net.NetworkAddress; public class LedgerTestUtils { - // private static ThreadLocalRandom rand = ThreadLocalRandom.current(); + public static final SignatureFunction ED25519_SIGN_FUNC = Crypto.getSignatureFunction("ED25519"); + + public static final CryptoAlgorithm ED25519 = ED25519_SIGN_FUNC.getAlgorithm(); private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), SMCryptoService.class.getName() }; private static Random rand = new Random(); - public static TransactionRequest createTxRequest(HashDigest ledgerHash) { - SignatureFunction signFunc = Crypto.getSignatureFunction("ED25519"); - return createTxRequest(ledgerHash, signFunc); + public static TransactionRequest createTxRequest_UserReg(HashDigest ledgerHash) { + BlockchainKeypair key = BlockchainKeyGenerator.getInstance().generate(ED25519); + return createTxRequest_UserReg(ledgerHash, key); + } + + public static LedgerInitSetting createLedgerInitSetting() { + BlockchainKeypair[] partiKeys = new BlockchainKeypair[2]; + partiKeys[0] = BlockchainKeyGenerator.getInstance().generate(); + partiKeys[1] = BlockchainKeyGenerator.getInstance().generate(); + return createLedgerInitSetting(partiKeys); } - public static TransactionRequest createTxRequest(HashDigest ledgerHash, SignatureFunction signatureFunction) { - TxHandle txHandle = new TxHandle(); + public static LedgerInitSetting createLedgerInitSetting(BlockchainKeypair[] partiKeys) { + CryptoProvider[] supportedProviders = new CryptoProvider[SUPPORTED_PROVIDERS.length]; + for (int i = 0; i < SUPPORTED_PROVIDERS.length; i++) { + supportedProviders[i] = Crypto.getProvider(SUPPORTED_PROVIDERS[i]); + } + + CryptoConfig defCryptoSetting = new CryptoConfig(); + defCryptoSetting.setSupportedProviders(supportedProviders); + defCryptoSetting.setAutoVerifyHash(true); + defCryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256); + + LedgerInitSettingData initSetting = new LedgerInitSettingData(); - TxTemplate txTemp = new TxTemplate(ledgerHash, txHandle); + initSetting.setLedgerSeed(BytesUtils.toBytes("A Test Ledger seed!", "UTF-8")); + initSetting.setCryptoSetting(defCryptoSetting); + ConsensusParticipantData[] parties = new ConsensusParticipantData[partiKeys.length]; + for (int i = 0; i < parties.length; i++) { + parties[i] = new ConsensusParticipantData(); + parties[i].setId(0); + parties[i].setName("Parti-" + i); + parties[i].setPubKey(partiKeys[i].getPubKey()); + parties[i].setAddress(AddressEncoding.generateAddress(partiKeys[i].getPubKey()).toBase58()); + parties[i].setHostAddress(new NetworkAddress("192.168.1." + (10 + i), 9000)); - AsymmetricKeypair cryptoKeyPair = signatureFunction.generateKeypair(); - PubKey pubKey = cryptoKeyPair.getPubKey(); - txTemp.users().register(new BlockchainIdentityData(pubKey)); - PreparedTransaction ptx = txTemp.prepare(); - ptx.sign(cryptoKeyPair); - ptx.commit(); - return txHandle.txRequest; + } + + initSetting.setConsensusParticipants(parties); + + return initSetting; + } + + public static TransactionRequest createTxRequest_UserReg(HashDigest ledgerHash, BlockchainKeypair userKeypair) { + return createTxRequest_UserReg(ledgerHash, userKeypair, null); } -// public static TransactionRequest createContractEventTxRequest(HashDigest ledgerHash, -// SignatureFunction signatureFunction, String contractAddress, String event, byte[] args) { -// TxHandle txHandle = new TxHandle(); -// -// TxTemplate txTemp = new TxTemplate(ledgerHash, txHandle); -// -// txTemp.contractEvents().send(contractAddress, event, args); -// -// AsymmetricKeypair cryptoKeyPair = signatureFunction.generateKeypair(); -// PubKey pubKey = cryptoKeyPair.getPubKey(); -// txTemp.users().register(new BlockchainIdentityData(pubKey)); -// PreparedTransaction ptx = txTemp.prepare(); -// ptx.sign(cryptoKeyPair); -// ptx.commit(); -// return txHandle.txRequest; -// } + public static TransactionRequest createTxRequest_UserReg(HashDigest ledgerHash, BlockchainKeypair userKeypair, + BlockchainKeypair gatewayKeypair) { + TxBuilder txBuilder = new TxBuilder(ledgerHash); + + txBuilder.users().register(userKeypair.getIdentity()); + + TransactionRequestBuilder txReqBuilder = txBuilder.prepareRequest(); + txReqBuilder.signAsEndpoint(userKeypair); + if (gatewayKeypair != null) { + txReqBuilder.signAsNode(gatewayKeypair); + } + return txReqBuilder.buildRequest(); + } public static TransactionStagedSnapshot generateRandomSnapshot() { TransactionStagedSnapshot txDataSnapshot = new TransactionStagedSnapshot(); diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/TransactionBatchProcessorTest.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/TransactionBatchProcessorTest.java index 7b28c41e..e18ca2a0 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/TransactionBatchProcessorTest.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/TransactionBatchProcessorTest.java @@ -1,392 +1,140 @@ -//package test.com.jd.blockchain.ledger; -// -//import static org.junit.Assert.assertArrayEquals; -//import static org.junit.Assert.assertEquals; -//import static org.junit.Assert.assertNotNull; -//import static org.junit.Assert.assertTrue; -// -//import java.io.File; -//import java.io.FileInputStream; -//import java.io.IOException; -//import java.io.InputStream; -//import java.net.URISyntaxException; -//import java.net.URL; -//import java.nio.file.Paths; -// -//import org.junit.Before; -//import org.junit.Test; -// -//import com.jd.blockchain.binaryproto.DataContractRegistry; -//import com.jd.blockchain.contract.model.ContractPath; -//import com.jd.blockchain.crypto.CryptoAlgorithm; -//import com.jd.blockchain.crypto.CryptoUtils; -//import com.jd.blockchain.crypto.asymmetric.CryptoKeyPair; -//import com.jd.blockchain.crypto.asymmetric.PubKey; -//import com.jd.blockchain.crypto.hash.HashDigest; -//import com.jd.blockchain.ledger.BlockchainKeyGenerator; -//import com.jd.blockchain.ledger.BlockchainKeyPair; -//import com.jd.blockchain.ledger.ContractCodeDeployOperation; -//import com.jd.blockchain.ledger.ContractEventSendOperation; -//import com.jd.blockchain.ledger.DataAccountKVSetOperation; -//import com.jd.blockchain.ledger.DataAccountRegisterOperation; -//import com.jd.blockchain.ledger.EndpointRequest; -//import com.jd.blockchain.ledger.LedgerBlock; -//import com.jd.blockchain.ledger.LedgerInitSetting; -//import com.jd.blockchain.ledger.LedgerTransaction; -//import com.jd.blockchain.ledger.NodeRequest; -//import com.jd.blockchain.ledger.TransactionBuilder; -//import com.jd.blockchain.ledger.TransactionContent; -//import com.jd.blockchain.ledger.TransactionContentBody; -//import com.jd.blockchain.ledger.TransactionRequest; -//import com.jd.blockchain.ledger.TransactionRequestBuilder; -//import com.jd.blockchain.ledger.TransactionResponse; -//import com.jd.blockchain.ledger.TransactionState; -//import com.jd.blockchain.ledger.UserRegisterOperation; -//import com.jd.blockchain.ledger.core.CryptoConfig; -//import com.jd.blockchain.ledger.core.DataAccountSet; -//import com.jd.blockchain.ledger.core.LedgerDataSet; -//import com.jd.blockchain.ledger.core.LedgerEditor; -//import com.jd.blockchain.ledger.core.LedgerRepository; -//import com.jd.blockchain.ledger.core.LedgerTransactionContext; -//import com.jd.blockchain.ledger.core.TransactionSet; -//import com.jd.blockchain.ledger.core.UserAccount; -//import com.jd.blockchain.ledger.core.impl.DefaultOperationHandleRegisteration; -//import com.jd.blockchain.ledger.core.impl.LedgerManager; -//import com.jd.blockchain.ledger.core.impl.OperationHandleRegisteration; -//import com.jd.blockchain.ledger.core.impl.TransactionBatchProcessor; -//import com.jd.blockchain.ledger.data.AddressEncoding; -//import com.jd.blockchain.ledger.data.ConsensusParticipantData; -//import com.jd.blockchain.ledger.data.LedgerInitSettingData; -//import com.jd.blockchain.ledger.data.TxBuilder; -//import com.jd.blockchain.storage.service.utils.MemoryKVStorage; -// -//import my.utils.Bytes; -//import my.utils.io.BytesUtils; -//import my.utils.net.NetworkAddress; -// -//public class TransactionBatchProcessorTest { -// private HashDigest ledgerHash = null; -// BlockchainKeyPair userKey = BlockchainKeyGenerator.getInstance().generate(); -// BlockchainKeyPair dataKey = BlockchainKeyGenerator.getInstance().generate(); -// BlockchainKeyPair sponsorKey = BlockchainKeyGenerator.getInstance().generate(); -// BlockchainKeyPair gatewayKey = BlockchainKeyGenerator.getInstance().generate(); -// BlockchainKeyPair contractKey = BlockchainKeyGenerator.getInstance().generate(); -// TransactionRequest transactionRequest; -// String pubKeyVal = "jd.com"+Thread.currentThread(); -//// String userPubKeyVal = "this is user's pubKey"; -// byte[] chainCode; -// // 保存资产总数的键; -// private static final String KEY_TOTAL = "TOTAL"; -// //第二个参数; -// private static final String KEY_ABC = "abc"; -// // 采用基于内存的 Storage; -// MemoryKVStorage storage = new MemoryKVStorage(); -// -// @Before -// public void setUp(){ -// DataContractRegistry.register(TransactionContent.class); -// DataContractRegistry.register(TransactionContentBody.class); -// DataContractRegistry.register(TransactionRequest.class); -// DataContractRegistry.register(NodeRequest.class); -// DataContractRegistry.register(EndpointRequest.class); -// DataContractRegistry.register(TransactionResponse.class); -// DataContractRegistry.register(UserRegisterOperation.class); -// } -// -//// @After -// public void after() { -// //清理所有使用的临时文件; -// String outputPath = null; -// try { -// outputPath = ContractPath.getOutputPath(); -// }finally { -// deleteDir(new File(outputPath)); -// } -// } -// -// /** -// * 递归删除目录下的所有文件及子目录下所有文件 -// * @param dir 将要删除的文件目录 -// * @return boolean Returns "true" if all deletions were successful. -// * If a deletion fails, the method stops attempting to -// * delete and returns "false". -// */ -// private static boolean deleteDir(File dir) { -// if (dir.isDirectory()) { -// String[] children = dir.list(); -// //递归删除目录中的子目录下 -// for (int i=0; i, ContractType> contractTypes = new ConcurrentHashMap<>(); diff --git a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationBase.java b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationBase.java index 5c6339a2..aaa67038 100644 --- a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationBase.java +++ b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationBase.java @@ -477,40 +477,40 @@ public class IntegrationBase { assertArrayEquals(contractCode, contractCodeInDb); // execute the contract; - testContractExe(adminKey, ledgerHash, keyPairResponse.keyPair, blockchainService, ledgerRepository); +// testContractExe(adminKey, ledgerHash, keyPairResponse.keyPair, blockchainService, ledgerRepository); // testContractExe1(adminKey, ledgerHash, keyPairResponse.keyPair, blockchainService, ledgerRepository); return block; } - private static void testContractExe(AsymmetricKeypair adminKey, HashDigest ledgerHash, BlockchainKeypair dataKey, - BlockchainService blockchainService, LedgerRepository ledgerRepository) { - LedgerInfo ledgerInfo = blockchainService.getLedger(ledgerHash); - LedgerBlock previousBlock = blockchainService.getBlock(ledgerHash, ledgerInfo.getLatestBlockHeight() - 1); - - // 定义交易; - TransactionTemplate txTpl = blockchainService.newTransaction(ledgerHash); - - Byte byteObj = Byte.parseByte("123"); +// private static void testContractExe(AsymmetricKeypair adminKey, HashDigest ledgerHash, BlockchainKeypair dataKey, +// BlockchainService blockchainService, LedgerRepository ledgerRepository) { +// LedgerInfo ledgerInfo = blockchainService.getLedger(ledgerHash); +// LedgerBlock previousBlock = blockchainService.getBlock(ledgerHash, ledgerInfo.getLatestBlockHeight() - 1); +// +// // 定义交易; +// TransactionTemplate txTpl = blockchainService.newTransaction(ledgerHash); +// +// Byte byteObj = Byte.parseByte("123"); +//// txTpl.contract(contractDeployKey.getAddress(),AssetContract2.class).issue(byteObj, +//// contractDeployKey.getAddress().toBase58(),321123); // txTpl.contract(contractDeployKey.getAddress(),AssetContract2.class).issue(byteObj, -// contractDeployKey.getAddress().toBase58(),321123); - txTpl.contract(contractDeployKey.getAddress(),AssetContract2.class).issue(byteObj, - dataKey.getAddress().toBase58(),Bytes.fromString("123321")); - - // 签名; - PreparedTransaction ptx = txTpl.prepare(); - ptx.sign(adminKey); - - // 提交并等待共识返回; - TransactionResponse txResp = ptx.commit(); - - // 验证结果; - Assert.assertTrue(txResp.isSuccess()); - assertEquals(ptx.getHash(),txResp.getContentHash()); - LedgerBlock block = ledgerRepository.getBlock(txResp.getBlockHeight()); - KVDataEntry[] kvDataEntries = ledgerRepository.getDataAccountSet(block).getDataAccount(dataKey.getAddress()).getDataEntries(0,1); - assertEquals("100",kvDataEntries[0].getValue().toString()); - } +// dataKey.getAddress().toBase58(),Bytes.fromString("123321")); +// +// // 签名; +// PreparedTransaction ptx = txTpl.prepare(); +// ptx.sign(adminKey); +// +// // 提交并等待共识返回; +// TransactionResponse txResp = ptx.commit(); +// +// // 验证结果; +// Assert.assertTrue(txResp.isSuccess()); +// assertEquals(ptx.getHash(),txResp.getContentHash()); +// LedgerBlock block = ledgerRepository.getBlock(txResp.getBlockHeight()); +// KVDataEntry[] kvDataEntries = ledgerRepository.getDataAccountSet(block).getDataAccount(dataKey.getAddress()).getDataEntries(0,1); +// assertEquals("100",kvDataEntries[0].getValue().toString()); +// } // private static void testContractExe1(AsymmetricKeypair adminKey, HashDigest ledgerHash, BlockchainKeypair dataKey, // BlockchainService blockchainService,LedgerRepository ledgerRepository) { diff --git a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/contract/AssetContract2.java b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/contract/AssetContract2.java deleted file mode 100644 index 9586630a..00000000 --- a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/contract/AssetContract2.java +++ /dev/null @@ -1,41 +0,0 @@ -package test.com.jd.blockchain.intgr.contract; - -import com.jd.blockchain.contract.Contract; -import com.jd.blockchain.contract.ContractEvent; -import com.jd.blockchain.utils.Bytes; - -/** - * 示例:一个“资产管理”智能合约; - * - * @author zhaogw - */ -@Contract -public interface AssetContract2 { - -// /** -// * 发行资产; -// * 新发行的资产数量; -// * @param assetHolderAddress -// * 新发行的资产的持有账户; -// */ -// @ContractEvent(name = "issue-asset-0") -// void issue(ContractBizContent contractBizContent, String assetHolderAddress); -// -// /** -// * 发行资产; -// * 新发行的资产数量; -// * @param assetHolderAddress -// * 新发行的资产的持有账户; -// */ -// @ContractEvent(name = "issue-asset") -// void issue(ContractBizContent contractBizContent, String assetHolderAddress, long cashNumber); - - @ContractEvent(name = "issue-asset-2") - void issue(Bytes bytes, String assetHolderAddress, long cashNumber); - - @ContractEvent(name = "issue-asset-3") - void issue(Byte byteObj, String assetHolderAddress, long cashNumber); - - @ContractEvent(name = "issue-asset-4") - void issue(Byte byteObj, String assetHolderAddress, Bytes cashNumber); -} \ No newline at end of file diff --git a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/contract/AssetContractImpl.java b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/contract/AssetContractImpl.java new file mode 100644 index 00000000..9c1ec6e1 --- /dev/null +++ b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/contract/AssetContractImpl.java @@ -0,0 +1,5 @@ +package test.com.jd.blockchain.intgr.contract; + +public class AssetContractImpl { + +} diff --git a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/contract/ContractInvocationTest.java b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/contract/ContractInvocationTest.java new file mode 100644 index 00000000..46698426 --- /dev/null +++ b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/contract/ContractInvocationTest.java @@ -0,0 +1,14 @@ +package test.com.jd.blockchain.intgr.contract; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class ContractInvocationTest { + + @Test + public void test() { + + } + +} diff --git a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/ledger/LedgerBlockGeneratingTest.java b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/ledger/LedgerBlockGeneratingTest.java index a97a26c4..77bdef66 100644 --- a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/ledger/LedgerBlockGeneratingTest.java +++ b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/ledger/LedgerBlockGeneratingTest.java @@ -58,8 +58,6 @@ public class LedgerBlockGeneratingTest { DefaultOperationHandleRegisteration opHandler = new DefaultOperationHandleRegisteration(); - System.gc(); - test(ledgerHash, node.getPartiKey(), ledgerManager, opHandler, 1000, 5); } diff --git a/source/utils/utils-common/src/main/java/com/jd/blockchain/utils/io/FileUtils.java b/source/utils/utils-common/src/main/java/com/jd/blockchain/utils/io/FileUtils.java index 77cfca01..0d4d86e1 100644 --- a/source/utils/utils-common/src/main/java/com/jd/blockchain/utils/io/FileUtils.java +++ b/source/utils/utils-common/src/main/java/com/jd/blockchain/utils/io/FileUtils.java @@ -442,37 +442,44 @@ public class FileUtils { } public static void deleteFile(File file) { - deleteFile(file, false); + deletePath(file, false); } public static void deleteFile(String dir, boolean silent) { File directory = new File(dir); - deleteFile(directory, silent); + deletePath(directory, silent); } /** - * 删除文件; + * 删除文件;
* - * @param file - * @param silent 是否静默删除;如果为 true ,则吞噬删除过程中的异常,意味着方法即便正常返回时也有可能删除不完全; + * @param path 如果指定的路径是单个文件,则删除该文件;如果指定路径是目录,则删除该目录及其下的全部文件; + * @param silent 是否静默删除;如果为 true ,则吞噬删除过程中的异常, 意味着方法即便正常返回时也有可能删除不完全; + * @return 如果删除成功,则返回 true; 否则返回 false,或者抛出 {@link RuntimeIOException}; */ - public static void deleteFile(File file, boolean silent) { - if (file.isFile()) { + public static boolean deletePath(File path, boolean silent) { + if (path.isFile()) { try { - file.delete(); - return; + path.delete(); + return true; } catch (Exception e) { if (!silent) { throw new RuntimeIOException(e.getMessage(), e); } } + + return false; } - File[] files = file.listFiles(); + + // delete dir; + File[] files = path.listFiles(); if (files == null) { - return; + return false; } + for (File f : files) { - deleteFile(f, silent); + deletePath(f, silent); } + return path.delete(); } }