// This file is under GNU General Public License 3.0 // see LICENSE.txt #include "framework/framework.hh" #include //#include #include "../src/Adapter.hh" #include "../src/utils.hh" #include "../src/std_utils.hh" #include "../src/grp_manager_interface.hh" #include "../src/grp_driver_engine.hh" #include "../src/grp_driver_dummy.hh" #include "../src/grp_driver_replicator.hh" //#include "../src/adapter_group.h" #include "../src/status_to_string.hh" #include #include using namespace std; using namespace pEp; using namespace pEp::Adapter; using namespace pEp::Adapter::pEpLog; bool debug_info_full = true; // Model const string lmd_path = "test.db"; ::pEp_identity* alice = nullptr; ::pEp_identity* bob = nullptr; ::pEp_identity* carol = nullptr; ::pEp_identity* grp_ident = nullptr; ::PEP_STATUS status; string dummy_in; GroupUpdateInterface* gu = nullptr; GroupQueryInterface* gq = nullptr; /* * Callbacks */ ::PEP_STATUS test_messageToSend(::message* _msg) { log("called"); log(Test::make_pEp_msg(Test::make_message(_msg))); return PEP_STATUS_OK; } ::PEP_STATUS test_notifyHandshake(::pEp_identity* _me, ::pEp_identity* _partner, sync_handshake_signal signal) { log("called"); log("me: " + pEp::Utils::to_string(_me, false)); log("partner: " + pEp::Utils::to_string(_partner, false)); log("Signal: " + to_string(signal)); // log("Signal: " + string{ ::sync_handshake_signal_to_string(signal) }); return PEP_STATUS_OK; } /* * Test Units */ void test_create_alice_me() { logH2("test_create_alice_me"); alice = ::new_identity("alice@peptest.ch", NULL, "23", "Alice"); assert(alice); alice->lang[0] = 'e'; alice->lang[1] = 'n'; status = ::myself(Adapter::session(), alice); log("STATUS: " + status_to_string(status)); assert(!status); log("Alice:" + pEp::Utils::to_string(alice, debug_info_full)); } void test_create_bob_partner() { logH2("test_create_bob_partner"); bob = ::new_identity("bob@peptest.ch", NULL, PEP_OWN_USERID, "Bob"); assert(bob); // bob->lang[0] = 'c'; // bob->lang[1] = 'r'; // status = ::myself(Adapter::session(), bob); status = ::update_identity(Adapter::session(), bob); log("STATUS: " + status_to_string(status)); assert(!status); log("Bob:" + pEp::Utils::to_string(bob, debug_info_full)); } void test_create_carol_partner() { logH2("test_create_carol_partner"); carol = ::new_identity("carol@peptest.ch", NULL, PEP_OWN_USERID, "Carol"); assert(carol); carol->lang[0] = 'f'; carol->lang[1] = 'n'; status = ::update_identity(Adapter::session(), carol); // status = ::myself(Adapter::session(), carol); log("STATUS: " + status_to_string(status)); assert(!status); log("Carol:" + pEp::Utils::to_string(carol, debug_info_full)); } void test_setup_and_start_sync() { logH2("test_setup_and_start_sync"); Adapter::start_sync(); } void test_group_create() { logH2("test_group_create"); ::identity_list* initial_memberlist = nullptr; initial_memberlist = new_identity_list(bob); ::identity_list_add(initial_memberlist, carol); log("create group identity"); grp_ident = ::new_identity("group1@peptest.ch", NULL, "432", "group1"); assert(grp_ident); log("grp_ident:" + pEp::Utils::to_string(grp_ident, debug_info_full)); // PEP_STATUS stat = ::myself(Adapter::session(), grp_ident); // log("STATUS: " + status_to_string(status)); // assert(stat == PEP_STATUS_OK); // log("grp_ident:" + pEp::Utils::to_string(grp_ident, debug_info_full)); log("adapter_group_create()"); status = gu->adapter_group_create(Adapter::session(), grp_ident, alice, nullptr); log("STATUS: " + status_to_string(status)); assert(!status); } void test_group_invite_member(::pEp_identity& ident) { logH2("test_group_invite_member"); assert(grp_ident); status = gu->adapter_group_invite_member(Adapter::session(), grp_ident, &ident); log("STATUS: " + status_to_string(status)); assert(!status); } void test_group_remove_member(::pEp_identity& ident) { logH2("test_group_remove_member"); status = gu->adapter_group_remove_member(Adapter::session(), grp_ident, &ident); log("STATUS: " + status_to_string(status)); assert(!status); } void test_group_dissolve() { logH2("test_group_dissolve"); status = gu->adapter_group_dissolve(Adapter::session(), grp_ident, alice); log("STATUS: " + status_to_string(status)); assert(!status); } /* * Update functions * ---------------- * Test procedure: * 1. Create group * - group_create(Alice) * 2. Add Bob * - group_invite_member(Bob) // * - group_join(Bob) * 3. Add Carol * - group_invite_member(Carol) // * - group_join(Carol) * 4. Remove Carol * - group_remove_member(Carol) // * 5. Rating // * - group_rating() (Just test once, to see it is generally working) * 6. Dissolve * - group_dissolve() * * Query functions * --------------- * Always test all the query functions for correctness between every step above. * group_query_groups() * group_query_manager() * group_query_members */ int main(int argc, char** argv) { Test::setup(argc, argv); Adapter::pEpLog::set_enabled(false); debug_info_full = true; // pEpSQLite::log_enabled = true; // ListManagerDummy::log_enabled = true; GroupDriverDummy::log_enabled = true; GroupDriverEngine::log_enabled = true; GroupDriverReplicator::log_enabled = true; GroupDriverDummy gdd{ lmd_path }; GroupDriverEngine gde{}; GroupDriverReplicator gdr{}; gu = &gde; gq = nullptr; // gu = &gdd; // gq = &gdd; // gu = &gdr; // gq = &gdr; Adapter::session.initialize(); // Setup Test Context test_create_alice_me(); test_create_bob_partner(); test_create_carol_partner(); test_setup_and_start_sync(); logH1("1. Create group"); test_group_create(); logH1("2. Add Bob"); test_group_invite_member(*bob); // Fails logH1("3. Add Carol"); test_group_invite_member(*carol); logH1("4. Remove Carol"); test_group_remove_member(*carol); if (gq != nullptr) { ::pEp_identity* grp_ident = ::new_identity("group1@peptest.ch", NULL, "432", "group1"); ::pEp_identity* manager = nullptr; PEP_STATUS stat = gq->group_query_manager(Adapter::session(), grp_ident, &manager); log(status_to_string(stat)); log(::Utils::to_string(manager)); } logH1("6. Dissolve"); test_group_dissolve(); Adapter::stop_sync(); return 0; }