From 4bd2b8d0da1556486bafbbb0a4deae948b0960c5 Mon Sep 17 00:00:00 2001 From: GME Date: Fri, 19 Oct 2018 09:47:49 +0200 Subject: [PATCH] Update features --- .idea/caches/build_file_checksums.ser | Bin 535 -> 535 bytes app/build.gradle | 6 +- .../monnethic/mobile/test/LearningTest.java | 4 +- .../mobile/test/blockchain/TestQuery.java | 57 ++++++++++++++++ .../test/blockchain/Utility/UtilTest.java | 61 ++++++++++++++++++ app/src/main/AndroidManifest.xml | 4 +- .../blockchain/client/CAClientWrapper.java | 59 +++++++++++++---- .../client/ChannelClientWrapper.java | 51 +++++++++++++++ .../blockchain/client/FabriClientWrapper.java | 32 +++++++++ .../mobile/blockchain/network/Config.java | 27 ++++++++ .../blockchain/participant/UserContext.java | 4 +- .../mobile/blockchain/utility/Util.java | 25 ++++--- .../mobile/test/blockchain/TestQuery.java | 36 +++++++++++ 13 files changed, 337 insertions(+), 29 deletions(-) create mode 100644 app/src/androidTest/java/monnethic/mobile/test/blockchain/TestQuery.java create mode 100644 app/src/androidTest/java/monnethic/mobile/test/blockchain/Utility/UtilTest.java create mode 100644 app/src/main/java/monnethic/mobile/blockchain/client/ChannelClientWrapper.java create mode 100644 app/src/main/java/monnethic/mobile/blockchain/client/FabriClientWrapper.java create mode 100644 app/src/main/java/monnethic/mobile/blockchain/network/Config.java create mode 100644 app/src/test/java/monnethic/mobile/test/blockchain/TestQuery.java diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 7fb1c116b80497f0657a5fabd5b2094d16876a39..6c2c9de5b0ba2db9f3ea4195e566283a98cbb71b 100644 GIT binary patch delta 35 tcmV+;0NnqV1eXMmm;`=!%%qW=cMv)h?3naa9{E+~8S$JKER&NX0rVQ_5D)+W delta 35 tcmV+;0NnqV1eXMmm;`fp=;V={cMw&z1UQZI8VJG8F^HYuHeHh=0rVDy54ZpT diff --git a/app/build.gradle b/app/build.gradle index 060a0dd..d2b56f4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -41,9 +41,9 @@ dependencies { exclude group:'log4j', module:'log4j' } testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test:rules:1.0.2' - androidTestImplementation 'com.android.support:support-annotations:28.0.0' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test:rules:1.0.1' + androidTestImplementation 'com.android.support:support-annotations:26.1.0' androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', { exclude group: 'com.android.support', module: 'support-annotations' }) diff --git a/app/src/androidTest/java/monnethic/mobile/test/LearningTest.java b/app/src/androidTest/java/monnethic/mobile/test/LearningTest.java index f215290..77cde9b 100644 --- a/app/src/androidTest/java/monnethic/mobile/test/LearningTest.java +++ b/app/src/androidTest/java/monnethic/mobile/test/LearningTest.java @@ -34,7 +34,7 @@ public class LearningTest { System.out.println(appContext.getPackageName()); InputStream is = appContext.getResources().openRawResource(R.raw.config); - +/* try (JsonReader reader = Json.createReader(is)) { JsonObject jsonConfig = (JsonObject) reader.read(); System.out.println(jsonConfig); @@ -42,7 +42,7 @@ public class LearningTest { NetworkConfig config; config = NetworkConfig.fromJsonObject(jsonConfig); //System.out.println(config!=null); - } + }*/ /* Writer writer = new StringWriter(); diff --git a/app/src/androidTest/java/monnethic/mobile/test/blockchain/TestQuery.java b/app/src/androidTest/java/monnethic/mobile/test/blockchain/TestQuery.java new file mode 100644 index 0000000..ef5adff --- /dev/null +++ b/app/src/androidTest/java/monnethic/mobile/test/blockchain/TestQuery.java @@ -0,0 +1,57 @@ +package monnethic.mobile.test.blockchain; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; + +import org.hyperledger.fabric.sdk.ProposalResponse; +import org.junit.Test; + +import java.util.Collection; +import java.util.logging.Level; +import java.util.logging.Logger; + +import monnethic.mobile.blockchain.client.CAClientWrapper; +import monnethic.mobile.blockchain.client.ChannelClientWrapper; +import monnethic.mobile.blockchain.client.FabriClientWrapper; +import monnethic.mobile.blockchain.network.Config; +import monnethic.mobile.blockchain.participant.UserContext; +import monnethic.mobile.test.blockchain.Utility.UtilTest; + + +public class TestQuery { + @Test + public void TestAQueryChainCode() throws Exception { + // Test query for user a on blockchain + try{ + String query = "query"; + String[] args1 = {"a"}; + Context appContext = InstrumentationRegistry.getTargetContext(); + + String caUrl = Config.CA_ORG1_URL; + CAClientWrapper caClientWrapper = new CAClientWrapper(caUrl,null,null,null); + + UserContext adminContext = new UserContext(); + adminContext.setName(Config.ADMIN); + adminContext.setAffiliation(Config.ORG1); + adminContext.setMspId(Config.ORG1_MSP); + + caClientWrapper.setAdminContext(adminContext); + adminContext = caClientWrapper.enrollAdmin(appContext,Config.ADMIN,Config.ADMIN_PASSWORD,Config.ORG1); + + FabriClientWrapper fabriClientWrapper = new FabriClientWrapper(adminContext); + ChannelClientWrapper channelClientWrapper = fabriClientWrapper.createChannelClient(Config.CHANNEL_NAME); + + Logger.getLogger(TestQuery.class.getName()).log(Level.INFO, "Querying for USER A ..."); + + Collection responsesQuery = channelClientWrapper.queryByChainCode(Config.CHAINCODE_NAME,query,args1); + + for(ProposalResponse pres : responsesQuery){ + String stringResponse = new String(pres.getChaincodeActionResponsePayload()); + Logger.getLogger(TestQuery.class.getName()).log(Level.INFO, stringResponse); + } + + } catch (Exception e){ + e.printStackTrace(); + } + } +} diff --git a/app/src/androidTest/java/monnethic/mobile/test/blockchain/Utility/UtilTest.java b/app/src/androidTest/java/monnethic/mobile/test/blockchain/Utility/UtilTest.java new file mode 100644 index 0000000..cd09363 --- /dev/null +++ b/app/src/androidTest/java/monnethic/mobile/test/blockchain/Utility/UtilTest.java @@ -0,0 +1,61 @@ +package monnethic.mobile.test.blockchain.Utility; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; + +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + +import java.util.logging.Level; +import java.util.logging.Logger; + + +import monnethic.mobile.blockchain.participant.UserContext; +import monnethic.mobile.blockchain.utility.Util; + +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class UtilTest { + /* + @Test + public void readEmptyUserContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + + }*/ + + @Test + public void testAreadNonUserContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + UserContext uc = Util.readUserContext(appContext,"tata","abdel"); + if(uc!=null){ + Logger.getLogger(UtilTest.class.getName()).log(Level.INFO, "UserContext is : "+uc.toString()); + }else{ + Logger.getLogger(UtilTest.class.getName()).log(Level.INFO, "UserContext doesn't exist"); + } + } + + @Test + public void testBwriteUserContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + UserContext user = new UserContext(); + user.setName("abdel"); + user.setAffiliation("toto"); + user.setEnrollment(null); + user.setMspId("test"); + + Util.writeUserContext(appContext, user); + } + + @Test + public void testCreadUserContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + UserContext uc = Util.readUserContext(appContext,"toto","abdel"); + Logger.getLogger(UtilTest.class.getName()).log(Level.INFO, "UserContext is : "+uc.toString()); + } + +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 253d003..4f61d86 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,8 +7,8 @@ - - + + queryByChainCode(String chaincodeName, String functionName, String[] args) throws InvalidArgumentException, ProposalException { + Logger.getLogger(ChannelClientWrapper.class.getName()).log(Level.INFO, "Querying "+chaincodeName+" with "+functionName); + + QueryByChaincodeRequest request = fabriClientWrapper.getHfClient().newQueryProposalRequest(); + ChaincodeID chaincodeId = ChaincodeID.newBuilder().setName(chaincodeName).build(); + request.setChaincodeID(chaincodeId); + request.setFcn(functionName); + + if(args != null){ + request.setArgs(args); + } + Collection response = channel.queryByChaincode(request); + return response; + } +} diff --git a/app/src/main/java/monnethic/mobile/blockchain/client/FabriClientWrapper.java b/app/src/main/java/monnethic/mobile/blockchain/client/FabriClientWrapper.java new file mode 100644 index 0000000..2608273 --- /dev/null +++ b/app/src/main/java/monnethic/mobile/blockchain/client/FabriClientWrapper.java @@ -0,0 +1,32 @@ +package monnethic.mobile.blockchain.client; + +import org.hyperledger.fabric.sdk.Channel; +import org.hyperledger.fabric.sdk.HFClient; +import org.hyperledger.fabric.sdk.exception.CryptoException; +import org.hyperledger.fabric.sdk.exception.InvalidArgumentException; +import org.hyperledger.fabric.sdk.security.CryptoSuite; + +import java.lang.reflect.InvocationTargetException; + +import monnethic.mobile.blockchain.participant.UserContext; + +public class FabriClientWrapper { + private HFClient hfClient; + + public HFClient getHfClient() { + return hfClient; + } + + public FabriClientWrapper(UserContext userContext) throws CryptoException, InvalidArgumentException, IllegalAccessException, InstantiationException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException { + CryptoSuite cryptoSuite = CryptoSuite.Factory.getCryptoSuite(); + hfClient = HFClient.createNewInstance(); + hfClient.setCryptoSuite(cryptoSuite); + hfClient.setUserContext(userContext); + } + + public ChannelClientWrapper createChannelClient(String name) throws InvalidArgumentException { + Channel channel = hfClient.newChannel(name); + ChannelClientWrapper client = new ChannelClientWrapper(name, channel, this); + return client; + } +} diff --git a/app/src/main/java/monnethic/mobile/blockchain/network/Config.java b/app/src/main/java/monnethic/mobile/blockchain/network/Config.java new file mode 100644 index 0000000..c57004d --- /dev/null +++ b/app/src/main/java/monnethic/mobile/blockchain/network/Config.java @@ -0,0 +1,27 @@ +package monnethic.mobile.blockchain.network; + +public class Config { + //TODO SET STATIC FINAL VAR FOR NETWORK CONFIG, REPLACE LOADCONFIGINFO + public static final String ORG1_MSP = "Org1MSP"; + + public static final String ORG1 = "org1"; + + public static final String ADMIN = "AdminOrg1"; + + public static final String ADMIN_PASSWORD = "AdminOrg1Pwd"; + + public static final String CA_ORG1_URL = "vps577432.ovh.net:7054"; + + public static final String ORDERER_URL = "vps577432.ovh.net:7050"; + + public static final String ORDERER_NAME = "orderer.example.com"; + + public static final String CHANNEL_NAME = "mychannel"; + + public static final String CHAINCODE_NAME = "mycc"; + + public static final String ORG1_PEER_0 = "peer0.org1.example.com"; + + public static final String ORG1_PEER_0_URL = "vps577432.ovh.net:7051"; + +} diff --git a/app/src/main/java/monnethic/mobile/blockchain/participant/UserContext.java b/app/src/main/java/monnethic/mobile/blockchain/participant/UserContext.java index c34efb4..671a138 100644 --- a/app/src/main/java/monnethic/mobile/blockchain/participant/UserContext.java +++ b/app/src/main/java/monnethic/mobile/blockchain/participant/UserContext.java @@ -10,7 +10,7 @@ public class UserContext implements User, Serializable { private static final long serialVersionUID = 1L; protected String name; - protected Set roles; + protected Set roles; protected String account; protected String affiliation; protected Enrollment enrollment; @@ -45,7 +45,7 @@ public class UserContext implements User, Serializable { @Override public String getAffiliation() { - return null; + return affiliation; } public void setAffiliation(String affiliation){ diff --git a/app/src/main/java/monnethic/mobile/blockchain/utility/Util.java b/app/src/main/java/monnethic/mobile/blockchain/utility/Util.java index 3cbe3fa..59708f9 100644 --- a/app/src/main/java/monnethic/mobile/blockchain/utility/Util.java +++ b/app/src/main/java/monnethic/mobile/blockchain/utility/Util.java @@ -7,6 +7,8 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.util.logging.Level; +import java.util.logging.Logger; import monnethic.mobile.blockchain.participant.UserContext; @@ -21,21 +23,26 @@ public class Util { //Method which write user info into a directory public static void writeUserContext(Context context, UserContext userContext){ ObjectOutputStream out = null; - FileOutputStream file = null; + FileOutputStream fileOutputStream = null; try{ String filename = userContext.getName()+".context"; String dirPath = context.getFilesDir()+"userInfos/"+userContext.getAffiliation(); String pathFile = dirPath+"/"+filename; - + Logger.getLogger(Util.class.getName()).log(Level.INFO, "pathFile is : "+pathFile); File dir = new File(dirPath); if(!dir.exists()){ - dir.mkdirs(); + Boolean res = dir.mkdirs(); + if(res){ + Logger.getLogger(Util.class.getName()).log(Level.INFO, "RESPONSE IS TRUE"); + }else{ + Logger.getLogger(Util.class.getName()).log(Level.SEVERE, "RESPONSE IS FALSE"); + } } - file = null; - file = new FileOutputStream(pathFile); - out = new ObjectOutputStream(file); - + File file = new File(pathFile); + fileOutputStream = new FileOutputStream(file); + out = new ObjectOutputStream(fileOutputStream); + Logger.getLogger(Util.class.getName()).log(Level.INFO, "out is : "+out); out.writeObject(userContext); }catch (Exception e){ e.printStackTrace(); @@ -48,8 +55,8 @@ public class Util { e.printStackTrace(); } try{ - if(file != null){ - file.close(); + if(fileOutputStream != null){ + fileOutputStream.close(); } }catch (Exception e){ e.printStackTrace(); diff --git a/app/src/test/java/monnethic/mobile/test/blockchain/TestQuery.java b/app/src/test/java/monnethic/mobile/test/blockchain/TestQuery.java new file mode 100644 index 0000000..7ec2870 --- /dev/null +++ b/app/src/test/java/monnethic/mobile/test/blockchain/TestQuery.java @@ -0,0 +1,36 @@ +package monnethic.mobile.test.blockchain; + +import android.content.Context; + +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + +import monnethic.mobile.blockchain.client.CAClientWrapper; +import monnethic.mobile.blockchain.network.Config; +import monnethic.mobile.blockchain.participant.UserContext; + +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class TestQuery { + @Test + void TestAQueryChainCode(){ + try{ + //context appContext = InstrumentationRegistry.getTargetContext(); + + String caUrl = Config.CA_ORG1_URL; + CAClientWrapper caClientWrapper = new CAClientWrapper(caUrl,null,null,null); + + UserContext adminContext = new UserContext(); + adminContext.setName(Config.ADMIN); + adminContext.setAffiliation(Config.ORG1); + adminContext.setMspId(Config.ORG1_MSP); + + caClientWrapper.setAdminContext(adminContext); + //adminContext = caClientWrapper.enrollAdmin(appContext); + } catch (Exception e){ + e.printStackTrace(); + } + + + } +}