// // // Copyright (C) 2004 SIPfoundry Inc. // Licensed by SIPfoundry under the LGPL license. // // Copyright (C) 2004 Pingtel Corp. // Licensed to SIPfoundry under a Contributor Agreement. // // $$ ////////////////////////////////////////////////////////////////////////////// #include #include #include #include "net/Url.h" #include "net/XmlRpcRequest.h" #include "xmlparser/tinyxml.h" #include "sipdb/ResultSet.h" typedef struct { const char* uri; const char* callid; const char* contact; const char* expires; const char* cseq; const char* qvalue; const char* instance_id; const char* gruu; } RegistrationRow; RegistrationRow regdata[] = { { "sip:user1@example.com", "6745637808245563@TmVhbC1sYXB0b3Ay", "sip:181@192.168.0.2:6012", "1133218054", "3", "", "1111", "sip:181@example.com;gruu" }, { "sip:user@example.com", "8d2d9c70405f4e66@TmVhbC1sYXB0b3Ay", "sip:181@66.30.139.170:24907", "1133221655", "2", "0.8", "2222", "sip:182@example.com;gruu" }, { "sip:user3@example.com", "fa294244984e0c3f@TmVhbC1sYXB0b3Ay", "sip:181@192.168.0.2:6000", "1133221680", "1", "0.2", "3333", "sip:183@example.com;gruu" } }; class ResultSetRpcTest : public CppUnit::TestCase { CPPUNIT_TEST_SUITE(ResultSetRpcTest); CPPUNIT_TEST(testRegistrationSet); CPPUNIT_TEST_SUITE_END(); public: void testRegistrationSet() { ResultSet registrations; size_t row; for (row = 0; row < sizeof(regdata)/sizeof(RegistrationRow); row++) { UtlHashMap regRow; UtlString* uriKey = new UtlString("uri"); UtlString* uriValue = new UtlString(regdata[row].uri); regRow.insertKeyAndValue(uriKey, uriValue); UtlString* callidKey = new UtlString("callid"); UtlString* callidValue = new UtlString(regdata[row].callid); regRow.insertKeyAndValue(callidKey, callidValue); UtlString* contactKey = new UtlString("contact"); UtlString* contactValue = new UtlString(regdata[row].contact); regRow.insertKeyAndValue(contactKey, contactValue); UtlString* expiresKey = new UtlString("expires"); UtlString* expiresValue = new UtlString(regdata[row].expires); regRow.insertKeyAndValue(expiresKey, expiresValue); UtlString* cseqKey = new UtlString("cseq"); UtlString* cseqValue = new UtlString(regdata[row].cseq); regRow.insertKeyAndValue(cseqKey, cseqValue); UtlString* qvalueKey = new UtlString("qvalue"); UtlString* qvalueValue = new UtlString(regdata[row].qvalue); regRow.insertKeyAndValue(qvalueKey, qvalueValue); UtlString* instanceIdKey = new UtlString("instance_id"); UtlString* instanceIdValue = new UtlString(regdata[row].instance_id); regRow.insertKeyAndValue(instanceIdKey, instanceIdValue); UtlString* gruuKey = new UtlString("gruu"); UtlString* gruuValue = new UtlString(regdata[row].gruu); regRow.insertKeyAndValue(gruuKey, gruuValue); registrations.addValue(regRow); } Url target("http://server.exmple.com"); XmlRpcRequest request(target,"RPC.METHOD"); request.addParam(®istrations); UtlString requestBody; int bodyLength; request.mpRequestBody->getBytes(&requestBody, &bodyLength); const char* correctRequestBody = "\n" "\n" "RPC.METHOD\n" "\n" "\n" "\n" "\n" "\n" "gruusip:181@example.com;gruu\n" "\n" "\n" "urisip:user1@example.com\n" "\n" "\n" "contactsip:181@192.168.0.2:6012\n" "\n" "\n" "qvalue\n" "\n" "\n" "cseq3\n" "\n" "\n" "expires1133218054\n" "\n" "\n" "instance_id1111\n" "\n" "\n" "callid6745637808245563@TmVhbC1sYXB0b3Ay\n" "\n" "\n" "\n" "\n" "gruusip:182@example.com;gruu\n" "\n" "\n" "urisip:user@example.com\n" "\n" "\n" "contactsip:181@66.30.139.170:24907\n" "\n" "\n" "qvalue0.8\n" "\n" "\n" "cseq2\n" "\n" "\n" "expires1133221655\n" "\n" "\n" "instance_id2222\n" "\n" "\n" "callid8d2d9c70405f4e66@TmVhbC1sYXB0b3Ay\n" "\n" "\n" "\n" "\n" "gruusip:183@example.com;gruu\n" "\n" "\n" "urisip:user3@example.com\n" "\n" "\n" "contactsip:181@192.168.0.2:6000\n" "\n" "\n" "qvalue0.2\n" "\n" "\n" "cseq1\n" "\n" "\n" "expires1133221680\n" "\n" "\n" "instance_id3333\n" "\n" "\n" "callidfa294244984e0c3f@TmVhbC1sYXB0b3Ay\n" "\n" "\n" "\n" "\n" ; ASSERT_STR_EQUAL(correctRequestBody, requestBody.data()); CPPUNIT_ASSERT_EQUAL(strlen(correctRequestBody), requestBody.length()); }; }; CPPUNIT_TEST_SUITE_REGISTRATION(ResultSetRpcTest);