Browse Source

Fix Test case !

tags/1.0.0
shaozhuguang 6 years ago
parent
commit
87b4d5d029
15 changed files with 86 additions and 24 deletions
  1. +1
    -1
      source/contract/contract-jvm/src/main/java/com/jd/blockchain/contract/jvm/AbstractContractCode.java
  2. +13
    -7
      source/ledger/ledger-model/src/main/java/com/jd/blockchain/contract/ContractType.java
  3. +10
    -0
      source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/BytesValueEncoding.java
  4. +1
    -1
      source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/ContractEventSendOperation.java
  5. +46
    -1
      source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/BytesValueEncodingTest.java
  6. +1
    -0
      source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/ContractEventSendOpTemplateTest.java
  7. +2
    -3
      source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/ContractTypeTest.java
  8. +0
    -1
      source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/DataAccountKVSetOpTemplateTest.java
  9. +1
    -0
      source/sdk/sdk-client/src/main/java/com/jd/blockchain/sdk/client/GatewayServiceFactory.java
  10. +1
    -1
      source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDKDemo_Contract_Test_.java
  11. +2
    -1
      source/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/perf/Utils.java
  12. +4
    -4
      source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/capability/LedgerPerfCapabilityTest.java
  13. +1
    -1
      source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/proxy/ContractProxy.java
  14. +2
    -2
      source/tools/tools-mocker/src/test/java/test/com/jd/blockchain/contract/AccountMockerTest.java
  15. +1
    -1
      source/tools/tools-mocker/src/test/java/test/com/jd/blockchain/contract/MockTest.java

+ 1
- 1
source/contract/contract-jvm/src/main/java/com/jd/blockchain/contract/jvm/AbstractContractCode.java View File

@@ -69,7 +69,7 @@ public abstract class AbstractContractCode implements ContractCode {
if (handleMethod == null) {
throw new ContractException(
String.format("Contract[%s:%s] has no handle method to handle event[%s]!", address.toString(),
contractDefinition.getType().getDeclaredClass().toString(), eventContext.getEvent()));
contractDefinition.getType().getName(), eventContext.getEvent()));
}
BytesValueList bytesValues = eventContext.getArgs();


+ 13
- 7
source/ledger/ledger-model/src/main/java/com/jd/blockchain/contract/ContractType.java View File

@@ -11,19 +11,15 @@ import com.jd.blockchain.utils.IllegalDataException;
public class ContractType {

private String name;

private Map<String, Method> events = new HashMap<>();
private Map<Method, String> handleMethods = new HashMap<>();

private Class<?> declaredClass;
private Map<Method, String> handleMethods = new HashMap<>();

public String getName() {
return name;
}

public Class<?> getDeclaredClass() {
return declaredClass;
}

/**
* 返回声明的所有事件;
*
@@ -86,7 +82,8 @@ public class ContractType {
}

// 接口上必须有注解
if (!contractIntf.isAnnotationPresent(Contract.class)) {
Contract contract = contractIntf.getAnnotation(Contract.class);
if (contract == null) {
throw new IllegalDataException("It is not a Contract Type, because there is not @Contract !");
}

@@ -98,6 +95,9 @@ public class ContractType {

ContractType contractType = new ContractType();

// 设置合约显示名字为
contractType.name = contract.name();

for (Method method : classMethods) {

// if current method contains @ContractEvent,then put it in this map;
@@ -130,6 +130,12 @@ public class ContractType {
contractType.handleMethods.put(method, eventName);
}
}
// 最起码有一个ContractEvent
if (contractType.events.isEmpty()) {
throw new IllegalStateException(
String.format("Contract Interface[%s] have none method for annotation[@ContractEvent] !", contractIntf.getName()));
}

return contractType;
}



+ 10
- 0
source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/BytesValueEncoding.java View File

@@ -49,8 +49,13 @@ public class BytesValueEncoding {


public static BytesValue encodeSingle(Object value, Class<?> type) {
if (value == null) {
return null;
}
if (type == null) {
type = value.getClass();
} else if (type.equals(void.class) || type.equals(Void.class)) {
return null;
}
if (type.isInterface()) {
// 判断是否含有DataContract注解
@@ -161,6 +166,11 @@ public class BytesValueEncoding {
}

public static boolean supportType(Class<?> currParamType) {
// 支持空返回值
if (currParamType.equals(void.class) || currParamType.equals(Void.class)) {
return true;
}

if (currParamType.isInterface()) {
// 接口序列化必须实现DataContract注解
if (!currParamType.isAnnotationPresent(DataContract.class)) {


+ 1
- 1
source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/ContractEventSendOperation.java View File

@@ -36,7 +36,7 @@ public interface ContractEventSendOperation extends Operation {
*
* @return
*/
@DataField(order = 4, primitiveType = PrimitiveType.BYTES)
@DataField(order = 4, refContract = true)
BytesValueList getArgs();

}

+ 46
- 1
source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/BytesValueEncodingTest.java View File

@@ -1,6 +1,6 @@
package test.com.jd.blockchain.ledger.data;

import com.jd.blockchain.ledger.BytesValueEncoding;
import com.jd.blockchain.ledger.*;
import com.jd.blockchain.utils.Bytes;
import static org.junit.Assert.*;
import org.junit.Test;
@@ -17,8 +17,53 @@ public class BytesValueEncodingTest {
assertTrue(BytesValueEncoding.supportType(Long.class));
assertTrue(BytesValueEncoding.supportType(String.class));
assertTrue(BytesValueEncoding.supportType(Bytes.class));
assertTrue(BytesValueEncoding.supportType(Operation.class));
assertFalse(BytesValueEncoding.supportType(byte.class));
}

@Test
public void testSingle() {
long longVal = 1024L;
BytesValue longBytesVal1 = BytesValueEncoding.encodeSingle(longVal, null);
BytesValue longBytesVal2 = BytesValueEncoding.encodeSingle(longVal, long.class);
BytesValue longBytesVal3 = BytesValueEncoding.encodeSingle(longVal, Long.class);

assertEquals(longBytesVal1.getValue(), longBytesVal2.getValue());
assertEquals(longBytesVal1.getType(), longBytesVal2.getType());
assertEquals(longBytesVal2.getValue(), longBytesVal3.getValue());
assertEquals(longBytesVal2.getType(), longBytesVal3.getType());

long resolveLongVal1 = (long)BytesValueEncoding.decode(longBytesVal1);
long resolveLongVal2 = (long)BytesValueEncoding.decode(longBytesVal2);
long resolveLongVal3 = (long)BytesValueEncoding.decode(longBytesVal3);

assertEquals(resolveLongVal1, 1024L);
assertEquals(resolveLongVal2, 1024L);
assertEquals(resolveLongVal3, 1024L);
}

@Test
public void testArray() {
Object[] values = new Object[]{1024L, "zhangsan", "lisi".getBytes(), 16};
Class<?>[] classes = new Class[]{long.class, String.class, byte[].class, int.class};

BytesValueList bytesValueList = BytesValueEncoding.encodeArray(values, null);
BytesValueList bytesValueList1 = BytesValueEncoding.encodeArray(values, classes);

assertEquals(bytesValueList1.getValues().length, values.length);


BytesValue[] bytesValues = bytesValueList.getValues();
assertEquals(bytesValues.length, values.length);

assertEquals(DataType.INT64, bytesValues[0].getType());
assertEquals(DataType.TEXT, bytesValues[1].getType());
assertEquals(DataType.BYTES, bytesValues[2].getType());
assertEquals(DataType.INT32, bytesValues[3].getType());

Object[] resolveObjs = BytesValueEncoding.decode(bytesValueList, classes);

assertArrayEquals(resolveObjs, values);
}

}

+ 1
- 0
source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/ContractEventSendOpTemplateTest.java View File

@@ -37,6 +37,7 @@ public class ContractEventSendOpTemplateTest {

@Before
public void initContractEventSendOpTemplate() {
DataContractRegistry.register(BytesValueList.class);
DataContractRegistry.register(ContractEventSendOperation.class);
DataContractRegistry.register(Operation.class);
String contractAddress = "zhangsan-address", event = "zhangsan-event";


+ 2
- 3
source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/ContractTypeTest.java View File

@@ -24,7 +24,6 @@ public class ContractTypeTest {
public void normalTest() throws NoSuchMethodException, SecurityException {
ContractType contractType = ContractType.resolve(NormalContract.class);

assertEquals(NormalContract.class, contractType.getDeclaredClass());
assertEquals("NORMAL-CONTRACT", contractType.getName());

Set<String> events = contractType.getEvents();
@@ -56,14 +55,14 @@ public class ContractTypeTest {
assertNull(contractType.getEvent(toStringMethod));
assertNull(contractType.getHandleMethod("NotExist"));
//解析非合约声明接口类型时,应该引发异常 ContractException;
//解析非合约声明接口类型时,应该正常,只需要实现接口(该接口定义了具体的合约类型)即可
ContractException ex = null;
try {
ContractType.resolve(NormalContractImpl.class);
} catch (ContractException e) {
ex = e;
}
assertNotNull(ex);
assertNull(ex);
}

}

+ 0
- 1
source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/DataAccountKVSetOpTemplateTest.java View File

@@ -29,7 +29,6 @@ import com.jd.blockchain.utils.Bytes;
* @create 2018/8/30
* @since 1.0.0
*/
//todo 尚未测试通过,等张爽处理完再测试
public class DataAccountKVSetOpTemplateTest {

private DataAccountKVSetOpTemplate data;


+ 1
- 0
source/sdk/sdk-client/src/main/java/com/jd/blockchain/sdk/client/GatewayServiceFactory.java View File

@@ -55,6 +55,7 @@ public class GatewayServiceFactory implements BlockchainServiceFactory, Closeabl
DataContractRegistry.register(ActionResponse.class);
DataContractRegistry.register(ClientIdentifications.class);
DataContractRegistry.register(ClientIdentification.class);
DataContractRegistry.register(BytesValueList.class);
ByteArrayObjectUtil.init();
}


source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDKDemo_Contract_Test.java → source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDKDemo_Contract_Test_.java View File

@@ -23,7 +23,7 @@ import com.jd.blockchain.transaction.LongValueHolder;
import com.jd.blockchain.transaction.GenericValueHolder;
import com.jd.blockchain.utils.Bytes;

public class SDKDemo_Contract_Test {
public class SDKDemo_Contract_Test_ {

private BlockchainKeypair adminKey;


+ 2
- 1
source/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/perf/Utils.java View File

@@ -39,7 +39,8 @@ public class Utils {

public static final String PASSWORD = "abc";

public static final String[] PUB_KEYS = { "3snPdw7i7PapsDoW185c3kfK6p8s6SwiJAdEUzgnfeuUox12nxgzXu",
public static final String[] PUB_KEYS = {
"3snPdw7i7PapsDoW185c3kfK6p8s6SwiJAdEUzgnfeuUox12nxgzXu",
"3snPdw7i7Ph1SYLQt9uqVEqiuvNXjxCdGvEdN6otJsg5rbr7Aze7kf",
"3snPdw7i7PezptA6dNBkotPjmKEbTkY8fmusLBnfj8Cf7eFwhWDwKr",
"3snPdw7i7PerZYfRzEB61SAN9tFK4yHm9wUSRtkLSSGXHkQRbB5PkS" };


+ 4
- 4
source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/capability/LedgerPerfCapabilityTest.java View File

@@ -38,22 +38,22 @@ public class LedgerPerfCapabilityTest {

@Test
public void testKvStorage4Memory() {
LedgerPerformanceTest.test(new String[]{SILENT, CONSENSUS});
LedgerPerformanceTest.test(new String[]{SILENT});
}

@Test
public void testUserRegister4Memory() {
LedgerPerformanceTest.test(new String[]{USERTEST, SILENT, CONSENSUS});
LedgerPerformanceTest.test(new String[]{USERTEST, SILENT});
}

@Test
public void testKvStorage4Rocksdb() {
LedgerPerformanceTest.test(new String[]{ROCKSDB, SILENT, CONSENSUS});
LedgerPerformanceTest.test(new String[]{ROCKSDB, SILENT});
}

@Test
public void testUserRegister4Rocksdb() {
LedgerPerformanceTest.test(new String[]{USERTEST, ROCKSDB, SILENT, CONSENSUS});
LedgerPerformanceTest.test(new String[]{USERTEST, ROCKSDB, SILENT});
}

public void testUserRegister4Redis() {


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

@@ -78,7 +78,7 @@ public class ContractProxy<T> implements InvocationHandler {
OperationResult opResult = operationResults[0];

// 处理返回值
return BytesValueEncoding.encodeSingle(opResult.getResult(), method.getReturnType());
return BytesValueEncoding.decode(opResult.getResult(), method.getReturnType());
}

private boolean isExecuteContractMethod(Method method) {


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

@@ -7,7 +7,7 @@ import com.jd.blockchain.mocker.contracts.AccountContractImpl;
import org.junit.Before;
import org.junit.Test;

public class AccountMockerTest_ {
public class AccountMockerTest {

String accountFrom = "zhangsan";

@@ -39,7 +39,7 @@ public class AccountMockerTest_ {

accountContract.create(address, accountTo, 1000L);

accountContract.print(address, accountFrom, accountTo);
// accountContract.print(address, accountFrom, accountTo);

// 开始转账
accountContract.transfer(address, accountFrom, accountTo, 500);

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

@@ -10,7 +10,7 @@ import com.jd.blockchain.mocker.contracts.WriteContract;
import com.jd.blockchain.mocker.contracts.WriteContractImpl;
import org.junit.Test;

public class MockTest_ {
public class MockTest {

@Test
public void test() {

Loading…
Cancel
Save