From e1b4240d5169332c4e7282c554f13e59c682a135 Mon Sep 17 00:00:00 2001 From: shaozhuguang Date: Tue, 10 Sep 2019 17:05:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=90=88=E7=BA=A6=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E6=8F=92=E4=BB=B6BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contract/maven/ContractCompileMojo.java | 186 +++++++++++++++++---- .../blockchain/contract/maven/rule/BlackList.java | 3 +- .../contract/maven/rule/DependencyExclude.java | 6 +- .../contract/maven/verify/ResolveEngine.java | 70 ++++++-- .../contract/maven/verify/VerifyEngine.java | 16 +- .../src/main/resources/blacks.conf | 12 +- .../resources/{provideds.conf => providers.conf} | 0 .../src/main/resources/whites.conf | 4 +- .../jd/blockchain/ledger/ContractInvokingTest.java | 13 +- .../test/resources/contract-JDChain-Contract.jar | Bin 0 -> 96020 bytes .../ledger/data/ContractJarUtilsTest.java | 69 -------- 11 files changed, 243 insertions(+), 136 deletions(-) rename source/contract/contract-maven-plugin/src/main/resources/{provideds.conf => providers.conf} (100%) create mode 100644 source/ledger/ledger-core/src/test/resources/contract-JDChain-Contract.jar delete mode 100644 source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/ContractJarUtilsTest.java diff --git a/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/ContractCompileMojo.java b/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/ContractCompileMojo.java index 3ddf15a0..a98eeca3 100644 --- a/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/ContractCompileMojo.java +++ b/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/ContractCompileMojo.java @@ -1,12 +1,12 @@ package com.jd.blockchain.contract.maven; -import com.jd.blockchain.contract.ContractJarUtils; import com.jd.blockchain.contract.maven.rule.BlackList; import com.jd.blockchain.contract.maven.rule.WhiteList; import com.jd.blockchain.contract.maven.rule.DependencyExclude; import com.jd.blockchain.contract.maven.verify.ResolveEngine; import com.jd.blockchain.contract.maven.verify.VerifyEngine; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; @@ -16,8 +16,14 @@ import org.apache.maven.project.MavenProject; import java.io.File; import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.Set; +import static com.jd.blockchain.contract.ContractJarUtils.BLACK_CONF; +import static com.jd.blockchain.contract.ContractJarUtils.WHITE_CONF; + @Mojo(name = "compile") public class ContractCompileMojo extends SingleAssemblyMojo { @@ -42,46 +48,122 @@ public class ContractCompileMojo extends SingleAssemblyMojo { // 首先对MainClass进行校验,要求必须有MainClass String mainClass = mainClassVerify(); - // 将JDChain本身代码之外的代码移除(不打包进整个Jar) + // 排除所有依赖,只打包当前代码 +// excludeAllArtifactExclude(super.getProject().getDependencyArtifacts()); +// handleArtifactCompile(super.getProject().getDependencyArtifacts()); handleArtifactExclude(super.getProject().getDependencyArtifacts()); // 此参数用于设置将所有第三方依赖的Jar包打散为.class,与主代码打包在一起,生成一个jar包 super.setDescriptorRefs(new String[]{JAR_DEPENDENCE}); // 执行打包命令 + // 该命令生成的是只含有当前项目的实际代码的Jar包,该Jar包仅用于校验MainClass super.execute(); - // 将本次打包好的文件重新命名,以便于后续重新打包需要 - // 把文件改名,然后重新再生成一个文件 - File dstFile; + // 生成解析引擎 + ResolveEngine resolveEngine = new ResolveEngine(getLog(), mainClass); + + // 获取本次生成的Jar文件 + File defaultJarFile; try { - dstFile = rename(getProject(), getFinalName()); - } catch (IOException e) { + defaultJarFile = rename(getProject(), getFinalName()); + // 校验当前MainClass是否满足需求 + resolveEngine.verifyCurrentProjectMainClass(defaultJarFile); + // 校验完成后将该Jar删除 +// FileUtils.forceDelete(mainClassFile); + } catch (Exception e) { getLog().error(e); throw new MojoFailureException(e.getMessage()); } - // 首先校验该类的Jar包中是否包含不符合规范的命名,以及该类的代码中的部分解析 - File finalJarFile = verify(dstFile, mainClass); - - // 将所有的依赖的jar包全部打包进一个包中,以便于进行ASM检查 - handleArtifactCompile(super.getProject().getDependencyArtifacts()); - - // 然后再打包一次,本次打包完成后,其中的代码包含所有的class(JDK自身的除外) - super.execute(); - - // 对代码中的一些规则进行校验,主要是校验其是否包含一些不允许使用的类、包、方法等 - verify(mainClass); - - // 删除中间的一些文件 +// // 将JDChain本身之外的代码打包进Jar包,然后编译 +// handleArtifactExclude(super.getProject().getDependencyArtifacts()); +// +// // 此参数用于设置将所有第三方依赖的Jar包打散为.class,与主代码打包在一起,生成一个jar包 +// super.setDescriptorRefs(new String[]{JAR_DEPENDENCE}); +// +// // 生成Jar包(该Jar包中不包含JDChain内部的代码) +// super.execute(); +// +// File defaultJarFile; +// try { +// defaultJarFile = rename(getProject(), getFinalName()); +// } catch (Exception e) { +// getLog().error(e); +// throw new MojoFailureException(e.getMessage()); +// } + + // 校验该Jar包 + verify(defaultJarFile, mainClass); + + File deployJarFile = resolveEngine.verify(defaultJarFile); + + // 删除中间产生的临时文件 try { - FileUtils.forceDelete(dstFile); - } catch (IOException e) { - throw new MojoFailureException(e.getMessage()); + FileUtils.forceDelete(defaultJarFile); + } catch (Exception e) { + getLog().error(e); } + getLog().info(String.format("JDChain's Contract compile success, path = %s !", deployJarFile.getPath())); + + + +// // 将JDChain本身代码之外的代码移除(不打包进整个Jar) +// handleArtifactExclude(super.getProject().getDependencyArtifacts()); +// +// // 此参数用于设置将所有第三方依赖的Jar包打散为.class,与主代码打包在一起,生成一个jar包 +// super.setDescriptorRefs(new String[]{JAR_DEPENDENCE}); +// +// // 执行打包命令 +// super.execute(); + +// // 将本次打包好的文件重新命名,以便于后续重新打包需要 +// // 把文件改名,然后重新再生成一个文件 +// File dstFile; +// try { +// dstFile = rename(getProject(), getFinalName()); +// } catch (IOException e) { +// getLog().error(e); +// throw new MojoFailureException(e.getMessage()); +// } +// +// // dstFile理论上应该含有 +// +// // 首先校验该类的Jar包中是否包含不符合规范的命名,以及该类的代码中的部分解析 +// +// ResolveEngine resolveEngine = new ResolveEngine(getLog(), mainClass); +// +// // 校验mainClass +// resolveEngine.verifyCurrentProjectMainClass(dstFile); +// +// +// +// File finalJarFile = resolveEngine.verify(); +// +// // 将所有的依赖的jar包全部打包进一个包中,以便于进行ASM检查 +// handleArtifactCompile(super.getProject().getDependencyArtifacts()); +// +// // 然后再打包一次,本次打包完成后,其中的代码包含所有的class(JDK自身的除外) +// super.execute(); +// +// File jarFile = new File(jarPath(getProject(), getFinalName())); +// +// // 校验mainClass +// resolveEngine.verifyCurrentProjectMainClass(jarFile); +// +// // 对代码中的一些规则进行校验,主要是校验其是否包含一些不允许使用的类、包、方法等 +// verify(jarFile, mainClass); +// +// // 删除中间的一些文件 +//// try { +//// FileUtils.forceDelete(dstFile); +//// } catch (IOException e) { +//// throw new MojoFailureException(e.getMessage()); +//// } +// // 若执行到此处没有异常则表明打包成功,打印打包成功消息 - getLog().info(String.format("JDChain's Contract compile success, path = %s !", finalJarFile.getPath())); +// getLog().info(String.format("JDChain's Contract compile success, path = %s !", finalJarFile.getPath())); } private String mainClassVerify() throws MojoFailureException { @@ -107,10 +189,20 @@ public class ContractCompileMojo extends SingleAssemblyMojo { getLog().info(String.format("GroupId[%s] ArtifactId[%s] belongs to DependencyExclude !!!", groupId, artifactId)); // 属于排除的名单之中 artifact.setScope(SCOPE_PROVIDED); + } else { + getLog().info(String.format("GroupId[%s] ArtifactId[%s] not belongs to DependencyExclude !!!", groupId, artifactId)); + // 属于排除的名单之中 + artifact.setScope(SCOPE_COMPILE); } } } + private void excludeAllArtifactExclude(Set artifacts) { + for (Artifact artifact : artifacts) { + artifact.setScope(SCOPE_PROVIDED); + } + } + private void handleArtifactCompile(Set artifacts) { for (Artifact artifact : artifacts) { if (artifact.getScope().equals(SCOPE_PROVIDED)) { @@ -135,17 +227,14 @@ public class ContractCompileMojo extends SingleAssemblyMojo { File.separator + finalName + "-" + JAR_DEPENDENCE + ".jar"; } - private void verify(String mainClass) throws MojoFailureException { + private void verify(File jarFile, String mainClass) throws MojoFailureException { try { - - File jarFile = new File(jarPath(getProject(), getFinalName())); - VerifyEngine verifyEngine = new VerifyEngine(getLog(), jarFile, mainClass, black, white); verifyEngine.verify(); // 校验完成后将该jar包删除 - FileUtils.forceDelete(jarFile); +// FileUtils.forceDelete(jarFile); } catch (Exception e) { getLog().error(e); @@ -153,20 +242,47 @@ public class ContractCompileMojo extends SingleAssemblyMojo { } } - private File verify(File jarFile, String mainClass) throws MojoFailureException { - ResolveEngine resolveEngine = new ResolveEngine(getLog(), jarFile, mainClass); - return resolveEngine.verify(); + private static void init() { + try { + black = AbstractContract.initBlack(loadBlackConf()); + white = AbstractContract.initWhite(loadWhiteConf()); + } catch (Exception e) { + throw new IllegalStateException(e); + } + } + private static List loadWhiteConf() { + + return resolveConfig(WHITE_CONF); } - private static void init() { + private static List loadBlackConf() { + return resolveConfig(BLACK_CONF); + } + + private static List resolveConfig(String fileName) { + List configs = new ArrayList<>(); + try { - black = AbstractContract.initBlack(ContractJarUtils.loadBlackConf()); - white = AbstractContract.initWhite(ContractJarUtils.loadWhiteConf()); + List readLines = loadConfig(fileName); + if (!readLines.isEmpty()) { + for (String readLine : readLines) { + String[] lines = readLine.split(","); + configs.addAll(Arrays.asList(lines)); + } + } } catch (Exception e) { throw new IllegalStateException(e); } + + return configs; + } + + public static List loadConfig(String fileName) throws Exception { + + return IOUtils.readLines( + ContractCompileMojo.class.getResourceAsStream("/" + fileName)); } } diff --git a/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/rule/BlackList.java b/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/rule/BlackList.java index 97044df6..593093aa 100644 --- a/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/rule/BlackList.java +++ b/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/rule/BlackList.java @@ -52,6 +52,7 @@ public class BlackList { } public boolean isBlack(Class clazz, String methodName) { + // 判断该Class是否属于黑名单 if (isCurrentClassBlack(clazz, methodName)) { return true; @@ -75,7 +76,7 @@ public class BlackList { String packageName = clazz.getPackage().getName(); for (String bp : blackPackages) { - if (packageName.equals(bp) || packageName.startsWith(bp)) { + if ((packageName + ".").equals(bp) || packageName.startsWith(bp)) { return true; } } diff --git a/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/rule/DependencyExclude.java b/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/rule/DependencyExclude.java index 6c3dca44..c20ce777 100644 --- a/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/rule/DependencyExclude.java +++ b/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/rule/DependencyExclude.java @@ -1,6 +1,6 @@ package com.jd.blockchain.contract.maven.rule; -import com.jd.blockchain.contract.ContractJarUtils; +import com.jd.blockchain.contract.maven.ContractCompileMojo; import java.util.ArrayList; import java.util.List; @@ -11,7 +11,7 @@ public class DependencyExclude { private static final String COMMON_ARTIFACTID = "*"; - private static final String CONFIG = "provided.conf"; + private static final String CONFIG = "providers.conf"; private static final Map> DEPENDENCYS = new ConcurrentHashMap<>(); @@ -24,7 +24,7 @@ public class DependencyExclude { } private static void init() throws Exception { - List readLines = ContractJarUtils.loadConfig(CONFIG); + List readLines = ContractCompileMojo.loadConfig(CONFIG); if (!readLines.isEmpty()) { for (String line : readLines) { // groupId/artifactId diff --git a/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/verify/ResolveEngine.java b/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/verify/ResolveEngine.java index 059f7337..97744689 100644 --- a/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/verify/ResolveEngine.java +++ b/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/verify/ResolveEngine.java @@ -1,7 +1,10 @@ package com.jd.blockchain.contract.maven.verify; +import com.alibaba.fastjson.JSON; +import com.jd.blockchain.contract.Contract; import com.jd.blockchain.contract.ContractJarUtils; import com.jd.blockchain.contract.ContractType; +import com.jd.blockchain.contract.EventProcessingAware; import org.apache.commons.io.FileUtils; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugin.logging.Log; @@ -21,23 +24,49 @@ public class ResolveEngine { private Log LOGGER; - private File jarFile; +// private File jarFile; private String mainClass; - public ResolveEngine(Log LOGGER, File jarFile, String mainClass) { +// public ResolveEngine(Log LOGGER, File jarFile, String mainClass) { + public ResolveEngine(Log LOGGER, String mainClass) { this.LOGGER = LOGGER; - this.jarFile = jarFile; +// this.jarFile = jarFile; this.mainClass = mainClass; } - public File verify() throws MojoFailureException { + /** + * 校验当前项目中MainClass其是否满足JDChain合约写法 + * + * @param mainClassJarFile + * @throws MojoFailureException + */ + public void verifyCurrentProjectMainClass(File mainClassJarFile) throws MojoFailureException { + // 校验MainClass try { - // 首先校验MainClass - ClassLoader classLoader = verifyMainClass(jarFile); + LOGGER.debug(String.format("Verify Jar [%s] 's MainClass start...", mainClassJarFile.getName())); + // 自定义ClassLoader,必须使用Thread.currentThread().getContextClassLoader() + // 保证其项目内部加载的Jar包无须再加载一次 + URLClassLoader classLoader = new URLClassLoader(new URL[]{mainClassJarFile.toURI().toURL()}, + Thread.currentThread().getContextClassLoader()); + // 从MainClass作为入口进行MainClass代码校验 + Class mClass = classLoader.loadClass(mainClass); + ContractType.resolve(mClass); + + // 校验完成后需要释放,否则无法删除该Jar文件 + classLoader.close(); + + LOGGER.debug(String.format("Verify Jar [%s] 's MainClass end...", mainClassJarFile.getName())); + } catch (Exception e) { + throw new MojoFailureException(e.getMessage()); + } + } + + public File verify(File defaultJarFile) throws MojoFailureException { + try { // 检查jar包中所有的class的命名,要求其包名不能为com.jd.blockchain.* - LinkedList totalClasses = loadAllClass(jarFile); + LinkedList totalClasses = loadAllClass(defaultJarFile); if (!totalClasses.isEmpty()) { @@ -47,9 +76,8 @@ public class ResolveEngine { LOGGER.debug(String.format("Verify Dependency Class[%s] start......", dotClassName)); // 获取其包名 - Class currentClass = classLoader.loadClass(dotClassName); - - String packageName = currentClass.getPackage().getName(); + // 将class转换为包名 + String packageName = class2Package(dotClassName); if (ContractJarUtils.isJDChainPackage(packageName)) { throw new IllegalStateException(String.format("Class[%s]'s package[%s] cannot start with %s !", @@ -61,18 +89,23 @@ public class ResolveEngine { } // 处理完成之后,生成finalName-JDChain-Contract.jar - return compileCustomJar(); + return compileCustomJar(defaultJarFile); } catch (Exception e) { LOGGER.error(e.getMessage()); throw new MojoFailureException(e.getMessage()); } } - private File compileCustomJar() throws IOException { + private String class2Package(String dotClassName) { + + return dotClassName.substring(0, dotClassName.lastIndexOf(".")); + } + + private File compileCustomJar(File defaultJarFile) throws IOException { - String fileParentPath = jarFile.getParentFile().getPath(); + String fileParentPath = defaultJarFile.getParentFile().getPath(); - String jarFileName = jarFile.getName(); + String jarFileName = defaultJarFile.getName(); String fileName = jarFileName.substring(0, jarFileName.lastIndexOf(".")); @@ -80,13 +113,13 @@ public class ResolveEngine { String dstJarPath = fileParentPath + File.separator + fileName + "-temp-" + System.currentTimeMillis() + ".jar"; - File srcJar = jarFile, dstJar = new File(dstJarPath); + File srcJar = defaultJarFile, dstJar = new File(dstJarPath); - LOGGER.debug(String.format("Jar from [%s] to [%s] Copying", jarFile.getPath(), dstJarPath)); + LOGGER.debug(String.format("Jar from [%s] to [%s] Copying", defaultJarFile.getPath(), dstJarPath)); // 首先进行Copy处理 copy(srcJar, dstJar); - LOGGER.debug(String.format("Jar from [%s] to [%s] Copied", jarFile.getPath(), dstJarPath)); + LOGGER.debug(String.format("Jar from [%s] to [%s] Copied", defaultJarFile.getPath(), dstJarPath)); byte[] txtBytes = contractMF(FileUtils.readFileToByteArray(dstJar)).getBytes(StandardCharsets.UTF_8); @@ -128,6 +161,9 @@ public class ResolveEngine { } } } + // Jar文件使用完成后需要关闭,否则可能会产生无法删除的问题 + jarFile.close(); + return allClass; } } diff --git a/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/verify/VerifyEngine.java b/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/verify/VerifyEngine.java index ea3d723c..7fd59c7e 100644 --- a/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/verify/VerifyEngine.java +++ b/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/contract/maven/verify/VerifyEngine.java @@ -52,7 +52,8 @@ public class VerifyEngine { // 加载所有的jar,然后ASM获取MAP URL jarURL = jarFile.toURI().toURL(); - URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{jarURL}); + URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{jarURL}, + Thread.currentThread().getContextClassLoader()); // 解析Jar包中所有的Class Map allContractClasses = resolveClasses(jarClasses()); @@ -60,6 +61,8 @@ public class VerifyEngine { // 开始处理MainClass verify(urlClassLoader, allContractClasses); + // 校验完成后需要释放ClassLoader,否则无法删除该Jar包 + urlClassLoader.close(); } public void verify(URLClassLoader urlClassLoader, Map allContractClasses) throws Exception { @@ -91,6 +94,8 @@ public class VerifyEngine { // 将该方法设置为已处理 haveManagedMethods.add(managedKey); String dotClassName = method.getDotClassName(); + + Class dotClass = urlClassLoader.loadClass(dotClassName); if (dotClass == null) { @@ -137,8 +142,13 @@ public class VerifyEngine { } } else { // 非URLClassLoader加载的类,只需要做判断即可 + // 对于系统加载的类,其白名单优先级高于黑名单 // 1、不再需要获取其方法; - // 2、只需要判断黑名单不需要判断白名单 + // 首先判断是否为白名单 + if (white.isWhite(dotClass)) { + return; + } + // 然后判断其是否为黑名单 if (black.isBlack(dotClass, method.getMethodName())) { throw new IllegalStateException(String.format("Class [%s] Method [%s] is Black !!!", dotClassName, method.getMethodName())); } @@ -187,8 +197,6 @@ public class VerifyEngine { continue; } - LOGGER.info(String.format("Resolve Class [%s] ...", className)); - ContractClass contractClass = new ContractClass(className); ClassReader cr = new ClassReader(classContent); cr.accept(new ASMClassVisitor(contractClass), ClassReader.SKIP_DEBUG); diff --git a/source/contract/contract-maven-plugin/src/main/resources/blacks.conf b/source/contract/contract-maven-plugin/src/main/resources/blacks.conf index 533c4850..caa20370 100644 --- a/source/contract/contract-maven-plugin/src/main/resources/blacks.conf +++ b/source/contract/contract-maven-plugin/src/main/resources/blacks.conf @@ -1,5 +1,13 @@ -java.io.* -java.nio.* +java.io.File +java.io.InputStream +java.io.OutputStream +java.io.DataInput +java.io.DataOutput +java.io.Reader +java.io.Writer +java.io.Flushable +java.nio.channels.* +java.nio.file.* java.net.* java.sql.* java.lang.reflect.* diff --git a/source/contract/contract-maven-plugin/src/main/resources/provideds.conf b/source/contract/contract-maven-plugin/src/main/resources/providers.conf similarity index 100% rename from source/contract/contract-maven-plugin/src/main/resources/provideds.conf rename to source/contract/contract-maven-plugin/src/main/resources/providers.conf diff --git a/source/contract/contract-maven-plugin/src/main/resources/whites.conf b/source/contract/contract-maven-plugin/src/main/resources/whites.conf index a495db60..08e7d754 100644 --- a/source/contract/contract-maven-plugin/src/main/resources/whites.conf +++ b/source/contract/contract-maven-plugin/src/main/resources/whites.conf @@ -1 +1,3 @@ -com.jd.blockchain.* \ No newline at end of file +com.jd.blockchain.* +java.nio.charset.Charset +com.alibaba.fastjson.* \ No newline at end of file diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/ContractInvokingTest.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/ContractInvokingTest.java index 41d28ab2..86ec8c2e 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/ContractInvokingTest.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/ContractInvokingTest.java @@ -13,9 +13,13 @@ import com.jd.blockchain.service.TransactionBatchResultHandle; import com.jd.blockchain.storage.service.utils.MemoryKVStorage; import com.jd.blockchain.transaction.TxBuilder; import com.jd.blockchain.utils.Bytes; +import com.jd.blockchain.utils.io.BytesUtils; +import org.apache.commons.io.IOUtils; import org.junit.Test; import org.mockito.Mockito; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; import java.util.Random; import static org.junit.Assert.*; @@ -44,6 +48,9 @@ public class ContractInvokingTest { // 采用基于内存的 Storage; private MemoryKVStorage storage = new MemoryKVStorage(); + // 用于测试的发布合约文件 + private static final String CONTRACT_JAR = "contract-JDChain-Contract.jar"; + @Test public void test() { // 初始化账本到指定的存储库; @@ -82,7 +89,6 @@ public class ContractInvokingTest { // 构建基于接口调用合约的交易请求,用于测试合约调用; TxBuilder txBuilder = new TxBuilder(ledgerHash); TestContract contractProxy = txBuilder.contract(contractAddress, TestContract.class); - TestContract contractProxy1 = txBuilder.contract(contractAddress, TestContract.class); String asset = "AK"; long issueAmount = new Random().nextLong(); @@ -190,8 +196,7 @@ public class ContractInvokingTest { } private byte[] chainCode() { - byte[] chainCode = new byte[1024]; - new Random().nextBytes(chainCode); - return chainCode; + + return BytesUtils.copyToBytes(this.getClass().getResourceAsStream("/" + CONTRACT_JAR)); } } diff --git a/source/ledger/ledger-core/src/test/resources/contract-JDChain-Contract.jar b/source/ledger/ledger-core/src/test/resources/contract-JDChain-Contract.jar new file mode 100644 index 0000000000000000000000000000000000000000..fd926b150f9c82047415778431d230260b00cc98 GIT binary patch literal 96020 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 zFLZKYZgXa3axY_VZgg^CV{|WKVRL0KP)h*<3IGZK00;m8oQWe(000000000000000 zFaQ7m0000000000005WN003ieZ7*tMYH}}Qa%E&`bT4#rVQzC~WpXcLZ*FvQVPkYJ zVqtS-FLGsbaBpsNWiL=m0Rj{N6aWAS2mqXkBTuii?E*Oj008t0002Y)0000000000 z00000<>1ia$#>1ia$#MU|V`*+@P;zf%bz^i%Zf0*TV{Bn_b5KhG0u%rg000OG z0Gx>>1i za$#vkkVQwyCY+-YAP)h*<6aW+e z00;;GoQWe(ja!h?C zY;;9#b!{$VY+-YAP)h*<6aW+e00;;GoQWe(TJy~}E(HJpKMMc=O8@`>0000000000 z001ub003ieZ7*tMYH}}Qa%E&`bT4#rVQzC~WpXcLZ*FvQVPkYJVqtS-FJ*3ZZF4V4 zZggdGWpi|MLt$)Vb!=gDX>V>tZgp)gV{Bn_b5KhG0u%rg000OG0Gx>>1ia$#>1ia$#MU|V`*+@ zRB~ZtWl3&kZ%bu)b3<=#b97;DbS`6TVRLg(O928D02BZK2nYb2i6c)31Q6(Z0001j z0000*0000000000000000C)lc08K?yK`lv6MlWq)c4claV{dIPYGf{IaxY_YWn^h| zE_8BXZgXa3axPOWpZ?BWphwV0Rj{N6aWAS2mqi> zBu|NfS+S-b006T{0021v000000000000000Rs#V5V{dIQYGi71FJp3LWNCCSbaG*C zb7p07FJo_RbaG*1bT3qLVPs`PZ*FvQVPkYjZE$QZV{Bn_b5KhG0u%rg000OG0H94I zPY6<>1ia$#< zPXGV_000000000004x9i00000000000001SBmn?pZ*4DXWNLCRV{&C=X>>1ia$#?F>Z)A02bV+VzZ!TkO zVRLg(O928D02BZK2nYb2i6c+qTA4Z;1pokT3jhE}00000000000000005duP0Ap`$ zFKT3JaxY_YWn^h|FLZKYZgXa3axY_VZgg^CV{|WKVRL0KWo~tCb1y@3Wn^h|P;zf% zbz^i?d2nS#Zgp)gV{Bn_b5KhG0u%rg000OG0Gx>>1ia$#WmI`^WkqgvZ7ySMVRLg(O9283 z015yA2mk<`i6c({00000000000000P0000000000000000Q*V-08K?yK`lv6MlWq) zc4claV{dIPYGf{IaxYLz0Rj{N6aWAS2mqZ;Bv0}|1T+T;002`I001xm0000000000 z00000GD`sfV{dIQYGf~CXklq?FJo_RbaG*1bT3qLVQzC~WpYDrZgg^CV{}PvaBMDP zY+-YAP)h*<6aW+e2nYxOp-m)DK`?ySH2?qrGXMYp6aWAK0000000000004(n0RT-! rR6#9CPDU?7Pfk=)K|@q7O-4{l1qJ{B002_}Qvd)W0090}0RR91D>U*s literal 0 KcmV+b0RR6000031 diff --git a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/ContractJarUtilsTest.java b/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/ContractJarUtilsTest.java deleted file mode 100644 index 06e2bf44..00000000 --- a/source/ledger/ledger-model/src/test/java/test/com/jd/blockchain/ledger/data/ContractJarUtilsTest.java +++ /dev/null @@ -1,69 +0,0 @@ -package test.com.jd.blockchain.ledger.data; - -import org.apache.commons.io.FileUtils; -import org.junit.Test; -import org.springframework.core.io.ClassPathResource; - -import java.io.File; -import java.nio.charset.StandardCharsets; - -import static com.jd.blockchain.contract.ContractJarUtils.*; -import static org.junit.Assert.fail; - -public class ContractJarUtilsTest { - - private String jarName = "complex"; - - @Test - public void test() { - - byte[] chainCode = null; - try { - ClassPathResource classPathResource = new ClassPathResource(jarName + ".jar"); - String classPath = classPathResource.getFile().getParentFile().getPath(); - - // 首先将Jar包转换为指定的格式 - String srcJarPath = classPath + - File.separator + jarName + ".jar"; - - String dstJarPath = classPath + - File.separator + jarName + "-temp-" + System.currentTimeMillis() + ".jar"; - - File srcJar = new File(srcJarPath), dstJar = new File(dstJarPath); - - // 首先进行Copy处理 - copy(srcJar, dstJar); - - byte[] txtBytes = contractMF(FileUtils.readFileToByteArray(dstJar)).getBytes(StandardCharsets.UTF_8); - - String finalJarPath = classPath + - File.separator + jarName + "-jdchain.jar"; - - File finalJar = new File(finalJarPath); - - copy(dstJar, finalJar, contractMFJarEntry(), txtBytes, null); - - // 删除临时文件 - FileUtils.forceDelete(dstJar); - - // 读取finalJar中的内容 - chainCode = FileUtils.readFileToByteArray(finalJar); - - FileUtils.forceDelete(finalJar); - } catch (Exception e) { - e.printStackTrace(); - } - try { - verify(chainCode); - System.out.println("Verify Success !!!"); - } catch (Exception e) { - fail("Verify Fail !!"); - } - } - - @Test - public void testSign() { - byte[] test = "zhangsan".getBytes(StandardCharsets.UTF_8); - System.out.println(contractMF(test)); - } -}