From 6d2d8fafe3ea32ddd5ffab0474670258639c12a4 Mon Sep 17 00:00:00 2001 From: dongjianhui Date: Sat, 8 Jun 2019 00:25:08 +0800 Subject: [PATCH] feat(*): change arg filepath into input stream --- .../hyperchain/sdk/common/utils/Encoder.java | 59 +++++-------- .../hyperchain/sdk/common/utils/FileUtil.java | 61 +++++++++++--- .../sdk/common/utils/HttpsUtils.java | 39 ++++----- .../sdk/crypto/cert/CertKeyPair.java | 15 ++-- .../hyperchain/sdk/crypto/cert/CertUtils.java | 36 ++------ .../sdk/provider/DefaultHttpProvider.java | 9 +- .../sdk/provider/ProviderManager.java | 21 ++--- .../cn/hyperchain/sdk/provider/TCertPool.java | 23 ++--- .../sdk/transaction/Transaction.java | 7 +- src/test/java/cn/hyperchain/sdk/EVMTest.java | 10 ++- src/test/java/cn/hyperchain/sdk/HVMTest.java | 11 ++- .../cn/hyperchain/sdk/service/Common.java | 84 +++++++++++++++++++ .../sdk/service/NodeServiceTest.java | 2 +- .../cn/hyperchain/sdk/service/common.java | 47 ----------- .../sdk/transaction/TransactionTest.java | 9 +- 15 files changed, 244 insertions(+), 189 deletions(-) create mode 100644 src/test/java/cn/hyperchain/sdk/service/Common.java delete mode 100644 src/test/java/cn/hyperchain/sdk/service/common.java diff --git a/src/main/java/cn/hyperchain/sdk/common/utils/Encoder.java b/src/main/java/cn/hyperchain/sdk/common/utils/Encoder.java index d6e8fc68..fbefb883 100644 --- a/src/main/java/cn/hyperchain/sdk/common/utils/Encoder.java +++ b/src/main/java/cn/hyperchain/sdk/common/utils/Encoder.java @@ -9,7 +9,7 @@ import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.JarURLConnection; @@ -26,46 +26,18 @@ public class Encoder { /** * get deploy payload. * - * @param path contract jar path + * @param fis FileinputStream for the given jar file * @return payload */ - public static String encodeDeployJar(String path) { - JarFile jar = null; - InputStream fis = null; + public static String encodeDeployJar(InputStream fis) { BufferedInputStream bis = null; ByteArrayOutputStream baos = null; - try { - if (Utils.isAbsolutePath(path)) { - jar = new JarFile(path, true); - fis = new FileInputStream(path); - } else { - URL url = Thread.currentThread().getContextClassLoader().getResource(path); - if (url == null) { - throw new IOException("Jar: " + path + " not found."); - } + FileOutputStream os = null; + JarFile jar = null; - if (url.toString().startsWith("jar")) { - JarURLConnection connection = (JarURLConnection) url.openConnection(); - JarFile jarFile = connection.getJarFile(); - Enumeration enu = jarFile.entries(); - while (enu.hasMoreElements()) { - JarEntry jarEntry = (JarEntry) enu.nextElement(); - String name = jarEntry.getName(); - if (name.startsWith(path)) { - if (name.endsWith(".jar")) { - fis = Thread.currentThread().getContextClassLoader().getResourceAsStream(name); - } - } - } - } else { - jar = new JarFile(new File(url.toURI())); - fis = Thread.currentThread().getContextClassLoader().getResourceAsStream(path); - } - } - if (jar != null && jar.getManifest().getMainAttributes().getValue("Main-Class") == null) { - throw new IOException("the path does not point to a contract jar"); - } + String tmpPath = Thread.currentThread().getContextClassLoader().getResource("").getPath() + "tmp.jar"; + try { bis = new BufferedInputStream(fis); baos = new ByteArrayOutputStream(); int len = 0; @@ -77,8 +49,23 @@ public static String encodeDeployJar(String path) { if (buffer.length > 1024 * 64) { throw new IOException("the contract jar should not be larger than 64KB"); } + + os = new FileOutputStream(tmpPath); + os.write(buffer); + + jar = new JarFile(tmpPath, true); + + if (jar != null && jar.getManifest().getMainAttributes().getValue("Main-Class") == null) { + throw new IOException("the path does not point to a contract jar"); + } + + File file = new File(tmpPath); + if (!file.delete()) { + throw new IOException("temp file delete failed!"); + } + return ByteUtil.toHex(buffer); - } catch (IOException | URISyntaxException e ) { + } catch (IOException e ) { throw new RuntimeException(e); } finally { try { diff --git a/src/main/java/cn/hyperchain/sdk/common/utils/FileUtil.java b/src/main/java/cn/hyperchain/sdk/common/utils/FileUtil.java index 96c2f96c..ba7de4ae 100644 --- a/src/main/java/cn/hyperchain/sdk/common/utils/FileUtil.java +++ b/src/main/java/cn/hyperchain/sdk/common/utils/FileUtil.java @@ -1,30 +1,28 @@ package cn.hyperchain.sdk.common.utils; import java.io.BufferedReader; -import java.io.FileReader; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.JarURLConnection; +import java.net.URL; +import java.util.Enumeration; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; public class FileUtil { /** * read file content by lines with file path. - * @param path file path + * @param input file input stream * @return file content string - * @throws IOException may can not find file + * @throws IOException may not find file */ - public static String readFile(String path) throws IOException { + public static String readFile(InputStream input) throws IOException { BufferedReader reader = null; - if (Utils.isAbsolutePath(path)) { - reader = new BufferedReader(new FileReader(path)); - } else { - InputStream input = Utils.class.getClassLoader().getResourceAsStream(path); - if (input == null) { - throw new IOException("This file not exist! " + path); - } - reader = new BufferedReader(new InputStreamReader(input)); - } + reader = new BufferedReader(new InputStreamReader(input)); + String line = null; StringBuilder stringBuilder = new StringBuilder(); String ls = System.getProperty("line.separator"); @@ -43,4 +41,41 @@ public static String readFile(String path) throws IOException { reader.close(); } } + + /** + * get InputStream of the file for the given path. + * @param path jar path + * @return input stream for the jar path + * @throws IOException may not find file + */ + public static InputStream readFileAsStream(String path) throws IOException { + InputStream fis = null; + if (Utils.isAbsolutePath(path)) { + fis = new FileInputStream(path); + } else { + URL url = Thread.currentThread().getContextClassLoader().getResource(path); + if (url == null) { + throw new IOException("Jar: " + path + " not found."); + } + + if (url.toString().startsWith("jar")) { + JarURLConnection connection = (JarURLConnection) url.openConnection(); + JarFile jarFile = connection.getJarFile(); + Enumeration enu = jarFile.entries(); + while (enu.hasMoreElements()) { + JarEntry jarEntry = (JarEntry) enu.nextElement(); + String name = jarEntry.getName(); + if (name.startsWith(path)) { + if (name.endsWith(".jar")) { + fis = Thread.currentThread().getContextClassLoader().getResourceAsStream(name); + } + } + } + } else { + fis = Thread.currentThread().getContextClassLoader().getResourceAsStream(path); + } + } + return fis; + + } } diff --git a/src/main/java/cn/hyperchain/sdk/common/utils/HttpsUtils.java b/src/main/java/cn/hyperchain/sdk/common/utils/HttpsUtils.java index d46da131..ce21b28c 100644 --- a/src/main/java/cn/hyperchain/sdk/common/utils/HttpsUtils.java +++ b/src/main/java/cn/hyperchain/sdk/common/utils/HttpsUtils.java @@ -5,7 +5,9 @@ * @version 1.0, 2018/6/12 */ import cn.hyperchain.sdk.crypto.cert.CertUtils; +import cn.hyperchain.sdk.crypto.cert.SM2Priv; import org.apache.log4j.Logger; +import org.bouncycastle.openssl.PEMKeyPair; import sun.security.x509.X500Name; import javax.net.ssl.HostnameVerifier; @@ -55,21 +57,16 @@ public X509TrustManager getTrustManager() { /** * create ssl socket factory and trust manager. - * @param certificates tlsCa file path - * @param tlsPeerCert tls peer cert file path - * @param tlsPeerPriv tls peer cert private key file path + * @param certificates tlsCa inputStream + * @param tlsPeerCert tls peer cert inputStream + * @param tlsPeerPriv tls peer cert private key inputStream * @param password jks password, default is "" * @return {@link SSLParams} */ - public static SSLParams getSslSocketFactory(String certificates, String tlsPeerCert, String tlsPeerPriv, String password) { + public static SSLParams getSslSocketFactory(InputStream certificates, InputStream tlsPeerCert, InputStream tlsPeerPriv, String password) { SSLParams sslParams = new SSLParams(); - InputStream isCa = null; + InputStream isCa = certificates; try { - if (Utils.isAbsolutePath(certificates)) { - isCa = new FileInputStream(certificates); - } else { - isCa = HttpsUtils.class.getClassLoader().getResourceAsStream(certificates); - } TrustManager[] trustManagers = prepareTrustManager(isCa); KeyManager[] keyManagers = prepareKeyManager(tlsPeerCert, tlsPeerPriv, password); SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); @@ -137,7 +134,7 @@ private static TrustManager[] prepareTrustManager(InputStream... certificates) { } - private static KeyManager[] prepareKeyManager(String tlsPeerCert, String tlsPeerPriv, String password) { + private static KeyManager[] prepareKeyManager(InputStream tlsPeerCert, InputStream tlsPeerPriv, String password) { try { // KeyStore clientKeyStore = KeyStore.getInstance("JKS"); // clientKeyStore.load(bksFile, password.toCharArray()); @@ -201,29 +198,25 @@ public X509Certificate[] getAcceptedIssuers() { * @param certificatePem the certificate(s) PEM file * @param password to set to protect the private key */ - public static KeyStore createKeyStore(String certificatePem, String privateKeyPem, final String password) throws Exception { + public static KeyStore createKeyStore(InputStream certificatePem, InputStream privateKeyPem, final String password) throws Exception { final X509Certificate[] cert = createCertificates(certificatePem); final KeyStore keystore = KeyStore.getInstance("JKS"); keystore.load(null); // Import private key - final PrivateKey key = CertUtils.getPrivateKeyFromPEM(privateKeyPem); + PEMKeyPair pem = CertUtils.getPEM(privateKeyPem); + boolean isGM = pem.getPrivateKeyInfo().getPrivateKeyAlgorithm().getParameters().toString().equals(SM2Priv.SM2OID); + + final PrivateKey key = CertUtils.getPrivateKeyFromPEM(pem, isGM); keystore.setKeyEntry("tlsCertPriv", key, password.toCharArray(), cert); return keystore; } - private static X509Certificate[] createCertificates(String certificatePem) throws Exception { + private static X509Certificate[] createCertificates(InputStream certificatePem) throws Exception { List result = new ArrayList(); BufferedReader r = null; + r = new BufferedReader(new InputStreamReader(certificatePem)); + try { - if (Utils.isAbsolutePath(certificatePem)) { - r = new BufferedReader(new FileReader(certificatePem)); - } else { - InputStream inputStream = HttpsUtils.class.getClassLoader().getResourceAsStream(certificatePem); - if (inputStream == null) { - throw new IOException("This file not exist! " + certificatePem); - } - r = new BufferedReader(new InputStreamReader(inputStream)); - } String s = r.readLine(); if (s == null || !s.contains("BEGIN CERTIFICATE")) { r.close(); diff --git a/src/main/java/cn/hyperchain/sdk/crypto/cert/CertKeyPair.java b/src/main/java/cn/hyperchain/sdk/crypto/cert/CertKeyPair.java index c8037b56..2ed7408d 100644 --- a/src/main/java/cn/hyperchain/sdk/crypto/cert/CertKeyPair.java +++ b/src/main/java/cn/hyperchain/sdk/crypto/cert/CertKeyPair.java @@ -5,7 +5,9 @@ import cn.hyperchain.sdk.common.utils.Utils; import cn.hyperchain.sdk.crypto.sm.sm2.SM2Util; import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.bouncycastle.openssl.PEMKeyPair; +import java.io.InputStream; import java.security.PrivateKey; import java.security.Signature; @@ -17,14 +19,15 @@ public class CertKeyPair { /** * create cert key pair instance. - * @param pubFilePath cert file path - * @param privFilePath private key file path + * @param pubFile cert inputStream + * @param privFile private key inputStream * @throws Exception - */ - public CertKeyPair(String pubFilePath, String privFilePath) throws Exception { - this.isGM = CertUtils.isGMCert(privFilePath); - String pubPem = FileUtil.readFile(pubFilePath); - this.privateKey = CertUtils.getPrivateKeyFromPEM(privFilePath); + public CertKeyPair(InputStream pubFile, InputStream privFile) throws Exception { + PEMKeyPair pem = CertUtils.getPEM(privFile); + this.isGM = pem.getPrivateKeyInfo().getPrivateKeyAlgorithm().getParameters().toString().equals(SM2Priv.SM2OID); + String pubPem = FileUtil.readFile(pubFile); + this.privateKey = CertUtils.getPrivateKeyFromPEM(pem, isGM); this.publicKey = ByteUtil.toHex(pubPem.getBytes(Utils.DEFAULT_CHARSET)); } diff --git a/src/main/java/cn/hyperchain/sdk/crypto/cert/CertUtils.java b/src/main/java/cn/hyperchain/sdk/crypto/cert/CertUtils.java index 45f9461b..e70f6011 100644 --- a/src/main/java/cn/hyperchain/sdk/crypto/cert/CertUtils.java +++ b/src/main/java/cn/hyperchain/sdk/crypto/cert/CertUtils.java @@ -24,34 +24,29 @@ public class CertUtils { /** * judge is guomi cert. - * @param pemPath pem path + * @param pem pem inputStream * @return is guomi cert * @throws Exception - */ - public static boolean isGMCert(String pemPath) throws Exception { - PEMParser pemRd = openPEMResource(pemPath); + public static PEMKeyPair getPEM(InputStream pem) throws Exception { + PEMParser pemRd = openPEMResource(pem); if (pemRd == null) { throw new Exception("Open pem error"); } PEMKeyPair pemPair = (PEMKeyPair) pemRd.readObject(); - return pemPair.getPrivateKeyInfo().getPrivateKeyAlgorithm().getParameters().toString().equals(SM2Priv.SM2OID); + return pemPair; } /** * get private key. * - * @param pemPath private key file path + * @param pemPair private key inputStream * @return - * @throws Exception - */ - public static PrivateKey getPrivateKeyFromPEM(String pemPath) throws Exception { - PEMParser pemRd = openPEMResource(pemPath); - if (pemRd == null) { - throw new Exception("Open pem error"); - } - PEMKeyPair pemPair = (PEMKeyPair) pemRd.readObject(); + public static PrivateKey getPrivateKeyFromPEM(PEMKeyPair pemPair, boolean isGM) throws Exception { - if (pemPair.getPrivateKeyInfo().getPrivateKeyAlgorithm().getParameters().toString().equals(SM2Priv.SM2OID)) { + if (isGM) { DLSequence dl = (DLSequence) pemPair.getPrivateKeyInfo().parsePrivateKey(); ASN1Encodable[] dls = dl.toArray(); BigInteger priv = null; @@ -67,22 +62,7 @@ public static PrivateKey getPrivateKeyFromPEM(String pemPath) throws Exception { } } - private static PEMParser openPEMResource(String fileName) { - InputStream res = null; - try { - if (Utils.isAbsolutePath(fileName)) { - res = new FileInputStream(fileName); - } else { - res = CertUtils.class.getClassLoader().getResourceAsStream(fileName); - } - - if (res == null) { - throw new IOException("This file not exist! " + fileName); - } - } catch (IOException e) { - return null; - } - + private static PEMParser openPEMResource(InputStream res) { Reader fRd = new BufferedReader(new InputStreamReader(res)); return new PEMParser(fRd); } diff --git a/src/main/java/cn/hyperchain/sdk/provider/DefaultHttpProvider.java b/src/main/java/cn/hyperchain/sdk/provider/DefaultHttpProvider.java index 86d3937a..337ba2be 100644 --- a/src/main/java/cn/hyperchain/sdk/provider/DefaultHttpProvider.java +++ b/src/main/java/cn/hyperchain/sdk/provider/DefaultHttpProvider.java @@ -12,6 +12,7 @@ import org.apache.log4j.Logger; import java.io.IOException; +import java.io.InputStream; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -63,12 +64,12 @@ public Builder setUrl(String url) { /** * use https protocol. - * @param tlsCa tls ca file path - * @param tlsPeerCert tls peer cert file path - * @param tlsPeerPriv tls peer private key file path + * @param tlsCa tls ca inputStream + * @param tlsPeerCert tls peer cert inputstream + * @param tlsPeerPriv tls peer private key inputstream * @return @return {@link Builder} */ - public Builder https(String tlsCa, String tlsPeerCert, String tlsPeerPriv) { + public Builder https(InputStream tlsCa, InputStream tlsPeerCert, InputStream tlsPeerPriv) { HttpsUtils.SSLParams sslSocketFactory = HttpsUtils.getSslSocketFactory(tlsCa, tlsPeerCert, tlsPeerPriv, HttpsUtils.DEFAULT_PASSWORD); builder.sslSocketFactory(sslSocketFactory.getsSLSocketFactory(), sslSocketFactory.getTrustManager()) .hostnameVerifier(HttpsUtils.hyperchainVerifier()); diff --git a/src/main/java/cn/hyperchain/sdk/provider/ProviderManager.java b/src/main/java/cn/hyperchain/sdk/provider/ProviderManager.java index 643548fb..1f2c67ea 100644 --- a/src/main/java/cn/hyperchain/sdk/provider/ProviderManager.java +++ b/src/main/java/cn/hyperchain/sdk/provider/ProviderManager.java @@ -14,6 +14,7 @@ import com.google.gson.Gson; import org.apache.log4j.Logger; +import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -58,19 +59,19 @@ public Builder providers(HttpProvider... httpProviders) { /** * enable TCert to request http. - * @param sdkCertPath sdkCert file path - * @param sdkCertPrivPath sdkCert private key file path - * @param uniquePubPath unique public key file path - * @param uniquePrivPath unique private key file path + * @param sdkCert sdkCert inputStream + * @param sdkCertPriv sdkCert private key inputStream + * @param uniquePub unique public key inputStream + * @param uniquePriv unique private key inputStream * @return {@link Builder} */ - public Builder enableTCert(String sdkCertPath, String sdkCertPrivPath, String uniquePubPath, String uniquePrivPath) { + public Builder enableTCert(InputStream sdkCert, InputStream sdkCertPriv, InputStream uniquePub, InputStream uniquePriv) { if (providerManager.tCertPool != null) { logger.warn("warn: TCertPool has been initialized"); } providerManager.isCFCA = false; try { - TCertPool tCertPool = new TCertPool(sdkCertPath, sdkCertPrivPath, uniquePubPath, uniquePrivPath); + TCertPool tCertPool = new TCertPool(sdkCert, sdkCertPriv, uniquePub, uniquePriv); providerManager.settCertPool(tCertPool); } catch (Exception e) { throw new RuntimeException("init TCertPool error, cause " + e.getMessage()); @@ -80,17 +81,17 @@ public Builder enableTCert(String sdkCertPath, String sdkCertPrivPath, String un /** * use cafa to request http. - * @param sdkCertPath sdkCert file path - * @param sdkCertPrivPath sdkCert private key file path + * @param sdkCert sdkCert inputStream + * @param sdkCertPriv sdkCert private key inputStream * @return {@link Builder} */ - public Builder cfca(String sdkCertPath, String sdkCertPrivPath) { + public Builder cfca(InputStream sdkCert, InputStream sdkCertPriv) { if (providerManager.tCertPool != null) { logger.warn("warn: TCertPool has been initialized"); } providerManager.isCFCA = true; try { - TCertPool tCertPool = new TCertPool(sdkCertPath, sdkCertPrivPath); + TCertPool tCertPool = new TCertPool(sdkCert, sdkCertPriv); providerManager.settCertPool(tCertPool); } catch (Exception e) { throw new RuntimeException("init TCertPool error, cause " + e.getMessage()); diff --git a/src/main/java/cn/hyperchain/sdk/provider/TCertPool.java b/src/main/java/cn/hyperchain/sdk/provider/TCertPool.java index 1b25d552..5ef7b54c 100644 --- a/src/main/java/cn/hyperchain/sdk/provider/TCertPool.java +++ b/src/main/java/cn/hyperchain/sdk/provider/TCertPool.java @@ -2,6 +2,7 @@ import cn.hyperchain.sdk.crypto.cert.CertKeyPair; +import java.io.InputStream; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -13,26 +14,26 @@ public class TCertPool { /** * init a TCert pool. - * @param sdkCertPath sdkCert file path - * @param sdkCertPrivPath sdkCert private key file path - * @param uniquePubPath unique public key file path - * @param uniquePrivPath unique private key file path + * @param sdkCert sdkCert inputStream + * @param sdkCertPriv sdkCert private key inputStream + * @param uniquePub unique public key inputStream + * @param uniquePriv unique private key inputStream * @throws Exception - */ - public TCertPool(String sdkCertPath, String sdkCertPrivPath, String uniquePubPath, String uniquePrivPath) throws Exception { - this.sdkCertKeyPair = new CertKeyPair(sdkCertPath, sdkCertPrivPath); - this.uniqueKeyPair = new CertKeyPair(uniquePubPath, uniquePrivPath); + public TCertPool(InputStream sdkCert, InputStream sdkCertPriv, InputStream uniquePub, InputStream uniquePriv) throws Exception { + this.sdkCertKeyPair = new CertKeyPair(sdkCert, sdkCertPriv); + this.uniqueKeyPair = new CertKeyPair(uniquePub, uniquePriv); this.tCerts = new ConcurrentHashMap<>(); } /** * init a TCert pool for cfca. - * @param sdkCertPath sdkCert file path - * @param sdkCertPrivPath sdkCert private key file path + * @param sdkCert sdkCert inputStream + * @param sdkCertPriv sdkCert private key inputStream * @throws Exception - */ - public TCertPool(String sdkCertPath, String sdkCertPrivPath) throws Exception { - this.sdkCertKeyPair = new CertKeyPair(sdkCertPath, sdkCertPrivPath); + public TCertPool(InputStream sdkCert, InputStream sdkCertPriv) throws Exception { + this.sdkCertKeyPair = new CertKeyPair(sdkCert, sdkCertPriv); this.tCerts = new ConcurrentHashMap<>(); } diff --git a/src/main/java/cn/hyperchain/sdk/transaction/Transaction.java b/src/main/java/cn/hyperchain/sdk/transaction/Transaction.java index 1c646b92..ff189358 100644 --- a/src/main/java/cn/hyperchain/sdk/transaction/Transaction.java +++ b/src/main/java/cn/hyperchain/sdk/transaction/Transaction.java @@ -8,6 +8,7 @@ import cn.hyperchain.sdk.common.utils.Utils; import org.apache.log4j.Logger; +import java.io.InputStream; import java.util.Date; public class Transaction { @@ -92,11 +93,11 @@ public HVMBuilder(String from) { /** * create deployment transaction for {@link VMType} HVM. - * @param jarPath hvm contract jar + * @param fis FileInputStream for the given jar file * @return {@link Builder} */ - public Builder deploy(String jarPath) { - String payload = Encoder.encodeDeployJar(jarPath); + public Builder deploy(InputStream fis) { + String payload = Encoder.encodeDeployJar(fis); super.transaction.setTo("0x0"); super.transaction.setPayload(payload); return this; diff --git a/src/test/java/cn/hyperchain/sdk/EVMTest.java b/src/test/java/cn/hyperchain/sdk/EVMTest.java index c36918d5..68cc9fef 100644 --- a/src/test/java/cn/hyperchain/sdk/EVMTest.java +++ b/src/test/java/cn/hyperchain/sdk/EVMTest.java @@ -14,6 +14,9 @@ import cn.hyperchain.sdk.transaction.Transaction; import org.junit.Test; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; import java.util.List; public class EVMTest { @@ -33,8 +36,11 @@ public void testEVM() throws Exception { // 3. build transaction Account account = accountService.genAccount(Algo.SMAES, PASSWORD); - String bin = FileUtil.readFile("solidity/TypeTestContract_sol_TypeTestContract.bin"); - String abiStr = FileUtil.readFile("solidity/TypeTestContract_sol_TypeTestContract.abi"); + + InputStream inputStream1 = Thread.currentThread().getContextClassLoader().getResourceAsStream("solidity/TypeTestContract_sol_TypeTestContract.bin"); + InputStream inputStream2 = Thread.currentThread().getContextClassLoader().getResourceAsStream("solidity/TypeTestContract_sol_TypeTestContract.abi"); + String bin = FileUtil.readFile(inputStream1); + String abiStr = FileUtil.readFile(inputStream2); Abi abi = Abi.fromJson(abiStr); Transaction transaction = new Transaction.EVMBuilder(account.getAddress()).deploy(bin, abi, "contract01").build(); transaction.sign(account); diff --git a/src/test/java/cn/hyperchain/sdk/HVMTest.java b/src/test/java/cn/hyperchain/sdk/HVMTest.java index b3d76fd9..309e6661 100644 --- a/src/test/java/cn/hyperchain/sdk/HVMTest.java +++ b/src/test/java/cn/hyperchain/sdk/HVMTest.java @@ -4,6 +4,7 @@ import cn.hyperchain.sdk.account.Algo; import cn.hyperchain.sdk.common.utils.ByteUtil; import cn.hyperchain.sdk.common.utils.Decoder; +import cn.hyperchain.sdk.common.utils.FileUtil; import cn.hyperchain.sdk.crypto.SignerUtil; import cn.hyperchain.sdk.exception.RequestException; import cn.hyperchain.sdk.hvm.StudentInvoke; @@ -18,13 +19,16 @@ import org.junit.Ignore; import org.junit.Test; +import java.io.IOException; +import java.io.InputStream; + public class HVMTest { - public static String DEFAULT_URL = "localhost:8091"; + public static String DEFAULT_URL = "localhost:8081"; @Test @Ignore - public void testHVM() throws RequestException { + public void testHVM() throws RequestException, IOException { // 1. build provider manager DefaultHttpProvider defaultHttpProvider = new DefaultHttpProvider.Builder().setUrl(DEFAULT_URL).build(); ProviderManager providerManager = ProviderManager.createManager(defaultHttpProvider); @@ -34,7 +38,8 @@ public void testHVM() throws RequestException { AccountService accountService = ServiceManager.getAccountService(providerManager); // 3. build transaction Account account = accountService.genAccount(Algo.SMRAW); - Transaction transaction = new Transaction.HVMBuilder(account.getAddress()).deploy("hvm-jar/hvmbasic-1.0.0-student.jar").build(); + InputStream payload = FileUtil.readFileAsStream("hvm-jar/hvmbasic-1.0.0-student.jar"); + Transaction transaction = new Transaction.HVMBuilder(account.getAddress()).deploy(payload).build(); transaction.sign(accountService.fromAccountJson(account.toJson())); Assert.assertTrue(account.verify(transaction.getNeedHashString().getBytes(), ByteUtil.fromHex(transaction.getSignature()))); Assert.assertTrue(SignerUtil.verifySign(transaction.getNeedHashString(), transaction.getSignature(), account.getPublicKey())); diff --git a/src/test/java/cn/hyperchain/sdk/service/Common.java b/src/test/java/cn/hyperchain/sdk/service/Common.java new file mode 100644 index 00000000..69e5c910 --- /dev/null +++ b/src/test/java/cn/hyperchain/sdk/service/Common.java @@ -0,0 +1,84 @@ +package cn.hyperchain.sdk.service; + +import cn.hyperchain.sdk.provider.DefaultHttpProvider; +import cn.hyperchain.sdk.provider.HttpProvider; +import cn.hyperchain.sdk.provider.ProviderManager; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; + +public class Common { + + public static final String tlsca = "certs/tls/tlsca.ca"; + public static final String tls_peer_cert = "certs/tls/tls_peer.cert"; + public static final String tls_peer_priv = "certs/tls/tls_peer.priv"; + public static final String sdkcert_cert = "certs/sdkcert.cert"; + public static final String sdkcert_priv = "certs/sdkcert.priv"; + public static final String unique_pub = "certs/unique.pub"; + public static final String unique_priv = "certs/unique.priv"; + + public static InputStream tlsca_is = null; + public static InputStream tls_peer_cert_is = null; + public static InputStream tls_peer_priv_is = null; + public static InputStream sdkcert_cert_is = null; + public static InputStream sdkcert_priv_is = null; + public static InputStream unique_pub_is = null; + public static InputStream unique_priv_is = null; + + public static final String node1 = "localhost:8081"; + public static final String node2 = "localhost:8082"; + public static final String node3 = "localhost:8083"; + public static final String node4 = "localhost:8084"; + public static ProviderManager providerManager; + + static { + + try { + sdkcert_cert_is = Thread.currentThread().getContextClassLoader().getResourceAsStream(sdkcert_cert); + sdkcert_priv_is = Thread.currentThread().getContextClassLoader().getResourceAsStream(sdkcert_priv); + unique_pub_is = Thread.currentThread().getContextClassLoader().getResourceAsStream(unique_pub); + unique_priv_is = Thread.currentThread().getContextClassLoader().getResourceAsStream(unique_priv); + + tlsca_is = Thread.currentThread().getContextClassLoader().getResourceAsStream(tlsca); + tls_peer_cert_is = Thread.currentThread().getContextClassLoader().getResourceAsStream(tls_peer_cert); + tls_peer_priv_is = Thread.currentThread().getContextClassLoader().getResourceAsStream(tls_peer_priv); + HttpProvider httpProvider1 = new DefaultHttpProvider.Builder() + .setUrl(node1) +// .https(tlsca_is, tls_peer_cert_is, tls_peer_priv_is) + .build(); + + tlsca_is = Thread.currentThread().getContextClassLoader().getResourceAsStream(tlsca); + tls_peer_cert_is = Thread.currentThread().getContextClassLoader().getResourceAsStream(tls_peer_cert); + tls_peer_priv_is = Thread.currentThread().getContextClassLoader().getResourceAsStream(tls_peer_priv); + HttpProvider httpProvider2 = new DefaultHttpProvider.Builder() + .setUrl(node2) +// .https(tlsca_is, tls_peer_cert_is, tls_peer_priv_is) + .build(); + + tlsca_is = Thread.currentThread().getContextClassLoader().getResourceAsStream(tlsca); + tls_peer_cert_is = Thread.currentThread().getContextClassLoader().getResourceAsStream(tls_peer_cert); + tls_peer_priv_is = Thread.currentThread().getContextClassLoader().getResourceAsStream(tls_peer_priv); + HttpProvider httpProvider3 = new DefaultHttpProvider.Builder() + .setUrl(node3) +// .https(tlsca_is, tls_peer_cert_is, tls_peer_priv_is) + .build(); + + tlsca_is = Thread.currentThread().getContextClassLoader().getResourceAsStream(tlsca); + tls_peer_cert_is = Thread.currentThread().getContextClassLoader().getResourceAsStream(tls_peer_cert); + tls_peer_priv_is = Thread.currentThread().getContextClassLoader().getResourceAsStream(tls_peer_priv); + HttpProvider httpProvider4 = new DefaultHttpProvider.Builder() + .setUrl(node4) +// .https(tlsca_is, tls_peer_cert_is, tls_peer_priv_is) + .build(); + + providerManager = new ProviderManager.Builder() + .namespace("global") + .providers(httpProvider1, httpProvider2, httpProvider3, httpProvider4) +// .enableTCert(sdkcert_cert_is, sdkcert_priv_is, unique_pub_is, unique_priv_is) + .build(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/test/java/cn/hyperchain/sdk/service/NodeServiceTest.java b/src/test/java/cn/hyperchain/sdk/service/NodeServiceTest.java index eefe043d..2ca87cca 100644 --- a/src/test/java/cn/hyperchain/sdk/service/NodeServiceTest.java +++ b/src/test/java/cn/hyperchain/sdk/service/NodeServiceTest.java @@ -7,7 +7,7 @@ public class NodeServiceTest { - private ProviderManager providerManager = common.providerManager; + private ProviderManager providerManager = Common.providerManager; private NodeService nodeService = ServiceManager.getNodeService(providerManager); @Test diff --git a/src/test/java/cn/hyperchain/sdk/service/common.java b/src/test/java/cn/hyperchain/sdk/service/common.java deleted file mode 100644 index 71854ef4..00000000 --- a/src/test/java/cn/hyperchain/sdk/service/common.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.hyperchain.sdk.service; - -import cn.hyperchain.sdk.provider.DefaultHttpProvider; -import cn.hyperchain.sdk.provider.HttpProvider; -import cn.hyperchain.sdk.provider.ProviderManager; - -public class common { - - public static final String tlsca = "certs/tls/tlsca.ca"; - public static final String tls_peer_cert = "certs/tls/tls_peer.cert"; - public static final String tls_peer_priv = "certs/tls/tls_peer.priv"; - public static final String sdkcert_cert = "certs/sdkcert.cert"; - public static final String sdkcert_priv = "certs/sdkcert.priv"; - public static final String unique_pub = "certs/unique.pub"; - public static final String unique_priv = "certs/unique.priv"; - - public static final String node1 = "localhost:8081"; - public static final String node2 = "localhost:8082"; - public static final String node3 = "localhost:8083"; - public static final String node4 = "localhost:8084"; - public static ProviderManager providerManager; - - static { - HttpProvider httpProvider1 = new DefaultHttpProvider.Builder() - .setUrl(node1) -// .https(tlsca, tls_peer_cert, tls_peer_priv) - .build(); - HttpProvider httpProvider2 = new DefaultHttpProvider.Builder() - .setUrl(node2) - .https(tlsca, tls_peer_cert, tls_peer_priv) - .build(); - HttpProvider httpProvider3 = new DefaultHttpProvider.Builder() - .setUrl(node3) - .https(tlsca, tls_peer_cert, tls_peer_priv) - .build(); - HttpProvider httpProvider4 = new DefaultHttpProvider.Builder() - .setUrl(node4) - .https(tlsca, tls_peer_cert, tls_peer_priv) - .build(); - providerManager = new ProviderManager.Builder() - .namespace("global") -// .providers(httpProvider1, httpProvider2, httpProvider3, httpProvider4) - .providers(httpProvider1) -// .enableTCert(sdkcert_cert, sdkcert_priv, unique_pub, unique_priv) - .build(); - } -} diff --git a/src/test/java/cn/hyperchain/sdk/transaction/TransactionTest.java b/src/test/java/cn/hyperchain/sdk/transaction/TransactionTest.java index 5cb6d334..720fe399 100644 --- a/src/test/java/cn/hyperchain/sdk/transaction/TransactionTest.java +++ b/src/test/java/cn/hyperchain/sdk/transaction/TransactionTest.java @@ -1,13 +1,18 @@ package cn.hyperchain.sdk.transaction; +import cn.hyperchain.sdk.common.utils.FileUtil; import org.junit.Test; +import java.io.*; + public class TransactionTest { @Test - public void testCreateTransaction() { + public void testCreateTransaction() throws IOException { + String path = "hvm-jar/hvmbasic-1.0.0-student.jar"; + InputStream inputStream = FileUtil.readFileAsStream(path); Transaction transaction = new Transaction.HVMBuilder("0x0000000000000000000000000000000000000000") - .deploy("hvm-jar/hvmbasic-1.0.0-student.jar") + .deploy(inputStream) .extra("") .simulate() .build();