lltemplatemessagedispatcher_test.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:5k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file lltrustedmessageservice_test.cpp
  3.  * @brief LLTrustedMessageService unit tests
  4.  *
  5.  * $LicenseInfo:firstyear=2009&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2009-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #include "lltemplatemessagedispatcher.h"
  33. #include "lltut.h"
  34. #include "llhttpnode.h"
  35. #include "llhost.h"
  36. #include "message.h"
  37. #include "llsd.h"
  38. #include "llhost.cpp" // Needed for copy operator
  39. #include "net.cpp" // Needed by LLHost.
  40. LLMessageSystem * gMessageSystem = NULL;
  41. // sensor test doubles
  42. bool gClearRecvWasCalled = false;
  43. void LLMessageSystem::clearReceiveState(void) 
  44. gClearRecvWasCalled = true; 
  45. }
  46. char gUdpDispatchedData[MAX_BUFFER_SIZE];
  47. bool gUdpDispatchWasCalled = false;
  48. BOOL LLTemplateMessageReader::readMessage(const U8* data,class LLHost const &) 
  49. gUdpDispatchWasCalled = true;
  50. strcpy(gUdpDispatchedData, reinterpret_cast<const char*>(data));
  51. return  true;
  52. }
  53. BOOL gValidateMessage = FALSE;
  54. BOOL LLTemplateMessageReader::validateMessage(const U8*, S32 buffer_size, LLHost const &sender, bool trusted) 
  55. return gValidateMessage;
  56. }
  57. LLHost host;
  58. const LLHost& LLMessageSystem::getSender() const 
  59. return host; 
  60. }
  61. const char* gBinaryTemplateData = "BINARYTEMPLATEDATA";
  62. void fillVector(std::vector<U8>& vector_data, const char* data)
  63. {
  64. vector_data.resize(strlen(data) + 1);
  65. strcpy(reinterpret_cast<char*>(&vector_data[0]), data);
  66. }
  67. namespace tut
  68. {
  69. static LLTemplateMessageReader::message_template_number_map_t numberMap;
  70. struct LLTemplateMessageDispatcherData
  71. {
  72. LLTemplateMessageDispatcherData()
  73. {
  74. mMessageName = "MessageName";
  75. gUdpDispatchWasCalled = false;
  76. gClearRecvWasCalled = false;
  77. gValidateMessage = FALSE;
  78. mMessage["body"]["binary-template-data"] = std::vector<U8>();
  79. }
  80. LLSD mMessage;
  81. LLHTTPNode::ResponsePtr mResponsePtr;
  82. std::string mMessageName;
  83. };
  84. typedef test_group<LLTemplateMessageDispatcherData> factory;
  85. typedef factory::object object;
  86. }
  87. namespace
  88. {
  89. tut::factory tf("LLTemplateMessageDispatcher test");
  90. }
  91. namespace tut
  92. {
  93. // does an empty message stop processing?
  94. template<> template<>
  95. void object::test<1>()
  96. {
  97. LLTemplateMessageReader* pReader = NULL;
  98. LLTemplateMessageDispatcher t(*pReader);
  99. t.dispatch(mMessageName, mMessage, mResponsePtr);
  100. ensure(! gUdpDispatchWasCalled);
  101. ensure(! gClearRecvWasCalled);
  102. }
  103. // does the disaptch invoke the udp send method?
  104. template<> template<>
  105. void object::test<2>()
  106. {
  107. LLTemplateMessageReader* pReader = NULL;
  108. LLTemplateMessageDispatcher t(*pReader);
  109. gValidateMessage = TRUE;
  110. std::vector<U8> vector_data;
  111. fillVector(vector_data, gBinaryTemplateData);
  112. mMessage["body"]["binary-template-data"] = vector_data;
  113. t.dispatch(mMessageName, mMessage, mResponsePtr);
  114. ensure("udp dispatch was called", gUdpDispatchWasCalled);
  115. }
  116. // what if the message wasn't valid? We would hope the message gets cleared!
  117. template<> template<>
  118. void object::test<3>()
  119. {
  120. LLTemplateMessageReader* pReader = NULL;
  121. LLTemplateMessageDispatcher t(*pReader);
  122. std::vector<U8> vector_data;
  123. fillVector(vector_data, gBinaryTemplateData);
  124. mMessage["body"]["binary-template-data"] = vector_data;
  125. gValidateMessage = FALSE;
  126. t.dispatch(mMessageName, mMessage, mResponsePtr);
  127. ensure("clear received message was called", gClearRecvWasCalled);
  128. }
  129. // is the binary data passed through correctly?
  130. template<> template<>
  131. void object::test<4>()
  132. {
  133. LLTemplateMessageReader* pReader = NULL;
  134. LLTemplateMessageDispatcher t(*pReader);
  135. gValidateMessage = TRUE;
  136. std::vector<U8> vector_data;
  137. fillVector(vector_data, gBinaryTemplateData);
  138. mMessage["body"]["binary-template-data"] = vector_data;
  139. t.dispatch(mMessageName, mMessage, mResponsePtr);
  140. ensure("data couriered correctly", strcmp(gBinaryTemplateData, gUdpDispatchedData) == 0);
  141. }
  142. }