<%@ page class="AdminNodeServerTestPage" %> <%@ page form="true" %> <%@ page compressed="true" %> <%@ page baseClass="PageRequestMessagedHandler" %> <%@ header include="PageRequestMessagedHandler.h" %> <%! #include "../controller/NodeServer.h" #include "../controller/User.h" #include "../controller/HederaTopic.h" #include "../lib/DataTypeConverter.h" #include "../lib/Profiler.h" #include "../lib/JsonRPCRequest.h" #include "../model/gradido/Transaction.h" #include "Poco/Thread.h" #include "Poco/DateTime.h" #include "Poco/JSON/Stringifier.h" enum PageType { PAGE_CHOOSE_TEST, PAGE_RUN_4_SET_TEST, PAGE_GET_TRANSACTION_RPC_CALL }; %> <%% const char* pageName = "Node Server Test"; PageType page = PAGE_CHOOSE_TEST; Poco::AutoPtr node_server; Poco::AutoPtr user; Poco::AutoPtr hedera_topic; int hedera_timeout = 9; bool steps[6]; memset(steps, 1, 6 * sizeof(bool)); if(!form.empty()) { auto node_server_id_string = form.get("test-node-servers", ""); if(node_server_id_string != "") { int node_server_id = 0; if(DataTypeConverter::NUMBER_PARSE_OKAY == DataTypeConverter::strToInt(node_server_id_string, node_server_id )) { node_server = controller::NodeServer::load(node_server_id); } } auto topic_id_string = form.get("test-hedera-topic", ""); if(topic_id_string != "") { int topic_id = 0; if(DataTypeConverter::NUMBER_PARSE_OKAY == DataTypeConverter::strToInt(topic_id_string, topic_id)) { hedera_topic = controller::HederaTopic::load(topic_id); } } auto test_timeout_string = form.get("test-timeout", ""); if(test_timeout_string != "") { DataTypeConverter::strToInt(test_timeout_string, hedera_timeout); } auto submit = form.get("submit", ""); if(submit == "Run 4-Test") { page = PAGE_RUN_4_SET_TEST; } else if(submit == "json-rpc getTransactions") { page = PAGE_GET_TRANSACTION_RPC_CALL; } std::string step_temp; for(int i = 0; i < 6; i++) { std::string name = "step-"; name += std::to_string(i+2); step_temp = form.get(name, ""); if(step_temp == "1") { steps[i] = true; } else { steps[i] = false; } } } auto node_servers = controller::NodeServer::load(model::table::NODE_SERVER_GRADIDO_NODE); auto hedera_topics = controller::HederaTopic::listAll(); %><%@ include file="header_large.cpsp" %> <%= getErrorsHtml() %>
style="display:block" <% } %>>

Test 4-Set (2 AddMember, Creation, Transfer)

1. Create two new accounts and show user public keys for comparisation

checked="checked" <% } %> name="step-2" value="1"/> 2. Send a add-member transaction to hedera topic with one signature (first user)

checked="checked" <% } %> name="step-3" value="1"/> 3. Send a add-member transaction to hedera topic with two signatures (first user and second user)

checked="checked" <% } %> name="step-4" value="1"/> 4. Send a creation transaction to second user, signed by first user

checked="checked" <% } %> name="step-5" value="1"/> 5. Send a transfer transaction from second user to first user signed by second user

checked="checked" <% } %> name="step-6" value="1"/> 6. Wait x seconds to give hedera time to process transactions

checked="checked" <% } %> name="step-7" value="1"/> 7. Ask choosen node for transaction and print result

<% if(node_servers.size() == 0) { %> Edit Node-Servers <% } %> <% if(hedera_topics.size() == 0) { %> Edit Hedera-Topics <% } %> seconds
style="display:block" <% } %>>

Test 4-Set (2 AddMember, Creation, Transfer)

<% if(node_servers.size() == 0) { %> Edit Node-Servers <% } %>
<% if(PAGE_RUN_4_SET_TEST == page && !hedera_topic.isNull() && !node_server.isNull()) { %>
  • 1. Create two new accounts and show user public keys for comparisation:

    <% Profiler time2; auto group_id = hedera_topic->getModel()->getGroupId(); auto user_group = controller::Group::load(group_id); auto mnemonic_type = ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER; std::string password1 = "hsaj(2askaslASlllak3wjjeudsaj"; auto user_1 = controller::User::create("testEmail@google.de", "Max", "Mustermann", group_id); auto passphrase_1 = Passphrase::generate(&ServerConfig::g_Mnemonic_WordLists[mnemonic_type]); auto gradido_key_pair_1 = KeyPairEd25519::create(passphrase_1); user_1->setGradidoKeyPair(gradido_key_pair_1); user_1->login(password1); std::string password2 = "uweia8saiSale,dsasA"; auto user_2 = controller::User::create("testEmail2@google.de", "MJax", "Mustrermann", group_id); auto passphrase_2 = Passphrase::generate(&ServerConfig::g_Mnemonic_WordLists[mnemonic_type]); auto gradido_key_pair_2 = KeyPairEd25519::create(passphrase_2); user_2->setGradidoKeyPair(gradido_key_pair_2); user_2->login(password2); %>

    User 1: <%= user_1->getPublicHex() %>

    User 2: <%= user_2->getPublicHex() %>

    Time: <%= time2.string() %>

  • 2. Send a add-member transaction to hedera topic with one signature (first user)

    <% time2.reset(); if(!steps[0]) { %>

    skipped

    <% } else { auto transaction1 = model::gradido::Transaction::createGroupMemberUpdate(user_1, user_group); transaction1->getTransactionBody()->getGroupMemberUpdate()->setMinSignatureCount(1); transaction1->sign(user_1); auto transaction1_json = transaction1->getTransactionAsJson(true); %>

    <%= DataTypeConverter::replaceNewLineWithBr(transaction1_json) %>

    <% } %>

    Time: <%= time2.string() %>

  • 3. Send a add-member transaction to hedera topic with two signatures (first user and second user)

    <% time2.reset(); if(!steps[1]) { %>

    skipped

    <% } else { auto transaction2 = model::gradido::Transaction::createGroupMemberUpdate(user_2, user_group); transaction2->getTransactionBody()->getGroupMemberUpdate()->setMinSignatureCount(2); transaction2->sign(user_2); transaction2->sign(user_1); auto transaction2_json = transaction2->getTransactionAsJson(true); %>

    <%= DataTypeConverter::replaceNewLineWithBr(transaction2_json) %>

    <% } %>

    Time: <%= time2.string() %>

  • 4. Send a creation transaction to second user, signed by first user

    <% time2.reset(); if(!steps[2]) { %>

    skipped

    <% } else { auto transaction3 = model::gradido::Transaction::createCreation(user_2, 10000000, Poco::DateTime(), "Test Creation"); transaction3->sign(user_1); auto transaction3_json = transaction3->getTransactionAsJson(true); %>

    <%= DataTypeConverter::replaceNewLineWithBr(transaction3_json) %>

    <% } %>

    Time: <%= time2.string() %>

  • 5. Send a transfer transaction from second user to first user signed by second user

    <% time2.reset(); if(!steps[3]) { %>

    skipped

    <% } else { auto user_1_pubkey = user_1->getModel()->getPublicKeyCopy(); auto transaction4 = model::gradido::Transaction::createTransfer(user_2, user_1_pubkey, user_group, 5000000, "Test Transfer"); auto transaction4_json = transaction4[0]->getTransactionAsJson(true); %>

    <%= DataTypeConverter::replaceNewLineWithBr(transaction4_json) %>

    <% } %>

    Time: <%= time2.string() %>

  • 6. Wait <%= hedera_timeout %> seconds to give hedera time to process transactions

    <% if(!steps[4]) { %>

    skipped

    <% } else { Poco::Thread::sleep(hedera_timeout * 1000); } %>
  • 7. Ask choosen node for transaction and print result

    <% time2.reset(); if(!steps[5] || node_server.isNull()) { %>

    skipped

    <% } else { auto node_server_model = node_server->getModel(); JsonRPCRequest jsonrpc(node_server_model->getUrl(), node_server_model->getPort()); Poco::JSON::Object params; params.set("groupAlias", user_group->getModel()->getAlias()); params.set("lastKnownSequenceNumber", 0); auto gn_answear = jsonrpc.request("getTransactions", params); if(!gn_answear.isNull()) { std::stringstream ss; Poco::JSON::Stringifier::stringify(gn_answear, ss, 4, -1, Poco::JSON_PRESERVE_KEY_ORDER); %> <%= DataTypeConverter::replaceNewLineWithBr(ss.str()) %><% } } %>

    Time: <%= time2.string() %>

<% } else if(PAGE_GET_TRANSACTION_RPC_CALL == page && !node_server.isNull()) { Profiler time3; auto node_server_model = node_server->getModel(); auto user_group = controller::Group::load(node_server_model->getGroupId()); JsonRPCRequest jsonrpc(node_server_model->getUrl(), node_server_model->getPort()); Poco::JSON::Object params; params.set("groupAlias", user_group->getModel()->getAlias()); params.set("lastKnownSequenceNumber", 0); auto gn_answear = jsonrpc.request("getTransactions", params); if(!gn_answear.isNull()) { std::stringstream ss; Poco::JSON::Stringifier::stringify(gn_answear, ss, 4, -1, Poco::JSON_PRESERVE_KEY_ORDER); //printf("result: %s\n", ss.str().data());%> <%= DataTypeConverter::replaceNewLineWithBr(ss.str()) %><% } %>

Time: <%= time3.string() %>

<% } %>
<%@ include file="footer.cpsp" %>