RTBKit  0.9
Open-source framework to create real-time ad bidding systems.
soa/service/testing/service_proxies_test.cc
00001 #define BOOST_TEST_MAIN
00002 #define BOOST_TEST_DYN_LINK
00003 
00004 #include <string>
00005 
00006 #include <boost/test/unit_test.hpp>
00007 #include <boost/make_shared.hpp>
00008 #include <boost/thread/thread.hpp>
00009 
00010 #include <jml/utils/set_utils.h>
00011 
00012 #include "soa/service/service_base.h"
00013 #include "soa/service/rest_service_endpoint.h"
00014 #include "soa/service/testing/zookeeper_temporary_server.h"
00015 
00016 using namespace std;
00017 using namespace ML;
00018 
00019 using namespace Datacratic;
00020 
00021 struct MockRestService : public ServiceBase,
00022                          public RestServiceEndpoint
00023 {
00024     MockRestService(std::shared_ptr<ServiceProxies> proxies,
00025                     const string & serviceName)
00026         : ServiceBase(serviceName, proxies),
00027           RestServiceEndpoint(proxies->zmqContext)
00028     {}
00029 
00030     ~MockRestService()
00031     {
00032         unregisterServiceProvider(serviceName(), classes_);
00033     }
00034 
00035     void init(const vector<string> & classes)
00036     {
00037         classes_ = classes;
00038         registerServiceProvider(serviceName(), classes);
00039         getServices()->config->removePath(serviceName());
00040         RestServiceEndpoint::init(getServices()->config, serviceName());
00041     }
00042 
00043     vector<string> classes_;
00044 };
00045 
00046 BOOST_AUTO_TEST_CASE( test_service_proxies_getServiceClassInstances )
00047 {
00048     ZooKeeper::TemporaryServer server;
00049     server.start();
00050 
00051     auto proxies = std::make_shared<ServiceProxies>();
00052     proxies->useZookeeper(ML::format("localhost:%d", server.getPort()));
00053 
00054     set<string> expectedUris;
00055 
00056     MockRestService testService1(proxies, "testServiceName1");
00057     testService1.init({"testServiceClass", "otherServiceClass"});
00058     testService1.bindTcp();
00059     vector<string> uris(testService1.zmqEndpoint.getPublishedUris());
00060     expectedUris.insert(uris.begin(), uris.end());
00061     uris = testService1.httpEndpoint.getPublishedUris();
00062     expectedUris.insert(uris.begin(), uris.end());
00063 
00064     MockRestService testService2(proxies, "testServiceName2");
00065     testService2.init({"testServiceClass"});
00066     testService2.bindTcp();
00067     uris = testService2.zmqEndpoint.getPublishedUris();
00068     expectedUris.insert(uris.begin(), uris.end());
00069     uris = testService2.httpEndpoint.getPublishedUris();
00070     expectedUris.insert(uris.begin(), uris.end());
00071     
00072     set<string> instanceUris;
00073     uris = proxies->getServiceClassInstances("testServiceClass", "http");
00074     instanceUris.insert(uris.begin(), uris.end());
00075     uris = proxies->getServiceClassInstances("testServiceClass", "zeromq");
00076     instanceUris.insert(uris.begin(), uris.end());
00077 
00078     BOOST_CHECK_EQUAL(instanceUris, expectedUris);
00079 }
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator