diff --git a/test/libwhisper/shhrpc.cpp b/test/libwhisper/shhrpc.cpp new file mode 100644 index 000000000..850ae3302 --- /dev/null +++ b/test/libwhisper/shhrpc.cpp @@ -0,0 +1,105 @@ +/* + This file is part of cpp-ethereum. + + cpp-ethereum is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + cpp-ethereum is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with cpp-ethereum. If not, see . +*/ +/** @file shhrpc.cpp +* @author Vladislav Gluhovsky +* @date July 2015 +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace dev; +using namespace dev::eth; +using namespace dev::p2p; +namespace js = json_spirit; + +WebThreeDirect* web3; +unique_ptr jsonrpcServer; +unique_ptr jsonrpcClient; + +string fromAscii(string _s) { return toHex(asBytes(_s), 2, HexPrefix::Add); } + +struct Setup +{ + Setup() + { + static bool setup = false; + if (!setup) + { + setup = true; + NetworkPreferences nprefs(std::string(), 30333, false); + web3 = new WebThreeDirect("++eth tests", "", WithExisting::Trust, {"eth", "shh"}, nprefs); + web3->setIdealPeerCount(1); + web3->ethereum()->setForceMining(false); + auto server = new jsonrpc::HttpServer(8080); + vector v; + KeyManager keyMan; + TrivialGasPricer gp; + jsonrpcServer = unique_ptr(new WebThreeStubServer(*server, *web3, nullptr, v, keyMan, gp)); + jsonrpcServer->setIdentities({}); + jsonrpcServer->StartListening(); + auto client = new jsonrpc::HttpClient("http://localhost:8080"); + jsonrpcClient = unique_ptr(new WebThreeStubClient(*client)); + } + } +}; + +BOOST_FIXTURE_TEST_SUITE(shhrpc, Setup) + +BOOST_AUTO_TEST_CASE(first) +{ + cnote << "Testing shh rpc..."; + + web3->startNetwork(); + unsigned const step = 10; + for (unsigned i = 0; i < 3000 && !web3->haveNetwork(); i += step) + this_thread::sleep_for(chrono::milliseconds(step)); + + BOOST_REQUIRE(web3->haveNetwork()); + + uint16_t const port2 = 30334; + NetworkPreferences prefs("127.0.0.1", port2, false); + Host host2("Test", prefs); + host2.start(); + + for (unsigned i = 0; i < 3000 && !host2.haveNetwork(); i += step) + this_thread::sleep_for(chrono::milliseconds(step)); + + BOOST_REQUIRE(host2.haveNetwork()); + + web3->requirePeer(host2.id(), NodeIPEndpoint(bi::address::from_string("127.0.0.1"), port2, port2)); + + for (unsigned i = 0; i < 4000 && (!web3->peerCount() || !host2.peerCount()); i += step) + this_thread::sleep_for(chrono::milliseconds(step)); + + BOOST_REQUIRE(web3->peerCount()); + BOOST_REQUIRE(host2.peerCount()); +} + +BOOST_AUTO_TEST_SUITE_END()