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

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file   llsdmessage_test.cpp
  3.  * @author Nat Goodspeed
  4.  * @date   2008-12-22
  5.  * @brief  Test of llsdmessage.h
  6.  * 
  7.  * $LicenseInfo:firstyear=2008&license=viewergpl$
  8.  * 
  9.  * Copyright (c) 2008-2010, Linden Research, Inc.
  10.  * 
  11.  * Second Life Viewer Source Code
  12.  * The source code in this file ("Source Code") is provided by Linden Lab
  13.  * to you under the terms of the GNU General Public License, version 2.0
  14.  * ("GPL"), unless you have obtained a separate licensing agreement
  15.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  16.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  17.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  18.  * 
  19.  * There are special exceptions to the terms and conditions of the GPL as
  20.  * it is applied to this Source Code. View the full text of the exception
  21.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  22.  * online at
  23.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  24.  * 
  25.  * By copying, modifying or distributing this software, you acknowledge
  26.  * that you have read and understood your obligations described above,
  27.  * and agree to abide by those obligations.
  28.  * 
  29.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  30.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  31.  * COMPLETENESS OR PERFORMANCE.
  32.  * $/LicenseInfo$
  33.  */
  34. #if LL_WINDOWS
  35. #pragma warning (disable : 4675) // "resolved by ADL" -- just as I want!
  36. #endif
  37. // Precompiled header
  38. #include "linden_common.h"
  39. // associated header
  40. #include "llsdmessage.h"
  41. // STL headers
  42. #include <iostream>
  43. // std headers
  44. #include <stdexcept>
  45. #include <typeinfo>
  46. // external library headers
  47. // other Linden headers
  48. #include "../test/lltut.h"
  49. #include "llsdserialize.h"
  50. #include "llevents.h"
  51. #include "stringize.h"
  52. #include "llhost.h"
  53. #include "tests/networkio.h"
  54. #include "tests/commtest.h"
  55. /*****************************************************************************
  56. *   TUT
  57. *****************************************************************************/
  58. namespace tut
  59. {
  60.     struct llsdmessage_data: public commtest_data
  61.     {
  62.         LLEventPump& httpPump;
  63.         llsdmessage_data():
  64.             httpPump(pumps.obtain("LLHTTPClient"))
  65.         {
  66.             LLSDMessage::link();
  67.         }
  68.     };
  69.     typedef test_group<llsdmessage_data> llsdmessage_group;
  70.     typedef llsdmessage_group::object llsdmessage_object;
  71.     llsdmessage_group llsdmgr("llsdmessage");
  72.     template<> template<>
  73.     void llsdmessage_object::test<1>()
  74.     {
  75.         bool threw = false;
  76.         // This should fail...
  77.         try
  78.         {
  79.             LLSDMessage localListener;
  80.         }
  81.         catch (const LLEventPump::DupPumpName&)
  82.         {
  83.             threw = true;
  84.         }
  85.         catch (const std::runtime_error& ex)
  86.         {
  87.             // This clause is because on Linux, on the viewer side, for this
  88.             // one test program (though not others!), the
  89.             // LLEventPump::DupPumpName exception isn't caught by the clause
  90.             // above. Warn the user...
  91.             std::cerr << "Failed to catch " << typeid(ex).name() << std::endl;
  92.             // But if the expected exception was thrown, allow the test to
  93.             // succeed anyway. Not sure how else to handle this odd case.
  94.             if (std::string(typeid(ex).name()) == typeid(LLEventPump::DupPumpName).name())
  95.             {
  96.                 threw = true;
  97.             }
  98.             else
  99.             {
  100.                 // We don't even recognize this exception. Let it propagate
  101.                 // out to TUT to fail the test.
  102.                 throw;
  103.             }
  104.         }
  105.         catch (...)
  106.         {
  107.             std::cerr << "Utterly failed to catch expected exception!" << std::endl;
  108.             // This case is full of fail. We HAVE to address it.
  109.             throw;
  110.         }
  111.         ensure("second LLSDMessage should throw", threw);
  112.     }
  113.     template<> template<>
  114.     void llsdmessage_object::test<2>()
  115.     {
  116.         LLSD request, body;
  117.         body["data"] = "yes";
  118.         request["payload"] = body;
  119.         request["reply"] = replyPump.getName();
  120.         request["error"] = errorPump.getName();
  121.         bool threw = false;
  122.         try
  123.         {
  124.             httpPump.post(request);
  125.         }
  126.         catch (const LLSDMessage::ArgError&)
  127.         {
  128.             threw = true;
  129.         }
  130.         ensure("missing URL", threw);
  131.     }
  132.     template<> template<>
  133.     void llsdmessage_object::test<3>()
  134.     {
  135.         LLSD request, body;
  136.         body["data"] = "yes";
  137.         request["url"] = server + "got-message";
  138.         request["payload"] = body;
  139.         request["reply"] = replyPump.getName();
  140.         request["error"] = errorPump.getName();
  141.         httpPump.post(request);
  142.         ensure("got response", netio.pump());
  143.         ensure("success response", success);
  144.         ensure_equals(result.asString(), "success");
  145.         body["status"] = 499;
  146.         body["reason"] = "custom error message";
  147.         request["url"] = server + "fail";
  148.         request["payload"] = body;
  149.         httpPump.post(request);
  150.         ensure("got response", netio.pump());
  151.         ensure("failure response", ! success);
  152.         ensure_equals(result["status"].asInteger(), body["status"].asInteger());
  153.         ensure_equals(result["reason"].asString(),  body["reason"].asString());
  154.     }
  155. } // namespace tut