Browse Source

modify contract mocker test return data !

tags/1.0.0
shaozhuguang 5 years ago
parent
commit
967fda8e78
6 changed files with 40 additions and 49 deletions
  1. +4
    -28
      source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/MockerNodeContext.java
  2. +1
    -1
      source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/contracts/WriteContract.java
  3. +2
    -1
      source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/contracts/WriteContractImpl.java
  4. +19
    -14
      source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerContractExeHandle.java
  5. +10
    -3
      source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/proxy/ContractProxy.java
  6. +4
    -2
      source/tools/tools-mocker/src/test/java/test/com/jd/blockchain/contract/SampleTest.java

+ 4
- 28
source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/MockerNodeContext.java View File

@@ -19,32 +19,7 @@ import com.jd.blockchain.crypto.PubKey;
import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm;
import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; import com.jd.blockchain.crypto.service.classic.ClassicCryptoService;
import com.jd.blockchain.crypto.service.sm.SMCryptoService; import com.jd.blockchain.crypto.service.sm.SMCryptoService;
import com.jd.blockchain.ledger.AccountHeader;
import com.jd.blockchain.ledger.BlockchainIdentity;
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.KVDataEntry;
import com.jd.blockchain.ledger.KVInfoVO;
import com.jd.blockchain.ledger.LedgerBlock;
import com.jd.blockchain.ledger.LedgerInfo;
import com.jd.blockchain.ledger.LedgerMetadata;
import com.jd.blockchain.ledger.LedgerTransaction;
import com.jd.blockchain.ledger.NodeRequest;
import com.jd.blockchain.ledger.Operation;
import com.jd.blockchain.ledger.ParticipantNode;
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.UserInfo;
import com.jd.blockchain.ledger.UserRegisterOperation;
import com.jd.blockchain.ledger.*;
import com.jd.blockchain.ledger.core.CryptoConfig; import com.jd.blockchain.ledger.core.CryptoConfig;
import com.jd.blockchain.ledger.core.LedgerDataSet; import com.jd.blockchain.ledger.core.LedgerDataSet;
import com.jd.blockchain.ledger.core.LedgerEditor; import com.jd.blockchain.ledger.core.LedgerEditor;
@@ -427,15 +402,16 @@ public class MockerNodeContext implements BlockchainQueryService {
return reqBuilder.buildRequest(); return reqBuilder.buildRequest();
} }


public void txProcess(TransactionRequest txRequest) {
public OperationResult[] txProcess(TransactionRequest txRequest) {
LedgerEditor newEditor = ledgerRepository.createNextBlock(); LedgerEditor newEditor = ledgerRepository.createNextBlock();
LedgerBlock latestBlock = ledgerRepository.getLatestBlock(); LedgerBlock latestBlock = ledgerRepository.getLatestBlock();
LedgerDataSet previousDataSet = ledgerRepository.getDataSet(latestBlock); LedgerDataSet previousDataSet = ledgerRepository.getDataSet(latestBlock);
TransactionBatchProcessor txProc = new TransactionBatchProcessor(newEditor, previousDataSet, opHandler, TransactionBatchProcessor txProc = new TransactionBatchProcessor(newEditor, previousDataSet, opHandler,
ledgerManager); ledgerManager);
txProc.schedule(txRequest);
TransactionResponse txResp = txProc.schedule(txRequest);
TransactionBatchResultHandle handle = txProc.prepare(); TransactionBatchResultHandle handle = txProc.prepare();
handle.commit(); handle.commit();
return txResp.getOperationResults();
} }


private LedgerRepository registerLedger(HashDigest ledgerHash, DBConnectionConfig dbConnConf) { private LedgerRepository registerLedger(HashDigest ledgerHash, DBConnectionConfig dbConnConf) {


+ 1
- 1
source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/contracts/WriteContract.java View File

@@ -10,5 +10,5 @@ public interface WriteContract {
void print(String name); void print(String name);


@ContractEvent(name = "writeKv") @ContractEvent(name = "writeKv")
void writeKv(String address, String key, String value);
String writeKv(String address, String key, String value);
} }

+ 2
- 1
source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/contracts/WriteContractImpl.java View File

@@ -15,8 +15,9 @@ public class WriteContractImpl implements EventProcessingAwire, WriteContract {
} }


@Override @Override
public void writeKv(String address, String key, String value) {
public String writeKv(String address, String key, String value) {
eventContext.getLedger().dataAccount(address).setText(key, value, -1); eventContext.getLedger().dataAccount(address).setText(key, value, -1);
return String.format("address = %s, key = %s, value = %s, version = %s", address, key, value, 0);
} }


@Override @Override


+ 19
- 14
source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerContractExeHandle.java View File

@@ -1,9 +1,6 @@
package com.jd.blockchain.mocker.handler; package com.jd.blockchain.mocker.handler;


import com.jd.blockchain.contract.ContractEventContext;
import com.jd.blockchain.contract.ContractException;
import com.jd.blockchain.contract.EventProcessingAwire;
import com.jd.blockchain.contract.LedgerContext;
import com.jd.blockchain.contract.*;
import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.BlockchainIdentity; import com.jd.blockchain.ledger.BlockchainIdentity;
import com.jd.blockchain.ledger.ContractEventSendOperation; import com.jd.blockchain.ledger.ContractEventSendOperation;
@@ -38,6 +35,7 @@ public class MockerContractExeHandle implements OperationHandle {


ExecutorProxy executorProxy = executorProxyMap.get(txHash); ExecutorProxy executorProxy = executorProxyMap.get(txHash);


Object result = null;
if (executorProxy != null) { if (executorProxy != null) {
LedgerQueryService queryService = new LedgerQueryService(ledgerManager); LedgerQueryService queryService = new LedgerQueryService(ledgerManager);
ContractLedgerContext ledgerContext = new ContractLedgerContext(queryService, opHandleContext); ContractLedgerContext ledgerContext = new ContractLedgerContext(queryService, opHandleContext);
@@ -45,24 +43,31 @@ public class MockerContractExeHandle implements OperationHandle {
MockerContractEventContext contractEventContext = new MockerContractEventContext(ledgerHash, MockerContractEventContext contractEventContext = new MockerContractEventContext(ledgerHash,
contractOP.getEvent(), requestContext.getRequest(), ledgerContext); contractOP.getEvent(), requestContext.getRequest(), ledgerContext);


EventProcessingAwire eventProcessingAwire = (EventProcessingAwire) executorProxy.getInstance();
try {
//
// Before处理过程
eventProcessingAwire.beforeEvent(contractEventContext);
executorProxy.invoke();
Object instance = executorProxy.getInstance();
EventProcessingAwire awire = null;

if (instance instanceof EventProcessingAwire) {
awire = (EventProcessingAwire) instance;
awire.beforeEvent(contractEventContext);
}


// After处理过程
eventProcessingAwire.postEvent(contractEventContext, null);
try {
result = executorProxy.invoke();
if (awire != null) {
// After处理过程
awire.postEvent(contractEventContext, null);
}
} catch (Exception e) { } catch (Exception e) {
eventProcessingAwire.postEvent(contractEventContext, new ContractException(e.getMessage()));
if (awire != null) {
awire.postEvent(contractEventContext, new ContractException(e.getMessage()));
}
} finally { } finally {
removeExecutorProxy(txHash); removeExecutorProxy(txHash);
} }
} }


// No return value; // No return value;
return null;
return ContractSerializeUtils.serialize(result);
} }


@Override @Override


+ 10
- 3
source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/proxy/ContractProxy.java View File

@@ -4,6 +4,8 @@ import com.jd.blockchain.contract.Contract;
import com.jd.blockchain.contract.ContractEvent; import com.jd.blockchain.contract.ContractEvent;
import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.BlockchainIdentity; import com.jd.blockchain.ledger.BlockchainIdentity;
import com.jd.blockchain.ledger.OperationResult;
import com.jd.blockchain.ledger.OperationResultData;
import com.jd.blockchain.ledger.TransactionRequest; import com.jd.blockchain.ledger.TransactionRequest;
import com.jd.blockchain.mocker.MockerNodeContext; import com.jd.blockchain.mocker.MockerNodeContext;
import com.jd.blockchain.mocker.handler.MockerContractExeHandle; import com.jd.blockchain.mocker.handler.MockerContractExeHandle;
@@ -68,9 +70,14 @@ public class ContractProxy<T> implements InvocationHandler {
operationHandle.registerExecutorProxy(txHash, new ExecutorProxy(instance, method, args)); operationHandle.registerExecutorProxy(txHash, new ExecutorProxy(instance, method, args));


// 提交该请求至整个区块链系统 // 提交该请求至整个区块链系统
mockerNodeContext.txProcess(txRequest);
// 不处理返回值
return null;
OperationResult[] operationResults = mockerNodeContext.txProcess(txRequest);
if (operationResults == null || operationResults.length == 0) {
return null;
}
OperationResult opResult = operationResults[0];

// 处理返回值
return new OperationResultData(opResult).getResultData();
} }


private boolean isExecuteContractMethod(Method method) { private boolean isExecuteContractMethod(Method method) {


source/tools/tools-mocker/src/test/java/test/com/jd/blockchain/contract/SampleTest_.java → source/tools/tools-mocker/src/test/java/test/com/jd/blockchain/contract/SampleTest.java View File

@@ -10,7 +10,7 @@ import org.junit.Test;


import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;


public class SampleTest_ {
public class SampleTest {


MockerNodeContext mockerNodeContext = null; MockerNodeContext mockerNodeContext = null;


@@ -33,7 +33,9 @@ public class SampleTest_ {


writeContract = mockerNodeContext.deployContract(writeContract); writeContract = mockerNodeContext.deployContract(writeContract);


writeContract.writeKv(dataAccountAddress, key, value);
String result = writeContract.writeKv(dataAccountAddress, key, value);

System.out.println(result);


// 查询结果 // 查询结果
KVDataEntry[] dataEntries = mockerNodeContext.getDataEntries(ledgerHash, dataAccountAddress, key); KVDataEntry[] dataEntries = mockerNodeContext.getDataEntries(ledgerHash, dataAccountAddress, key);

Loading…
Cancel
Save