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

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file   llareslistener_test.cpp
  3.  * @author Mark Palange
  4.  * @date   2009-02-26
  5.  * @brief  Tests of llareslistener.h.
  6.  * 
  7.  * $LicenseInfo:firstyear=2009&license=viewergpl$
  8.  * 
  9.  * Copyright (c) 2009-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 : 4355) // 'this' used in initializer list: yes, intentionally
  36. #endif
  37. // Precompiled header
  38. #include "linden_common.h"
  39. // associated header
  40. #include "../llareslistener.h"
  41. // STL headers
  42. #include <iostream>
  43. // std headers
  44. // external library headers
  45. #include <boost/bind.hpp>
  46. // other Linden headers
  47. #include "llsd.h"
  48. #include "llares.h"
  49. #include "../test/lltut.h"
  50. #include "llevents.h"
  51. #include "tests/wrapllerrs.h"
  52. /*****************************************************************************
  53. *   Dummy stuff
  54. *****************************************************************************/
  55. LLAres::LLAres():
  56.     // Simulate this much of the real LLAres constructor: we need an
  57.     // LLAresListener instance.
  58.     mListener(new LLAresListener("LLAres", this))
  59. {}
  60. LLAres::~LLAres() {}
  61. void LLAres::rewriteURI(const std::string &uri,
  62. LLAres::UriRewriteResponder *resp)
  63. {
  64. // This is the only LLAres method I chose to implement.
  65. // The effect is that LLAres returns immediately with
  66. // a result that is equal to the input uri.
  67. std::vector<std::string> result;
  68. result.push_back(uri);
  69. resp->rewriteResult(result);
  70. }
  71. LLAres::QueryResponder::~QueryResponder() {}
  72. void LLAres::QueryResponder::queryError(int) {}
  73. void LLAres::QueryResponder::queryResult(char const*, size_t) {}
  74. LLQueryResponder::LLQueryResponder() {}
  75. void LLQueryResponder::queryResult(char const*, size_t) {}
  76. void LLQueryResponder::querySuccess() {}
  77. void LLAres::UriRewriteResponder::queryError(int) {}
  78. void LLAres::UriRewriteResponder::querySuccess() {}
  79. void LLAres::UriRewriteResponder::rewriteResult(const std::vector<std::string>& uris) {}
  80. /*****************************************************************************
  81. *   TUT
  82. *****************************************************************************/
  83. namespace tut
  84. {
  85.     struct data
  86.     {
  87.         LLAres dummyAres;
  88.     };
  89.     typedef test_group<data> llareslistener_group;
  90.     typedef llareslistener_group::object object;
  91.     llareslistener_group llareslistenergrp("llareslistener");
  92. struct ResponseCallback
  93. {
  94. std::vector<std::string> mURIs;
  95. bool operator()(const LLSD& response)
  96. {
  97.             mURIs.clear();
  98.             for (LLSD::array_const_iterator ri(response.beginArray()), rend(response.endArray());
  99.                  ri != rend; ++ri)
  100.             {
  101.                 mURIs.push_back(*ri);
  102.             }
  103.             return false;
  104. }
  105. };
  106.     template<> template<>
  107.     void object::test<1>()
  108.     {
  109.         set_test_name("test event");
  110. // Tests the success and failure cases, since they both use 
  111. // the same code paths in the LLAres responder.
  112. ResponseCallback response;
  113.         std::string pumpname("trigger");
  114.         // Since we're asking LLEventPumps to obtain() the pump by the desired
  115.         // name, it will persist beyond the current scope, so ensure we
  116.         // disconnect from it when 'response' goes away.
  117.         LLTempBoundListener temp(
  118.             LLEventPumps::instance().obtain(pumpname).listen("rewriteURIresponse",
  119.                                                              boost::bind(&ResponseCallback::operator(), &response, _1)));
  120.         // Now build an LLSD request that will direct its response events to
  121.         // that pump.
  122. const std::string testURI("login.bar.com");
  123.         LLSD request;
  124.         request["op"] = "rewriteURI";
  125.         request["uri"] = testURI;
  126.         request["reply"] = pumpname;
  127.         LLEventPumps::instance().obtain("LLAres").post(request);
  128. ensure_equals(response.mURIs.size(), 1);
  129. ensure_equals(response.mURIs.front(), testURI); 
  130. }
  131.     template<> template<>
  132.     void object::test<2>()
  133.     {
  134.         set_test_name("bad op");
  135.         WrapLL_ERRS capture;
  136.         LLSD request;
  137.         request["op"] = "foo";
  138.         std::string threw;
  139.         try
  140.         {
  141.             LLEventPumps::instance().obtain("LLAres").post(request);
  142.         }
  143.         catch (const WrapLL_ERRS::FatalException& e)
  144.         {
  145.             threw = e.what();
  146.         }
  147.         ensure_contains("LLAresListener bad op", threw, "bad");
  148.     }
  149.     template<> template<>
  150.     void object::test<3>()
  151.     {
  152.         set_test_name("bad rewriteURI request");
  153.         WrapLL_ERRS capture;
  154.         LLSD request;
  155.         request["op"] = "rewriteURI";
  156.         std::string threw;
  157.         try
  158.         {
  159.             LLEventPumps::instance().obtain("LLAres").post(request);
  160.         }
  161.         catch (const WrapLL_ERRS::FatalException& e)
  162.         {
  163.             threw = e.what();
  164.         }
  165.         ensure_contains("LLAresListener bad req", threw, "missing");
  166.         ensure_contains("LLAresListener bad req", threw, "reply");
  167.         ensure_contains("LLAresListener bad req", threw, "uri");
  168.     }
  169.     template<> template<>
  170.     void object::test<4>()
  171.     {
  172.         set_test_name("bad rewriteURI request");
  173.         WrapLL_ERRS capture;
  174.         LLSD request;
  175.         request["op"] = "rewriteURI";
  176.         request["reply"] = "nonexistent";
  177.         std::string threw;
  178.         try
  179.         {
  180.             LLEventPumps::instance().obtain("LLAres").post(request);
  181.         }
  182.         catch (const WrapLL_ERRS::FatalException& e)
  183.         {
  184.             threw = e.what();
  185.         }
  186.         ensure_contains("LLAresListener bad req", threw, "missing");
  187.         ensure_contains("LLAresListener bad req", threw, "uri");
  188.         ensure_does_not_contain("LLAresListener bad req", threw, "reply");
  189.     }
  190.     template<> template<>
  191.     void object::test<5>()
  192.     {
  193.         set_test_name("bad rewriteURI request");
  194.         WrapLL_ERRS capture;
  195.         LLSD request;
  196.         request["op"] = "rewriteURI";
  197.         request["uri"] = "foo.bar.com";
  198.         std::string threw;
  199.         try
  200.         {
  201.             LLEventPumps::instance().obtain("LLAres").post(request);
  202.         }
  203.         catch (const WrapLL_ERRS::FatalException& e)
  204.         {
  205.             threw = e.what();
  206.         }
  207.         ensure_contains("LLAresListener bad req", threw, "missing");
  208.         ensure_contains("LLAresListener bad req", threw, "reply");
  209.         ensure_does_not_contain("LLAresListener bad req", threw, "uri");
  210.     }
  211. }