text: 
  //此源码被清华学神尹成大魔王专业翻译分析并修改
  //尹成QQ77025077
  //尹成微信18510341407
  //尹成所在QQ群721929980
  //尹成邮箱 yinc13@mails.tsinghua.edu.cn
  //尹成毕业于清华大学,微软区块链领域全球最有价值专家
  //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620
  //————————————————————————————————————————————————————————————————————————————————————————————————————————————————
  /*
      此文件是Rippled的一部分：https://github.com/ripple/rippled
      版权所有（c）2012-2016 Ripple Labs Inc.
  
      使用、复制、修改和/或分发本软件的权限
      特此授予免费或不收费的目的，前提是
      版权声明和本许可声明出现在所有副本中。
  
      本软件按“原样”提供，作者不作任何保证。
      关于本软件，包括
      适销性和适用性。在任何情况下，作者都不对
      任何特殊、直接、间接或后果性损害或任何损害
      因使用、数据或利润损失而导致的任何情况，无论是在
      合同行为、疏忽或其他侵权行为
      或与本软件的使用或性能有关。
  **/
  
  //==============================================================
  
  #include <ripple/protocol/JsonFields.h>
  #include <test/jtx.h>
  #include <ripple/beast/unit_test.h>
  
  #include <boost/format.hpp>
  
  namespace ripple {
  
  namespace test {
  
  namespace validator_data {
  static auto const public_key =
      "nHBt9fsb4849WmZiCds4r5TXyBeQjqnH5kzPtqgMAQMgi39YZRPa";
  
  static auto const token =
      "eyJ2YWxpZGF0aW9uX3NlY3JldF9rZXkiOiI5ZWQ0NWY4NjYyNDFjYzE4YTI3NDdiNT\n"
      "QzODdjMDYyNTkwNzk3MmY0ZTcxOTAyMzFmYWE5Mzc0NTdmYTlkYWY2IiwibWFuaWZl\n"
      "c3QiOiJKQUFBQUFGeEllMUZ0d21pbXZHdEgyaUNjTUpxQzlnVkZLaWxHZncxL3ZDeE\n"
      "hYWExwbGMyR25NaEFrRTFhZ3FYeEJ3RHdEYklENk9NU1l1TTBGREFscEFnTms4U0tG\n"
      "bjdNTzJmZGtjd1JRSWhBT25ndTlzQUtxWFlvdUorbDJWMFcrc0FPa1ZCK1pSUzZQU2\n"
      "hsSkFmVXNYZkFpQnNWSkdlc2FhZE9KYy9hQVpva1MxdnltR21WcmxIUEtXWDNZeXd1\n"
      "NmluOEhBU1FLUHVnQkQ2N2tNYVJGR3ZtcEFUSGxHS0pkdkRGbFdQWXk1QXFEZWRGdj\n"
      "VUSmEydzBpMjFlcTNNWXl3TFZKWm5GT3I3QzBrdzJBaVR6U0NqSXpkaXRROD0ifQ==\n";
  }
  
  class ServerInfo_test : public beast::unit_test::suite
  {
  public:
      static
      std::unique_ptr<Config>
      makeValidatorConfig()
      {
          auto p = std::make_unique<Config>();
          boost::format toLoad(R"rippleConfig(
  [validator_token]
  %1%
  
  [validators]
  %2%
  )rippleConfig");
  
          p->loadFromString (boost::str (
              toLoad % validator_data::token % validator_data::public_key));
  
          setupConfigForUnitTests(*p);
  
          return p;
      }
  
      void testServerInfo()
      {
          using namespace test::jtx;
  
          {
              Env env(*this);
              auto const result = env.rpc("server_info");
              BEAST_EXPECT(!result[jss::result].isMember (jss::error));
              BEAST_EXPECT(result[jss::result][jss::status] == "success");
              BEAST_EXPECT(result[jss::result].isMember(jss::info));
          }
          {
              Env env(*this, makeValidatorConfig());
              auto const result = env.rpc("server_info");
              BEAST_EXPECT(!result[jss::result].isMember (jss::error));
              BEAST_EXPECT(result[jss::result][jss::status] == "success");
              BEAST_EXPECT(result[jss::result].isMember(jss::info));
              BEAST_EXPECT(result[jss::result][jss::info]
                  [jss::pubkey_validator] == validator_data::public_key);
          }
      }
  
      void run () override
      {
          testServerInfo ();
      }
  };
  
  BEAST_DEFINE_TESTSUITE(ServerInfo,app,ripple);
  
  } //测试
  } //涟漪
  
  