//public string GetMemberList(Dictionary<string, object> parameters) //{ // string response = string.Empty; // var member = _memberRepository.GetMemberList(parameters); // response = this._converter.Serialize(member); // return response; //} public ProposalResponse GetProposalList(int pageIndex, int?pageSize) { var filterSpecification = new ProposalwithDetailSpecification(statusId: (int)Common.Extension.Enums.Status.Active); // var members = _testRepository.GetMemberList(new Dictionary<string, object>()); var root = _itemRepository.List(filterSpecification); var totalItems = root.Count(); var itemsOnPage = root.Skip(pageSize ?? 0 * pageIndex).TakeIfNotNull(pageSize).OrderBy(x => x.ProposalRef).ToList(); var vm = new ProposalResponse() { ProposalList = itemsOnPage.Select(i => new proposal() { ProposalId = i.ProposalId, ProposalAmount = i.ProposalAmount, ProposalDate = i.ProposalDate, SignoffAmount = i.SignoffAmount, SignoffDate = i.SignoffDate.ToString("yyyy/MM/dd"), Title = i.Title, ProposalRef = i.ProposalRef, CurrencyId = i.CurrencyId, CustomerId = i.CustomerId, ModelId = i.ModelId, Status = i.Status, CreatedByUserId = i.CreatedByUserId, CreatedDateTime = i.CreatedDateTime, LastModifiedByUserId = i.LastModifiedByUserId, LastModifiedDateTime = i.LastModifiedDateTime, CurrencyName = i.Currency.Name, //_proposalRepository.GetCurrencyName(i.CurrencyId), CustomerName = i.Customer.Name, //_proposalRepository.GetCustomerName((int)i.CustomerId), ModelName = string.Join(",", i.Project.Select(x => x.Model.Name)), //_proposalRepository.GetModelName(i.ModelId), Technology = string.Join(",", i.ProposalTechnologyMap.Select(x => x.Technology.Name)) //_proposalRepository.GetTechnologies(i.ProposalId) }), PaginationInfo = new Entities.Entities.Proposal.PaginationInfoModel() { CurrentPage = pageIndex, ItemsPerPage = itemsOnPage.Count, TotalItems = totalItems, TotalPages = int.Parse(Math.Ceiling(((decimal)totalItems / pageSize ?? 1)).ToString()) } }; return(vm); // return _converter.Serialize(vm); }
public virtual FileResult DownloadProposalReport( string operationNumber, string proposalOperationId, string proposalYear, string proposalType, string formatType) { ProposalResponse responseGetProposal = _eswcipService.GetProposal( proposalOperationId, proposalYear, proposalType); var responseDownload = _eswcipService.DownloadProposalReport( responseGetProposal.Proposal, formatType); var reportName = "ProposalReport-" + operationNumber + "." + formatType; return(!responseDownload.IsValid ? null : File(responseDownload.File, "application/" + formatType, reportName)); }
public virtual ActionResult Proposal( string proposalOperationId, string proposalYear, string proposalType) { ProposalResponse response = _eswcipService .GetProposal(proposalOperationId, proposalYear, proposalType); response.Proposal.HasProposalWritePermission = IDBContext.Current.HasPermission(Permission.PROPOSAL_TL_WRITE) || IDBContext.Current.HasPermission(Permission.PROPOSAL_WRITE); response.Proposal.FieldAccessList = _securityModelRepository.GetFieldBehaviorByPermissions( IDBContext.Current.Operation, CHART_PROPOSAL, IDBContext.Current.Permissions, 0, 0).ToList(); ViewBag.DeliverableTypes = _eswcipService.GetDeliverablesTypes(); ViewBag.SerializedViewModel = Helpers.PageSerializationHelper .SerializeObject(response.Proposal); ViewBag.CountryList = _eswcipService.GetCountries(); var responseOrgUnits = _eswcipService.GetOrganizationalUnits( response.Proposal.GeneralInformation .OrganizationalUnit.AsQueryable().Select(x => x.UnitCode)); if (!responseOrgUnits.IsValid) { responseOrgUnits.OrganizationalUnits = new List <SelectListItem>(); } ViewBag.OrganizationalUnits = responseOrgUnits.OrganizationalUnits; return(View(response.Proposal)); }
// ReSharper disable once UnusedMethodReturnValue.Local private static ChaincodeID DeployChaincode(HFClient client, Channel channel, string ccName, string ccPath, string ccVersion) { Util.COut("deployChaincode - enter"); ChaincodeID chaincodeID = null; try { string channelName = channel.Name; Util.COut("deployChaincode - channelName = " + channelName); IReadOnlyList <Orderer> orderers = channel.Orderers; List <ProposalResponse> responses; List <ProposalResponse> successful = new List <ProposalResponse>(); List <ProposalResponse> failed = new List <ProposalResponse>(); chaincodeID = new ChaincodeID().SetName(ccName).SetVersion(ccVersion).SetPath(ccPath); //////////////////////////// // Install Proposal Request // Util.COut("Creating install proposal"); InstallProposalRequest installProposalRequest = client.NewInstallProposalRequest(); installProposalRequest.SetChaincodeID(chaincodeID); ////For GO language and serving just a single user, chaincodeSource is mostly likely the users GOPATH installProposalRequest.SetChaincodeSourceLocation(Path.Combine(TEST_FIXTURES_PATH, "sdkintegration/gocc/sample1").Locate()); installProposalRequest.SetChaincodeVersion(ccVersion); Util.COut("Sending install proposal"); //////////////////////////// // only a client from the same org as the peer can issue an install request int numInstallProposal = 0; IReadOnlyList <Peer> peersFromOrg = channel.Peers; numInstallProposal = numInstallProposal + peersFromOrg.Count; responses = client.SendInstallProposal(installProposalRequest, peersFromOrg); foreach (ProposalResponse response in responses) { if (response.Status == ChaincodeResponse.ChaincodeResponseStatus.SUCCESS) { Util.COut("Successful install proposal response Txid: {0} from peer {1}", response.TransactionID, response.Peer.Name); successful.Add(response); } else { failed.Add(response); } } Util.COut("Received {0} install proposal responses. Successful+verified: {1} . Failed: {2}", numInstallProposal, successful.Count, failed.Count); if (failed.Count > 0) { ProposalResponse first = failed.First(); Assert.Fail($"Not enough endorsers for install : {successful.Count}. {first.Message}"); } /////////////// //// Instantiate chaincode. // // From the docs: // The instantiate transaction invokes the lifecycle System Chaincode (LSCC) to create and initialize a chaincode on a channel // After being successfully instantiated, the chaincode enters the active state on the channel and is ready to process any transaction proposals of type ENDORSER_TRANSACTION InstantiateProposalRequest instantiateProposalRequest = client.NewInstantiationProposalRequest(); instantiateProposalRequest.SetProposalWaitTime(testConfig.GetProposalWaitTime()); instantiateProposalRequest.SetChaincodeID(chaincodeID); instantiateProposalRequest.SetFcn("init"); instantiateProposalRequest.SetArgs("a", "500", "b", "999"); Dictionary <string, byte[]> tm = new Dictionary <string, byte[]>(); tm.Add("HyperLedgerFabric", "InstantiateProposalRequest:JavaSDK".ToBytes()); tm.Add("method", "InstantiateProposalRequest".ToBytes()); instantiateProposalRequest.SetTransientMap(tm); /* * policy OR(Org1MSP.member, Org2MSP.member) meaning 1 signature from someone in either Org1 or Org2 * See README.md Chaincode endorsement policies section for more details. */ ChaincodeEndorsementPolicy chaincodeEndorsementPolicy = new ChaincodeEndorsementPolicy(); chaincodeEndorsementPolicy.FromYamlFile(Path.Combine(TEST_FIXTURES_PATH, "sdkintegration/chaincodeendorsementpolicy.yaml").Locate()); instantiateProposalRequest.SetChaincodeEndorsementPolicy(chaincodeEndorsementPolicy); Util.COut("Sending instantiateProposalRequest to all peers..."); successful.Clear(); failed.Clear(); responses = channel.SendInstantiationProposal(instantiateProposalRequest); foreach (ProposalResponse response in responses) { if (response.IsVerified && response.Status == ChaincodeResponse.ChaincodeResponseStatus.SUCCESS) { successful.Add(response); Util.COut("Succesful instantiate proposal response Txid:{0} from peer {1}", response.TransactionID, response.Peer.Name); } else { failed.Add(response); } } Util.COut("Received {0} instantiate proposal responses. Successful+verified: {1} . Failed: {2}", responses.Count, successful.Count, failed.Count); if (failed.Count > 0) { ProposalResponse first = failed.First(); Assert.Fail($"Not enough endorsers for instantiate :{successful.Count} endorser failed with {first.Message}. Was verified:{first.IsVerified}"); } /////////////// // Send instantiate transaction to orderer Util.COut("Sending instantiateTransaction to orderer..."); Util.COut("calling get..."); TransactionEvent evnt = channel.SendTransaction(successful, orderers, 30 * 1000); Util.COut("get done..."); Assert.IsTrue(evnt.IsValid); // must be valid to be here. Util.COut("Finished instantiate transaction with transaction id {0}", evnt.TransactionID); } catch (System.Exception e) { Util.COut("Caught an exception running channel {0}", channel.Name); Assert.Fail($"Test failed with error : {e.Message}"); } return(chaincodeID); }
// ReSharper disable once UnusedMethodReturnValue.Local private static TransactionEvent MoveAmount(HFClient client, Channel channel, ChaincodeID chaincodeID, string from, string to, string moveAmount, IUser user) { List <ProposalResponse> successful = new List <ProposalResponse>(); List <ProposalResponse> failed = new List <ProposalResponse>(); /////////////// // Send transaction proposal to all peers TransactionProposalRequest transactionProposalRequest = client.NewTransactionProposalRequest(); transactionProposalRequest.SetChaincodeID(chaincodeID); transactionProposalRequest.SetFcn("move"); transactionProposalRequest.SetArgs(from, to, moveAmount); transactionProposalRequest.SetProposalWaitTime(testConfig.GetProposalWaitTime()); if (user != null) { // specific user use that transactionProposalRequest.SetUserContext(user); } Util.COut("sending transaction proposal to all peers with arguments: move(%s,%s,%s)", from, to, moveAmount); List <ProposalResponse> invokePropResp = channel.SendTransactionProposal(transactionProposalRequest); foreach (ProposalResponse response in invokePropResp) { if (response.Status == ChaincodeResponse.ChaincodeResponseStatus.SUCCESS) { Util.COut("Successful transaction proposal response Txid: {0} from peer {1}", response.TransactionID, response.Peer.Name); successful.Add(response); } else { failed.Add(response); } } // Check that all the proposals are consistent with each other. We should have only one set // where all the proposals above are consistent. List <HashSet <ProposalResponse> > proposalConsistencySets = SDKUtils.GetProposalConsistencySets(invokePropResp); if (proposalConsistencySets.Count != 1) { Assert.Fail($"Expected only one set of consistent move proposal responses but got {proposalConsistencySets.Count}"); } Util.COut("Received {0} transaction proposal responses. Successful+verified: {1} . Failed: {2}", invokePropResp.Count, successful.Count, failed.Count); if (failed.Count > 0) { ProposalResponse firstTransactionProposalResponse = failed.First(); throw new ProposalException($"Not enough endorsers for invoke(move {from},{to},{moveAmount}):{firstTransactionProposalResponse.Status} endorser error:{firstTransactionProposalResponse.Message}. Was verified:{firstTransactionProposalResponse.IsVerified}"); } Util.COut("Successfully received transaction proposal responses."); //////////////////////////// // Send transaction to orderer Util.COut("Sending chaincode transaction(move %s,%s,%s) to orderer.", from, to, moveAmount); if (user != null) { return(channel.SendTransaction(successful, user, testConfig.GetTransactionWaitTime() * 1000)); } return(channel.SendTransaction(successful, testConfig.GetTransactionWaitTime() * 1000)); }
[Ignore] //Hostnames reported by service discovery won't work unless you edit hostfile public void Setup() { //Persistence is not part of SDK. Sample file store is for demonstration purposes only! // MUST be replaced with more robust application implementation (Database, LDAP) Util.COut("\n\n\nRUNNING: %s.\n", "ServiceDiscoveryIT"); SampleStore sampleStore = new SampleStore(sampleStoreFile); // SampleUser peerAdmin = sampleStore.getMember("admin", "peerOrg1"); SampleUser user1 = sampleStore.GetMember("user1", "peerOrg1"); HFClient client = HFClient.Create(); testConfig.GetIntegrationTestsSampleOrg("peerOrg1"); client.CryptoSuite = Factory.GetCryptoSuite(); client.UserContext = user1; Properties properties = testConfig.GetPeerProperties("peer0.org1.example.com"); string protocol = testConfig.IsRunningFabricTLS() ? "grpcs:" : "grpc:"; Properties sdprops = new Properties(); //Create initial discovery peer. Peer discoveryPeer = client.NewPeer("peer0.org1.example.com", protocol + "//localhost:7051", properties); Channel foo = client.NewChannel("foo"); //create channel that will be discovered. foo.AddPeer(discoveryPeer, PeerOptions.CreatePeerOptions().SetPeerRoles(PeerRole.SERVICE_DISCOVERY, PeerRole.LEDGER_QUERY, PeerRole.EVENT_SOURCE, PeerRole.CHAINCODE_QUERY)); // Need to provide client TLS certificate and key files when running mutual tls. if (testConfig.IsRunningFabricTLS()) { sdprops.Add("org.hyperledger.fabric.sdk.discovery.default.clientCertFile", "fixture/sdkintegration/e2e-2Orgs/v1.2/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/tls/client.crt".Locate()); sdprops.Add("org.hyperledger.fabric.sdk.discovery.default.clientKeyFile", "fixture/sdkintegration/e2e-2Orgs/v1.2/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/tls/client.key".Locate()); // Need to do host name override for true tls in testing environment sdprops.Add("org.hyperledger.fabric.sdk.discovery.endpoint.hostnameOverride.localhost:7050", "orderer.example.com"); sdprops.Add("org.hyperledger.fabric.sdk.discovery.endpoint.hostnameOverride.localhost:7051", "peer0.org1.example.com"); sdprops.Add("org.hyperledger.fabric.sdk.discovery.endpoint.hostnameOverride.localhost:7056", "peer1.org1.example.com"); } else { sdprops.Add("org.hyperledger.fabric.sdk.discovery.default.protocol", "grpc:"); } foo.ServiceDiscoveryProperties = sdprops; string channel = foo.Serialize(); // Next 3 lines are for testing purposes only! foo.Shutdown(false); foo = client.DeSerializeChannel(channel); foo.Initialize(); // initialize the channel. List <string> expect = new List <string>() { protocol + "//orderer.example.com:7050" }; //discovered orderer foreach (Orderer orderer in foo.Orderers) { expect.Remove(orderer.Url); } Assert.IsTrue(expect.Count == 0); List <string> discoveredChaincodeNames = foo.GetDiscoveredChaincodeNames(); Assert.IsTrue(discoveredChaincodeNames.Contains(CHAIN_CODE_NAME)); ChaincodeID chaincodeID = new ChaincodeID(); chaincodeID.Name = CHAIN_CODE_NAME; /////////////// // Send transaction proposal to all peers TransactionProposalRequest transactionProposalRequest = client.NewTransactionProposalRequest(); transactionProposalRequest.SetChaincodeID(chaincodeID); transactionProposalRequest.SetChaincodeLanguage(CHAIN_CODE_LANG); transactionProposalRequest.SetFcn("move"); transactionProposalRequest.SetProposalWaitTime(testConfig.GetProposalWaitTime()); transactionProposalRequest.SetArgs("a", "b", "1"); //Send proposal request discovering the what endorsers (peers) are needed. List <ProposalResponse> transactionPropResp = foo.SendTransactionProposalToEndorsers(transactionProposalRequest, DiscoveryOptions.CreateDiscoveryOptions().SetEndorsementSelector(ServiceDiscovery.ENDORSEMENT_SELECTION_RANDOM).SetForceDiscovery(true)); Assert.IsFalse(transactionPropResp.Count == 0); transactionProposalRequest = client.NewTransactionProposalRequest(); transactionProposalRequest.SetChaincodeID(chaincodeID); transactionProposalRequest.SetChaincodeLanguage(CHAIN_CODE_LANG); transactionProposalRequest.SetFcn("move"); transactionProposalRequest.SetProposalWaitTime(testConfig.GetProposalWaitTime()); transactionProposalRequest.SetArgs("a", "b", "1"); //Send proposal request discovering the what endorsers (peers) are needed. transactionPropResp = foo.SendTransactionProposalToEndorsers(transactionProposalRequest, DiscoveryOptions.CreateDiscoveryOptions().IgnoreEndpoints("blah.blah.blah.com:90", "blah.com:80", // aka peer0.org1.example.com our discovery peer. Lets ignore it in endorsers selection and see if other discovered peer endorses. "peer0.org1.example.com:7051") // if chaincode makes additional chaincode calls or uses collections you should add them with setServiceDiscoveryChaincodeInterests // .setServiceDiscoveryChaincodeInterests(Channel.ServiceDiscoveryChaincodeCalls.createServiceDiscoveryChaincodeCalls("someOtherChaincodeName").addCollections("collection1", "collection2")) ); Assert.AreEqual(transactionPropResp.Count, 1); ProposalResponse proposalResponse = transactionPropResp.First(); Peer peer = proposalResponse.Peer; Assert.AreEqual(protocol + "//peer1.org1.example.com:7056", peer.Url); // not our discovery peer but the discovered one. string expectedTransactionId = null; StringBuilder evenTransactionId = new StringBuilder(); foreach (ProposalResponse response in transactionPropResp) { expectedTransactionId = response.TransactionID; if (response.Status != ChaincodeResponse.ChaincodeResponseStatus.SUCCESS || !response.IsVerified) { Assert.Fail("Failed status bad endorsement"); } } //Send it to the orderer that was discovered. try { TransactionEvent transactionEvent = foo.SendTransaction(transactionPropResp); evenTransactionId.Length = 0; evenTransactionId.Append(transactionEvent.TransactionID); } catch (TransactionEventException e) { TransactionEvent te = e.TransactionEvent; if (te != null) { throw new System.Exception($"Transaction with txid {te.TransactionID} failed. {e.Message}"); } } catch (System.Exception e) { throw new System.Exception($"Test failed with {e.Message} exception {e}"); } Assert.AreEqual(expectedTransactionId, evenTransactionId.ToString()); Util.COut("That's all folks!"); }
// ReSharper disable once UnusedMember.Local public MockEndorserClient(ProposalResponse returned) : base("blahchannlname", "blahpeerName", new Endpoint("grpc://loclhost:99", null)) { throwThis = null; this.returned = returned; }
public MockEndorserClient(System.Exception throwThis) : base("blahchannlname", "blahpeerName", new Endpoint("grpc://loclhost:99", null)) { this.throwThis = throwThis ?? throw new ArgumentException("Can't throw a null!"); returned = null; }
private TransactionEvent MoveAmount(HFClient client, Channel channel, ChaincodeID chaincdeID, string moveAmount, IUser user) { try { List <ProposalResponse> successful = new List <ProposalResponse>(); List <ProposalResponse> failed = new List <ProposalResponse>(); /////////////// // Send transaction proposal to all peers TransactionProposalRequest transactionProposalRequest = client.NewTransactionProposalRequest(); transactionProposalRequest.ChaincodeID = chaincdeID; transactionProposalRequest.Fcn = "move"; transactionProposalRequest.SetArgs( //test using bytes .. end2end uses Strings. "a".ToBytes(), "b".ToBytes(), moveAmount.ToBytes()); transactionProposalRequest.ProposalWaitTime = testConfig.GetProposalWaitTime(); if (user != null) { // specific user use that transactionProposalRequest.UserContext = user; } Util.COut("sending transaction proposal to all peers with arguments: move(a,b,{0})", moveAmount); List <ProposalResponse> invokePropResp = channel.SendTransactionProposal(transactionProposalRequest); foreach (ProposalResponse response in invokePropResp) { if (response.Status == ChaincodeResponse.ChaincodeResponseStatus.SUCCESS) { Util.COut("Successful transaction proposal response Txid: {0} from peer {1}", response.TransactionID, response.Peer.Name); successful.Add(response); } else { failed.Add(response); } } Util.COut("Received {0} transaction proposal responses. Successful+verified: {1} . Failed: {2}", invokePropResp.Count, successful.Count, failed.Count); if (failed.Count > 0) { ProposalResponse firstTransactionProposalResponse = failed.First(); throw new ProposalException($"Not enough endorsers for invoke(move a,b,{moveAmount}):{firstTransactionProposalResponse.Status} endorser error:{firstTransactionProposalResponse.Message}. Was verified:{firstTransactionProposalResponse.IsVerified}x"); } Util.COut("Successfully received transaction proposal responses."); //////////////////////////// // Send transaction to orderer Util.COut("Sending chaincode transaction(move a,b,{0}) to orderer.", moveAmount); if (user != null) { return(channel.SendTransaction(successful, user, testConfig.GetTransactionWaitTime() * 1000)); } return(channel.SendTransaction(successful, testConfig.GetTransactionWaitTime() * 1000)); } catch (System.Exception) { throw new TaskCanceledException(); } }
// Disable MethodLength as this method is for instructional purposes and hence // we don't want to split it into smaller pieces // CHECKSTYLE:OFF: MethodLength private void RunChannel(HFClient client, Channel channel, SampleOrg sampleOrg, int delta) { string channelName = channel.Name; try { client.UserContext = sampleOrg.GetUser(TESTUSER_1_NAME); //This is for testing only and can be ignored. TestUtils.TestUtils.TestRemovingAddingPeersOrderers(client, channel); // final boolean changeContext = false; // BAR_CHANNEL_NAME.equals(channel.getName()) ? true : false; bool changeContext = BAR_CHANNEL_NAME.Equals(channel.Name); Util.COut("Running Channel {0} with a delta {1}", channelName, delta); Util.COut("ChaincodeID: {0}", chaincodeID); //////////////////////////// // Send Query Proposal to all peers see if it's what we expect from end of End2endIT // QueryChaincodeForExpectedValue(client, channel, "" + (300 + delta), chaincodeID); //Set user context on client but use explicit user contest on each call. if (changeContext) { client.UserContext = sampleOrg.GetUser(TESTUSER_1_NAME); } // exercise v1 of chaincode MoveAmount(client, channel, chaincodeID, "25", changeContext ? sampleOrg.PeerAdmin : null); WaitOnFabric(); client.UserContext = sampleOrg.GetUser(TESTUSER_1_NAME); QueryChaincodeForExpectedValue(client, channel, "" + (325 + delta), chaincodeID); ////////////////// // Start of upgrade first must install it. client.UserContext = sampleOrg.PeerAdmin; /////////////// //// InstallProposalRequest installProposalRequest = client.NewInstallProposalRequest(); installProposalRequest.ChaincodeID = chaincodeID; ////For GO language and serving just a single user, chaincodeSource is mostly likely the users GOPATH installProposalRequest.ChaincodeSourceLocation = Path.Combine(TEST_FIXTURES_PATH, CHAIN_CODE_FILEPATH).Locate(); installProposalRequest.ChaincodeVersion = CHAIN_CODE_VERSION_11; installProposalRequest.ProposalWaitTime = DEPLOYWAITTIME; installProposalRequest.ChaincodeLanguage = CHAIN_CODE_LANG; if (changeContext) { installProposalRequest.UserContext = sampleOrg.PeerAdmin; } Util.COut("Sending install proposal for channel: {0}", channel.Name); //////////////////////////// // only a client from the same org as the peer can issue an install request int numInstallProposal = 0; List <ProposalResponse> responses; List <ProposalResponse> successful = new List <ProposalResponse>(); List <ProposalResponse> failed = new List <ProposalResponse>(); IReadOnlyList <Peer> peersFromOrg = channel.Peers; numInstallProposal = numInstallProposal + peersFromOrg.Count; responses = client.SendInstallProposal(installProposalRequest, peersFromOrg); foreach (ProposalResponse response in responses) { if (response.Status == ChaincodeResponse.ChaincodeResponseStatus.SUCCESS) { Util.COut("Successful install proposal response Txid: {0} from peer {1}", response.TransactionID, response.Peer.Name); successful.Add(response); } else { failed.Add(response); } } Util.COut("Received {0} install proposal responses. Successful+verified: {1} . Failed: {2}", numInstallProposal, successful.Count, failed.Count); if (failed.Count > 0) { ProposalResponse first = failed.First(); Assert.Fail($"Not enough endorsers for install : {successful.Count}. {first.Message}"); } ////////////////// // Upgrade chaincode to ***double*** our move results. if (changeContext) { installProposalRequest.UserContext = sampleOrg.PeerAdmin; } UpgradeProposalRequest upgradeProposalRequest = client.NewUpgradeProposalRequest(); upgradeProposalRequest.ChaincodeID = chaincodeID_11; upgradeProposalRequest.ProposalWaitTime = testConfig.GetProposalWaitTime(); upgradeProposalRequest.Fcn = "init"; upgradeProposalRequest.Args = new List <string>(); // no arguments don't change the ledger see chaincode. ChaincodeEndorsementPolicy chaincodeEndorsementPolicy; chaincodeEndorsementPolicy = new ChaincodeEndorsementPolicy(); chaincodeEndorsementPolicy.FromYamlFile(Path.Combine(TEST_FIXTURES_PATH, "sdkintegration/chaincodeendorsementpolicy.yaml").Locate()); upgradeProposalRequest.ChaincodeEndorsementPolicy = chaincodeEndorsementPolicy; Dictionary <string, byte[]> tmap = new Dictionary <string, byte[]>(); tmap.Add("test", "data".ToBytes()); upgradeProposalRequest.SetTransientMap(tmap); if (changeContext) { upgradeProposalRequest.UserContext = sampleOrg.PeerAdmin; } Util.COut("Sending upgrade proposal"); List <ProposalResponse> responses2; responses2 = channel.SendUpgradeProposal(upgradeProposalRequest); successful.Clear(); failed.Clear(); foreach (ProposalResponse response in responses2) { if (response.Status == ChaincodeResponse.ChaincodeResponseStatus.SUCCESS) { Util.COut("Successful upgrade proposal response Txid: {0} from peer {1}", response.TransactionID, response.Peer.Name); successful.Add(response); } else { failed.Add(response); } } Util.COut("Received {0} upgrade proposal responses. Successful+verified: {1} . Failed: {2}", channel.Peers.Count, successful.Count, failed.Count); if (failed.Count > 0) { ProposalResponse first = failed.First(); Assert.Fail($"Not enough endorsers for upgrade : {successful.Count}. {first.Message}"); } if (changeContext) { channel.SendTransaction(successful, sampleOrg.PeerAdmin, testConfig.GetTransactionWaitTime() * 1000); } else { channel.SendTransaction(successful, testConfig.GetTransactionWaitTime() * 1000); } WaitOnFabric(10000); Util.COut("Chaincode has been upgraded to version {0}", CHAIN_CODE_VERSION_11); //Check to see if peers have new chaincode and old chaincode is gone. client.UserContext = sampleOrg.PeerAdmin; foreach (Peer peer in channel.Peers) { if (!CheckInstalledChaincode(client, peer, CHAIN_CODE_NAME, CHAIN_CODE_PATH, CHAIN_CODE_VERSION_11)) { Assert.Fail($"Peer {peer.Name} is missing chaincode name:{CHAIN_CODE_NAME}, path:{CHAIN_CODE_PATH}, version: {CHAIN_CODE_VERSION_11}"); } //should be instantiated too.. if (!CheckInstantiatedChaincode(channel, peer, CHAIN_CODE_NAME, CHAIN_CODE_PATH, CHAIN_CODE_VERSION_11)) { Assert.Fail($"Peer {peer.Name} is missing instantiated chaincode name:{CHAIN_CODE_NAME}, path:{CHAIN_CODE_PATH}, version: {CHAIN_CODE_VERSION_11}"); } if (CheckInstantiatedChaincode(channel, peer, CHAIN_CODE_NAME, CHAIN_CODE_PATH, CHAIN_CODE_VERSION)) { Assert.Fail($"Peer {peer.Name} is missing instantiated chaincode name:{CHAIN_CODE_NAME}, path:{CHAIN_CODE_PATH}, version: {CHAIN_CODE_VERSION}"); } } client.UserContext = sampleOrg.GetUser(TESTUSER_1_NAME); //Check if we still get the same value on the ledger Util.COut("delta is {0}", delta); QueryChaincodeForExpectedValue(client, channel, "" + (325 + delta), chaincodeID); MoveAmount(client, channel, chaincodeID_11, "50", changeContext ? sampleOrg.PeerAdmin : null); // really move 100 } catch (TransactionEventException t) { TransactionEvent te = t.TransactionEvent; if (te != null) { Assert.Fail($"Transaction with txid {te.TransactionID} failed. {t.Message}"); } } catch (System.Exception e) { Assert.Fail($"Test failed with {e.GetType().Name} exception {e.Message}"); } WaitOnFabric(10000); QueryChaincodeForExpectedValue(client, channel, "" + (425 + delta), chaincodeID_11); Util.COut("Running for Channel {0} done", channelName); }
// Disable MethodLength as this method is for instructional purposes and hence // we don't want to split it into smaller pieces // CHECKSTYLE:OFF: MethodLength private void RunChannel(HFClient client, Channel channel, SampleOrg sampleOrg, int delta) { string channelName = channel.Name; try { client.UserContext = sampleOrg.GetUser(TESTUSER_1_NAME); Util.COut("Running Channel %s with a delta %d", channelName, delta); Util.COut("ChaincodeID: ", chaincodeID); client.UserContext = sampleOrg.PeerAdmin; /////////////// //// InstallProposalRequest installProposalRequest = client.NewInstallProposalRequest(); installProposalRequest.SetChaincodeID(chaincodeID); ////For GO language and serving just a single user, chaincodeSource is mostly likely the users GOPATH installProposalRequest.SetChaincodeSourceLocation(Path.Combine(TEST_FIXTURES_PATH, CHAIN_CODE_FILEPATH).Locate()); installProposalRequest.SetChaincodeVersion(CHAIN_CODE_VERSION); installProposalRequest.SetProposalWaitTime(testConfig.GetProposalWaitTime()); installProposalRequest.SetChaincodeLanguage(CHAIN_CODE_LANG); Util.COut("Sending install proposal for channel: %s", channel.Name); //////////////////////////// // only a client from the same org as the peer can issue an install request int numInstallProposal = 0; List <ProposalResponse> responses; List <ProposalResponse> successful = new List <ProposalResponse>(); List <ProposalResponse> failed = new List <ProposalResponse>(); List <Peer> peersFromOrg = channel.Peers.ToList(); numInstallProposal = numInstallProposal + peersFromOrg.Count; responses = client.SendInstallProposal(installProposalRequest, peersFromOrg); foreach (ProposalResponse response in responses) { if (response.Status == ChaincodeResponse.ChaincodeResponseStatus.SUCCESS) { Util.COut("Successful install proposal response Txid: %s from peer %s", response.TransactionID, response.Peer.Name); successful.Add(response); } else { failed.Add(response); } } Util.COut("Received %d install proposal responses. Successful+verified: %d . Failed: %d", numInstallProposal, successful.Count, failed.Count); if (failed.Count > 0) { ProposalResponse first = failed.First(); Assert.Fail("Not enough endorsers for install :" + successful.Count + ". " + first.Message); } InstantiateProposalRequest instantiateProposalRequest = client.NewInstantiationProposalRequest(); instantiateProposalRequest.SetChaincodeID(chaincodeID); instantiateProposalRequest.SetProposalWaitTime(DEPLOYWAITTIME); instantiateProposalRequest.SetFcn("init"); instantiateProposalRequest.SetArgs(new string[] { }); instantiateProposalRequest.SetChaincodeCollectionConfiguration(ChaincodeCollectionConfiguration.FromYamlFile("fixture/collectionProperties/PrivateDataIT.yaml".Locate())); Util.COut("Sending instantiate proposal"); List <ProposalResponse> responses2; responses2 = channel.SendInstantiationProposal(instantiateProposalRequest); successful.Clear(); failed.Clear(); foreach (ProposalResponse response in responses2) { if (response.Status == ChaincodeResponse.ChaincodeResponseStatus.SUCCESS) { Util.COut("Successful upgrade proposal response Txid: %s from peer %s", response.TransactionID, response.Peer.Name); successful.Add(response); } else { failed.Add(response); } } Util.COut("Received %d upgrade proposal responses. Successful+verified: %d . Failed: %d", channel.Peers.Count, successful.Count, failed.Count); if (failed.Count > 0) { ProposalResponse first = failed.First(); Assert.Fail("Not enough endorsers for upgrade :" + successful.Count + ". " + first.Message); } Util.COut("Sending instantiate proposal to orderer."); channel.SendTransaction(successful, sampleOrg.PeerAdmin); Util.COut("instantiate proposal completed."); //Now lets run the new chaincode which should *double* the results we asked to move. // return setAmount(client, channel, chaincodeID, "50", null).get(testConfig.getTransactionWaitTime(), TimeUnit.SECONDS); SetAmount(client, channel, chaincodeID, 50, null); Util.COut("Got back acknowledgement from setAmount from all peers."); WaitOnFabric(10000); Util.COut("delta is %s", delta); QueryChaincodeForExpectedValue(client, channel, "" + 250, chaincodeID); //Now lets run the new chaincode which should *double* the results we asked to move. MoveAmount(client, channel, chaincodeID, "50", null); } catch (TransactionEventException e) { TransactionEvent te = e.TransactionEvent; Assert.Fail($"Transaction with txid %s failed. %s", te.TransactionID, e.Message); } catch (System.Exception e) { Assert.Fail($"Test failed with {e.Message} exception {e}"); } QueryChaincodeForExpectedValue(client, channel, "" + 300, chaincodeID); Util.COut("Running for Channel %s done", channelName); }
// ReSharper disable once UnusedMethodReturnValue.Local private TransactionEvent MoveAmount(HFClient client, Channel channel, ChaincodeID chaincdeID, string moveAmount, IUser user) { List <ProposalResponse> successful = new List <ProposalResponse>(); List <ProposalResponse> failed = new List <ProposalResponse>(); /////////////// // Send transaction proposal to all peers TransactionProposalRequest transactionProposalRequest = client.NewTransactionProposalRequest(); transactionProposalRequest.SetChaincodeID(chaincdeID); transactionProposalRequest.SetFcn("move"); // Private data needs to be sent via Transient field to prevent identifiable //information being sent to the orderer. Dictionary <string, byte[]> transientMap = new Dictionary <string, byte[]>(); transientMap["A"] = "a".ToBytes(); //test using bytes .. end2end uses Strings. transientMap["B"] = "b".ToBytes(); transientMap["moveAmount"] = moveAmount.ToBytes(); transactionProposalRequest.TransientMap = transientMap; transactionProposalRequest.SetProposalWaitTime(testConfig.GetProposalWaitTime()); if (user != null) { // specific user use that transactionProposalRequest.SetUserContext(user); } Util.COut("sending transaction proposal to all peers with arguments: move(a,b,%s)", moveAmount); List <ProposalResponse> invokePropResp = channel.SendTransactionProposal(transactionProposalRequest); foreach (ProposalResponse response in invokePropResp) { if (response.Status == ChaincodeResponse.ChaincodeResponseStatus.SUCCESS) { Util.COut("Successful transaction proposal response Txid: %s from peer %s", response.TransactionID, response.Peer.Name); successful.Add(response); } else { failed.Add(response); } } Util.COut("Received %d transaction proposal responses for moveAmount. Successful+verified: %d . Failed: %d", invokePropResp.Count, successful.Count, failed.Count); if (failed.Count > 0) { ProposalResponse firstTransactionProposalResponse = failed.First(); throw new ProposalException($"Not enough endorsers for invoke(move a,b,{moveAmount}):{firstTransactionProposalResponse.Status} endorser error:{firstTransactionProposalResponse.Message}. Was verified:{firstTransactionProposalResponse.IsVerified}"); } Util.COut("Successfully received transaction proposal responses."); //////////////////////////// // Send transaction to orderer Util.COut("Sending chaincode transaction(move a,b,%s) to orderer.", moveAmount); if (user != null) { return(channel.SendTransaction(successful, user)); } return(channel.SendTransaction(successful)); }
// ReSharper disable once UnusedMethodReturnValue.Local private TransactionEvent SetAmount(HFClient client, Channel channel, ChaincodeID chaincdeID, int delta, IUser user) { List <ProposalResponse> successful = new List <ProposalResponse>(); List <ProposalResponse> failed = new List <ProposalResponse>(); /////////////// // Send transaction proposal to all peers TransactionProposalRequest transactionProposalRequest = client.NewTransactionProposalRequest(); transactionProposalRequest.SetChaincodeID(chaincdeID); transactionProposalRequest.SetFcn("set"); Dictionary <string, byte[]> transientMap = new Dictionary <string, byte[]>(); transientMap["A"] = "a".ToBytes(); // test using bytes as args. End2end uses Strings. transientMap["AVal"] = "500".ToBytes(); transientMap["B"] = "b".ToBytes(); string arg3 = "" + (200 + delta); transientMap["BVal"] = arg3.ToBytes(); transactionProposalRequest.TransientMap = transientMap; transactionProposalRequest.SetProposalWaitTime(testConfig.GetProposalWaitTime()); if (user != null) { // specific user use that transactionProposalRequest.SetUserContext(user); } List <ProposalResponse> invokePropResp = channel.SendTransactionProposal(transactionProposalRequest); foreach (ProposalResponse response in invokePropResp) { if (response.Status == ChaincodeResponse.ChaincodeResponseStatus.SUCCESS) { Util.COut("Successful transaction proposal response Txid: %s from peer %s", response.TransactionID, response.Peer.Name); successful.Add(response); } else { failed.Add(response); } } Util.COut("Received %d transaction proposal responses for setAmount. Successful+verified: %d . Failed: %d", invokePropResp.Count, successful.Count, failed.Count); if (failed.Count > 0) { ProposalResponse firstTransactionProposalResponse = failed.First(); throw new ProposalException($"Not enough endorsers for set(move a,b,{0}):{firstTransactionProposalResponse.Status} endorser error:{firstTransactionProposalResponse.Message}. Was verified:{firstTransactionProposalResponse.IsVerified}"); } Util.COut("Successfully received transaction proposal responses for setAmount. Now sending to orderer."); //////////////////////////// // Send transaction to orderer if (user != null) { return(channel.SendTransaction(successful, user)); } return(channel.SendTransaction(successful)); }