diff --git a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/BytesEncodingTest.java b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/BytesEncodingTest.java index b2211f08..32d48aba 100644 --- a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/BytesEncodingTest.java +++ b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/BytesEncodingTest.java @@ -6,6 +6,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import org.junit.Test; +import org.mockito.Mockito; import com.jd.blockchain.utils.io.BytesEncoding; import com.jd.blockchain.utils.io.NumberMask; diff --git a/source/pom.xml b/source/pom.xml index eaaad8c5..13ce9e10 100644 --- a/source/pom.xml +++ b/source/pom.xml @@ -130,7 +130,6 @@ org.mockito mockito-core ${mockito.version} - test diff --git a/source/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/perf/LedgerPerformanceTest.java b/source/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/perf/LedgerPerformanceTest.java index c227045f..07c05e08 100644 --- a/source/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/perf/LedgerPerformanceTest.java +++ b/source/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/perf/LedgerPerformanceTest.java @@ -7,19 +7,21 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.DoubleStream; -import com.jd.blockchain.crypto.*; -import com.jd.blockchain.ledger.core.CryptoConfig; -import com.jd.blockchain.ledger.core.DefaultOperationHandleRegisteration; - import org.springframework.core.io.ClassPathResource; import com.jd.blockchain.binaryproto.DataContractRegistry; import com.jd.blockchain.consensus.ConsensusProvider; import com.jd.blockchain.consensus.ConsensusProviders; import com.jd.blockchain.consensus.ConsensusSettings; +import com.jd.blockchain.crypto.AsymmetricKeypair; +import com.jd.blockchain.crypto.Crypto; +import com.jd.blockchain.crypto.CryptoAlgorithm; +import com.jd.blockchain.crypto.HashDigest; +import com.jd.blockchain.crypto.PrivKey; import com.jd.blockchain.ledger.BlockchainIdentity; import com.jd.blockchain.ledger.BlockchainKeyGenerator; import com.jd.blockchain.ledger.BlockchainKeypair; @@ -28,14 +30,21 @@ import com.jd.blockchain.ledger.DataAccountKVSetOperation; import com.jd.blockchain.ledger.DataAccountRegisterOperation; import com.jd.blockchain.ledger.LedgerBlock; import com.jd.blockchain.ledger.LedgerInitOperation; +import com.jd.blockchain.ledger.LedgerPermission; +import com.jd.blockchain.ledger.LedgerSecurityException; +import com.jd.blockchain.ledger.TransactionPermission; import com.jd.blockchain.ledger.TransactionRequest; import com.jd.blockchain.ledger.TransactionRequestBuilder; import com.jd.blockchain.ledger.TransactionResponse; import com.jd.blockchain.ledger.UserRegisterOperation; +import com.jd.blockchain.ledger.core.DefaultOperationHandleRegisteration; import com.jd.blockchain.ledger.core.LedgerDataset; import com.jd.blockchain.ledger.core.LedgerEditor; import com.jd.blockchain.ledger.core.LedgerManager; import com.jd.blockchain.ledger.core.LedgerRepository; +import com.jd.blockchain.ledger.core.LedgerSecurityManager; +import com.jd.blockchain.ledger.core.MultiIdsPolicy; +import com.jd.blockchain.ledger.core.SecurityPolicy; import com.jd.blockchain.ledger.core.TransactionBatchProcessor; import com.jd.blockchain.service.TransactionBatchResultHandle; import com.jd.blockchain.storage.service.DbConnectionFactory; @@ -51,6 +60,7 @@ import com.jd.blockchain.tools.initializer.web.LedgerInitConsensusService; import com.jd.blockchain.tools.keygen.KeyGenCommand; import com.jd.blockchain.transaction.TxBuilder; import com.jd.blockchain.utils.ArgumentSet; +import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.ConsoleUtils; import com.jd.blockchain.utils.concurrent.ThreadInvoker.AsyncCallback; import com.jd.blockchain.utils.io.FileUtils; @@ -90,6 +100,8 @@ public class LedgerPerformanceTest { DataContractRegistry.register(DataAccountKVSetOperation.class); } + public static final LedgerSecurityManager DEFAULT_SECURITY_MANAGER = new FreedomLedgerSecurityManager(); + public static void test(String[] args) { NodeContext[] nodes = null; try { @@ -281,8 +293,8 @@ public class LedgerPerformanceTest { LedgerBlock latestBlock = ledger.getLatestBlock(); LedgerDataset previousDataSet = ledger.getDataSet(latestBlock); LedgerEditor newEditor = ledger.createNextBlock(); - TransactionBatchProcessor txProc = new TransactionBatchProcessor(newEditor, previousDataSet, opHandler, - ledgerManager); + TransactionBatchProcessor txProc = new TransactionBatchProcessor(DEFAULT_SECURITY_MANAGER, newEditor, + previousDataSet, opHandler, ledgerManager); // 准备请求 int totalCount = batchSize * batchCount; @@ -319,8 +331,8 @@ public class LedgerPerformanceTest { long startTs = System.currentTimeMillis(); LedgerEditor newEditor = ledger.createNextBlock(); - TransactionBatchProcessor txProc = new TransactionBatchProcessor(newEditor, previousDataSet, opHandler, - ledgerManager); + TransactionBatchProcessor txProc = new TransactionBatchProcessor(DEFAULT_SECURITY_MANAGER, newEditor, + previousDataSet, opHandler, ledgerManager); testTxExec(txList, i * batchSize, batchSize, txProc); @@ -496,9 +508,8 @@ public class LedgerPerformanceTest { LedgerInitProperties initSetting = loadInitSetting(); Properties props = loadConsensusSetting(config); ConsensusProvider csProvider = getConsensusProvider(provider); - ConsensusSettings csProps = csProvider.getSettingsFactory() - .getConsensusSettingsBuilder() - .createSettings(props, Utils.loadParticipantNodes()); + ConsensusSettings csProps = csProvider.getSettingsFactory().getConsensusSettingsBuilder().createSettings(props, + Utils.loadParticipantNodes()); DBSetting dbsetting0; DBSetting dbsetting1; @@ -632,4 +643,77 @@ public class LedgerPerformanceTest { } } + + private static class FreedomLedgerSecurityManager implements LedgerSecurityManager { + + public static final FreedomLedgerSecurityManager INSTANCE = new FreedomLedgerSecurityManager(); + + @Override + public SecurityPolicy createSecurityPolicy(Set endpoints, Set nodes) { + return new FreedomSecurityPolicy(endpoints, nodes); + } + + } + + private static class FreedomSecurityPolicy implements SecurityPolicy { + + private Set endpoints; + private Set nodes; + + public FreedomSecurityPolicy(Set endpoints, Set nodes) { + this.endpoints = endpoints; + this.nodes = nodes; + } + + @Override + public Set getEndpoints() { + return endpoints; + } + + @Override + public Set getNodes() { + return nodes; + } + + @Override + public boolean isEnableToEndpoints(LedgerPermission permission, MultiIdsPolicy midPolicy) { + return true; + } + + @Override + public boolean isEnableToEndpoints(TransactionPermission permission, MultiIdsPolicy midPolicy) { + return true; + } + + @Override + public boolean isEnableToNodes(LedgerPermission permission, MultiIdsPolicy midPolicy) { + return true; + } + + @Override + public boolean isEnableToNodes(TransactionPermission permission, MultiIdsPolicy midPolicy) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void checkEndpoints(LedgerPermission permission, MultiIdsPolicy midPolicy) + throws LedgerSecurityException { + } + + @Override + public void checkEndpoints(TransactionPermission permission, MultiIdsPolicy midPolicy) + throws LedgerSecurityException { + } + + @Override + public void checkNodes(LedgerPermission permission, MultiIdsPolicy midPolicy) throws LedgerSecurityException { + } + + @Override + public void checkNodes(TransactionPermission permission, MultiIdsPolicy midPolicy) + throws LedgerSecurityException { + } + + } } 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 233af7d1..c3d268fd 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 @@ -45,6 +45,7 @@ import com.jd.blockchain.utils.net.NetworkAddress; import test.com.jd.blockchain.intgr.PresetAnswerPrompter; import test.com.jd.blockchain.intgr.initializer.LedgerInitializeTest; import test.com.jd.blockchain.intgr.initializer.LedgerInitializeTest.NodeContext; +import test.com.jd.blockchain.intgr.perf.LedgerPerformanceTest; import test.com.jd.blockchain.intgr.perf.Utils; public class LedgerBlockGeneratingTest { @@ -81,7 +82,8 @@ public class LedgerBlockGeneratingTest { long startTs = System.currentTimeMillis(); LedgerEditor newEditor = ledger.createNextBlock(); - TransactionBatchProcessor txProc = new TransactionBatchProcessor(newEditor, previousDataSet, opHandler, + TransactionBatchProcessor txProc = new TransactionBatchProcessor( + LedgerPerformanceTest.DEFAULT_SECURITY_MANAGER, newEditor, previousDataSet, opHandler, ledgerManager); testTxExec(txList, i * batchSize, batchSize, txProc); @@ -129,9 +131,8 @@ public class LedgerBlockGeneratingTest { LedgerInitProperties initSetting = loadInitSetting(); Properties props = loadConsensusSetting(); ConsensusProvider csProvider = getConsensusProvider(); - ConsensusSettings csProps = csProvider.getSettingsFactory() - .getConsensusSettingsBuilder() - .createSettings(props, Utils.loadParticipantNodes()); + ConsensusSettings csProps = csProvider.getSettingsFactory().getConsensusSettingsBuilder().createSettings(props, + Utils.loadParticipantNodes()); NodeContext node0 = new NodeContext(initSetting.getConsensusParticipant(0).getInitializerAddress(), serviceRegisterMap); diff --git a/source/tools/tools-mocker/pom.xml b/source/tools/tools-mocker/pom.xml index 3b79b5b9..c78dcd31 100644 --- a/source/tools/tools-mocker/pom.xml +++ b/source/tools/tools-mocker/pom.xml @@ -39,7 +39,11 @@ crypto-classic ${project.version} - + + org.mockito + mockito-core + provided + diff --git a/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/MockerNodeContext.java b/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/MockerNodeContext.java index f48e59c0..e29cd904 100644 --- a/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/MockerNodeContext.java +++ b/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/MockerNodeContext.java @@ -1,6 +1,8 @@ package com.jd.blockchain.mocker; import static java.lang.reflect.Proxy.newProxyInstance; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.when; import java.text.SimpleDateFormat; import java.util.Date; @@ -8,6 +10,8 @@ import java.util.HashMap; import java.util.Map; import java.util.Properties; +import org.mockito.Mockito; + import com.jd.blockchain.binaryproto.DataContractRegistry; import com.jd.blockchain.consensus.ClientIdentification; import com.jd.blockchain.consensus.ClientIdentifications; @@ -443,11 +447,25 @@ public class MockerNodeContext implements BlockchainQueryService { return reqBuilder.buildRequest(); } + private static LedgerSecurityManager getSecurityManager() { + LedgerSecurityManager securityManager = Mockito.mock(LedgerSecurityManager.class); + + SecurityPolicy securityPolicy = Mockito.mock(SecurityPolicy.class); + when(securityPolicy.isEnableToEndpoints(any(LedgerPermission.class), any())).thenReturn(true); + when(securityPolicy.isEnableToEndpoints(any(TransactionPermission.class), any())).thenReturn(true); + when(securityPolicy.isEnableToNodes(any(LedgerPermission.class), any())).thenReturn(true); + when(securityPolicy.isEnableToNodes(any(TransactionPermission.class), any())).thenReturn(true); + + when(securityManager.createSecurityPolicy(any(), any())).thenReturn(securityPolicy); + + return securityManager; + } + public OperationResult[] txProcess(TransactionRequest txRequest) { LedgerEditor newEditor = ledgerRepository.createNextBlock(); LedgerBlock latestBlock = ledgerRepository.getLatestBlock(); LedgerDataset previousDataSet = ledgerRepository.getDataSet(latestBlock); - TransactionBatchProcessor txProc = new TransactionBatchProcessor(newEditor, + TransactionBatchProcessor txProc = new TransactionBatchProcessor(getSecurityManager(), newEditor, previousDataSet, opHandler, ledgerManager); TransactionResponse txResp = txProc.schedule(txRequest); TransactionBatchResultHandle handle = txProc.prepare(); diff --git a/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerContractExeHandle.java b/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerContractExeHandle.java index e4db1c39..7683c3db 100644 --- a/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerContractExeHandle.java +++ b/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerContractExeHandle.java @@ -29,11 +29,11 @@ public class MockerContractExeHandle implements OperationHandle { private HashDigest ledgerHash; @Override - public BytesValue process(Operation op, LedgerDataset dataset, TransactionRequestExtension requestContext, + public BytesValue process(Operation op, LedgerDataset dataset, TransactionRequestExtension request, LedgerDataset previousBlockDataset, OperationHandleContext opHandleContext, LedgerService ledgerService) { ContractEventSendOperation contractOP = (ContractEventSendOperation) op; - HashDigest txHash = requestContext.getRequest().getTransactionContent().getHash(); + HashDigest txHash = request.getTransactionContent().getHash(); ExecutorProxy executorProxy = executorProxyMap.get(txHash); @@ -43,7 +43,7 @@ public class MockerContractExeHandle implements OperationHandle { ContractLedgerContext ledgerContext = new ContractLedgerContext(queryService, opHandleContext); MockerContractEventContext contractEventContext = new MockerContractEventContext(ledgerHash, - contractOP.getEvent(), requestContext.getRequest(), ledgerContext); + contractOP.getEvent(), request, ledgerContext); Object instance = executorProxy.getInstance(); EventProcessingAware awire = null;