111 lines
4.0 KiB
C++
111 lines
4.0 KiB
C++
|
|
/*
|
|
Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License, version 2.0,
|
|
as published by the Free Software Foundation.
|
|
|
|
This program is also distributed with certain software (including
|
|
but not limited to OpenSSL) that is licensed under separate terms,
|
|
as designated in a particular file or component or in included license
|
|
documentation. The authors of MySQL hereby grant you an additional
|
|
permission to link the program and your derivative works with the
|
|
separately licensed software that they have included with MySQL.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#include "mock_server_testutils.h"
|
|
|
|
#include <array>
|
|
#include <chrono>
|
|
#include <thread>
|
|
|
|
#include <gmock/gmock.h>
|
|
#ifdef RAPIDJSON_NO_SIZETYPEDEFINE
|
|
// if we build within the server, it will set RAPIDJSON_NO_SIZETYPEDEFINE
|
|
// globally and require to include my_rapidjson_size_t.h
|
|
#include "my_rapidjson_size_t.h"
|
|
#endif
|
|
|
|
#include <rapidjson/error/en.h>
|
|
|
|
#include "config_builder.h"
|
|
#include "mock_server_rest_client.h"
|
|
#include "mysqlrouter/rest_client.h"
|
|
#include "rest_api_testutils.h"
|
|
|
|
std::string json_to_string(const JsonValue &json_doc) {
|
|
JsonStringBuffer out_buffer;
|
|
|
|
rapidjson::Writer<JsonStringBuffer> out_writer{out_buffer};
|
|
json_doc.Accept(out_writer);
|
|
return out_buffer.GetString();
|
|
}
|
|
|
|
JsonValue mock_GR_metadata_as_json(const std::string &gr_id,
|
|
const std::vector<uint16_t> &gr_node_ports,
|
|
unsigned primary_id) {
|
|
JsonValue json_doc(rapidjson::kObjectType);
|
|
JsonAllocator allocator;
|
|
json_doc.AddMember(
|
|
"gr_id", JsonValue(gr_id.c_str(), gr_id.length(), allocator), allocator);
|
|
|
|
JsonValue gr_nodes_json(rapidjson::kArrayType);
|
|
for (auto &gr_node : gr_node_ports) {
|
|
JsonValue node(rapidjson::kArrayType);
|
|
node.PushBack(static_cast<int>(gr_node), allocator);
|
|
node.PushBack(JsonValue("ONLINE", strlen("ONLINE"), allocator), allocator);
|
|
gr_nodes_json.PushBack(node, allocator);
|
|
}
|
|
json_doc.AddMember("gr_nodes", gr_nodes_json, allocator);
|
|
json_doc.AddMember("primary_id", static_cast<int>(primary_id), allocator);
|
|
|
|
return json_doc;
|
|
}
|
|
|
|
void set_mock_metadata(uint16_t http_port, const std::string &gr_id,
|
|
const std::vector<uint16_t> &gr_node_ports,
|
|
unsigned primary_id) {
|
|
const auto json_doc =
|
|
mock_GR_metadata_as_json(gr_id, gr_node_ports, primary_id);
|
|
|
|
const auto json_str = json_to_string(json_doc);
|
|
|
|
EXPECT_NO_THROW(MockServerRestClient(http_port).set_globals(json_str));
|
|
}
|
|
|
|
void set_mock_bootstrap_data(
|
|
uint16_t http_port, const std::string &cluster_name,
|
|
const std::vector<std::pair<std::string, unsigned>> &gr_members_ports) {
|
|
JsonValue json_doc(rapidjson::kObjectType);
|
|
JsonAllocator allocator;
|
|
json_doc.AddMember(
|
|
"cluster_name",
|
|
JsonValue(cluster_name.c_str(), cluster_name.length(), allocator),
|
|
allocator);
|
|
|
|
JsonValue gr_members_json(rapidjson::kArrayType);
|
|
for (auto &gr_member : gr_members_ports) {
|
|
JsonValue member(rapidjson::kArrayType);
|
|
member.PushBack(
|
|
JsonValue(gr_member.first.c_str(), gr_member.first.length(), allocator),
|
|
allocator);
|
|
member.PushBack(static_cast<int>(gr_member.second), allocator);
|
|
gr_members_json.PushBack(member, allocator);
|
|
}
|
|
json_doc.AddMember("gr_members", gr_members_json, allocator);
|
|
|
|
const auto json_str = json_to_string(json_doc);
|
|
|
|
EXPECT_NO_THROW(MockServerRestClient(http_port).set_globals(json_str));
|
|
}
|