From 7dccc4fc1adf4949c75ab5862392033938afe94c Mon Sep 17 00:00:00 2001 From: sala Date: Mon, 24 Mar 2014 16:20:41 +0000 Subject: [PATCH] enabled tests code cleaned added exceptions git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@801 951219d9-93cf-4727-9268-0efd64621fa3 --- slsDetectorSoftware/slsReceiver/RestHelper.h | 91 ++++++++----------- .../slsReceiver/eigerReceiver.cpp | 28 +++++- 2 files changed, 60 insertions(+), 59 deletions(-) diff --git a/slsDetectorSoftware/slsReceiver/RestHelper.h b/slsDetectorSoftware/slsReceiver/RestHelper.h index 2df557cb7..9f9804cfb 100644 --- a/slsDetectorSoftware/slsReceiver/RestHelper.h +++ b/slsDetectorSoftware/slsReceiver/RestHelper.h @@ -16,7 +16,7 @@ // HTTP timeout in seconds, default is 8 #define HTTP_TIMEOUT 10 // Number of connection tries -#define N_CONNECTION_TRIES 0 +#define N_CONNECTION_TRIES 3 using namespace Poco::Net; using namespace Poco; @@ -25,91 +25,72 @@ using namespace std; class RestHelper { public: + ~RestHelper(){}; + void init(string hostname, int port){ /* */ full_hostname = "http://"+hostname; - cout << full_hostname << endl; session = new HTTPClientSession(hostname,port ); session->setKeepAliveTimeout( Timespan( HTTP_TIMEOUT,0) ); }; int get_json(string request, string* answer){ - //TODO: implement a timeout and max_retries + /* - uri = new URI(full_hostname+"/"+request); - string path(uri->getPathAndQuery()); - if (path.empty()) path = "/"; - - // send request - //HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); - req = new HTTPRequest(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); + */ - try { - session->sendRequest(*req); - } - catch (exception& e){ - cout << "Exception:"<< e.what() << '\n'; - } - - int code = send_request(session, req); - - // get response - //if (code!=0){ - HTTPResponse res; - cout << res.getStatus() << " " << res.getReason() << endl; - istream &is = session->receiveResponse(res); - StreamCopier::copyToString(is, *answer); - - return res.getStatus(); - //} - //else - //return code; - }; - - int get_json(string request, JsonBox::Value* json_value){ - //TODO: implement a timeout and max_retries - uri = new URI(full_hostname+"/"+request); string path(uri->getPathAndQuery()); if (path.empty()) path = "/"; // send request HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); - session->sendRequest(req); - - // get response - HTTPResponse res; - //cout << res.getStatus() << " " << res.getReason() << endl; - string answer; - istream &is = session->receiveResponse(res); - StreamCopier::copyToString(is, answer); - - cout << answer << endl; - //returning a Json struct - json_value->loadFromString(answer); - - return res.getStatus(); + int code = send_request(session, req, answer); + return code; }; + int get_json(string request, JsonBox::Value* json_value){ + /* + + */ + + uri = new URI(full_hostname+"/"+request); + string path(uri->getPathAndQuery()); + if (path.empty()) path = "/"; + // send request + HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); + string answer; + int code = send_request(session, req, &answer); + json_value->loadFromString(answer); + return code; + }; + + private: URI * uri; HTTPClientSession *session; - HTTPRequest *req; - string full_hostname; - int send_request(HTTPClientSession *session, HTTPRequest *req){ + int send_request(HTTPClientSession *session, HTTPRequest &req, string *answer){ int n=0; int code = -1; while(nsendRequest( (*req) ); - code = 0; + session->sendRequest( (req) ); + HTTPResponse res; + istream &is = session->receiveResponse(res); + StreamCopier::copyToString(is, *answer); + code = res.getStatus(); + if (code != 200){ + cout << "HTTP ERROR " << res.getStatus() << ": " << res.getReason() << endl; + code = -1; + } + return code; } catch (exception& e){ - cout << "Exception:"<< e.what() << ", sleeping " << HTTP_TIMEOUT << " seconds\n"; + cout << "Exception connecting to "<< full_hostname << ": "<< e.what() << ", sleeping " << HTTP_TIMEOUT << " seconds\n"; sleep(HTTP_TIMEOUT); } n+=1; diff --git a/slsDetectorSoftware/slsReceiver/eigerReceiver.cpp b/slsDetectorSoftware/slsReceiver/eigerReceiver.cpp index 9bc25ae25..b05980a23 100644 --- a/slsDetectorSoftware/slsReceiver/eigerReceiver.cpp +++ b/slsDetectorSoftware/slsReceiver/eigerReceiver.cpp @@ -72,12 +72,32 @@ public: RestHelper rest ; rest.init("localhost",8080); std::string answer; + std::cout << "---- REST test 1: true, string "<< std::endl; int code = rest.get_json("status", &answer); std::cout << "Answer: " << answer << std::endl; - - //JsonBox::Value json_value; - //code = rest.get_json("status", &json_value); - //std::cout << "JSON " << json_value["status"] << std::endl; + + std::cout << "---- REST test 2: 404, string "<< std::endl; + code = rest.get_json("statuss", &answer); + if (code != 0){ + //throw -1; + std::cout << "I SHOULD THROW AN EXCEPTION!!!" << std::endl; + } + + std::cout << "---- REST test 3: true, json object "<< std::endl; + JsonBox::Value json_value; + code = rest.get_json("status", &json_value); + std::cout << "JSON " << json_value["status"] << std::endl; + + + RestHelper rest2 ; + rest2.init("reallyfake",8080); + std::cout << "---- REST test 4: host not found, json object "<< std::endl; + JsonBox::Value json_value2; + code = rest2.get_json("status", &json_value2); + if (code != 0){ + //throw -1; + std::cout << "I SHOULD THROW AN EXCEPTION!!!" << std::endl; + } }