aboutsummaryrefslogtreecommitdiff
path: root/osp/impl/testing/fake_mdns_responder_adapter.cc
diff options
context:
space:
mode:
Diffstat (limited to 'osp/impl/testing/fake_mdns_responder_adapter.cc')
-rw-r--r--osp/impl/testing/fake_mdns_responder_adapter.cc600
1 files changed, 0 insertions, 600 deletions
diff --git a/osp/impl/testing/fake_mdns_responder_adapter.cc b/osp/impl/testing/fake_mdns_responder_adapter.cc
deleted file mode 100644
index 7b5a3b5e..00000000
--- a/osp/impl/testing/fake_mdns_responder_adapter.cc
+++ /dev/null
@@ -1,600 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "osp/impl/testing/fake_mdns_responder_adapter.h"
-
-#include <algorithm>
-#include <map>
-#include <string>
-#include <utility>
-
-#include "platform/base/error.h"
-#include "util/osp_logging.h"
-
-namespace openscreen {
-namespace osp {
-
-constexpr char kLocalDomain[] = "local";
-
-PtrEvent MakePtrEvent(const std::string& service_instance,
- const std::string& service_type,
- const std::string& service_protocol,
- UdpSocket* socket) {
- const auto labels = std::vector<std::string>{service_instance, service_type,
- service_protocol, kLocalDomain};
- ErrorOr<DomainName> full_instance_name =
- DomainName::FromLabels(labels.begin(), labels.end());
- OSP_CHECK(full_instance_name);
- PtrEvent result{QueryEventHeader{QueryEventHeader::Type::kAdded, socket},
- full_instance_name.value()};
- return result;
-}
-
-SrvEvent MakeSrvEvent(const std::string& service_instance,
- const std::string& service_type,
- const std::string& service_protocol,
- const std::string& hostname,
- uint16_t port,
- UdpSocket* socket) {
- const auto instance_labels = std::vector<std::string>{
- service_instance, service_type, service_protocol, kLocalDomain};
- ErrorOr<DomainName> full_instance_name =
- DomainName::FromLabels(instance_labels.begin(), instance_labels.end());
- OSP_CHECK(full_instance_name);
-
- const auto host_labels = std::vector<std::string>{hostname, kLocalDomain};
- ErrorOr<DomainName> domain_name =
- DomainName::FromLabels(host_labels.begin(), host_labels.end());
- OSP_CHECK(domain_name);
-
- SrvEvent result{QueryEventHeader{QueryEventHeader::Type::kAdded, socket},
- full_instance_name.value(), domain_name.value(), port};
- return result;
-}
-
-TxtEvent MakeTxtEvent(const std::string& service_instance,
- const std::string& service_type,
- const std::string& service_protocol,
- const std::vector<std::string>& txt_lines,
- UdpSocket* socket) {
- const auto labels = std::vector<std::string>{service_instance, service_type,
- service_protocol, kLocalDomain};
- ErrorOr<DomainName> domain_name =
- DomainName::FromLabels(labels.begin(), labels.end());
- OSP_CHECK(domain_name);
- TxtEvent result{QueryEventHeader{QueryEventHeader::Type::kAdded, socket},
- domain_name.value(), txt_lines};
- return result;
-}
-
-AEvent MakeAEvent(const std::string& hostname,
- IPAddress address,
- UdpSocket* socket) {
- const auto labels = std::vector<std::string>{hostname, kLocalDomain};
- ErrorOr<DomainName> domain_name =
- DomainName::FromLabels(labels.begin(), labels.end());
- OSP_CHECK(domain_name);
- AEvent result{QueryEventHeader{QueryEventHeader::Type::kAdded, socket},
- domain_name.value(), address};
- return result;
-}
-
-AaaaEvent MakeAaaaEvent(const std::string& hostname,
- IPAddress address,
- UdpSocket* socket) {
- const auto labels = std::vector<std::string>{hostname, kLocalDomain};
- ErrorOr<DomainName> domain_name =
- DomainName::FromLabels(labels.begin(), labels.end());
- OSP_CHECK(domain_name);
- AaaaEvent result{QueryEventHeader{QueryEventHeader::Type::kAdded, socket},
- domain_name.value(), address};
- return result;
-}
-
-void AddEventsForNewService(FakeMdnsResponderAdapter* mdns_responder,
- const std::string& service_instance,
- const std::string& service_name,
- const std::string& service_protocol,
- const std::string& hostname,
- uint16_t port,
- const std::vector<std::string>& txt_lines,
- const IPAddress& address,
- UdpSocket* socket) {
- mdns_responder->AddPtrEvent(
- MakePtrEvent(service_instance, service_name, service_protocol, socket));
- mdns_responder->AddSrvEvent(MakeSrvEvent(service_instance, service_name,
- service_protocol, hostname, port,
- socket));
- mdns_responder->AddTxtEvent(MakeTxtEvent(
- service_instance, service_name, service_protocol, txt_lines, socket));
- mdns_responder->AddAEvent(MakeAEvent(hostname, address, socket));
-}
-
-FakeMdnsResponderAdapter::~FakeMdnsResponderAdapter() {
- if (observer_) {
- observer_->OnDestroyed();
- }
-}
-
-void FakeMdnsResponderAdapter::AddPtrEvent(PtrEvent&& ptr_event) {
- if (running_)
- ptr_events_.push_back(std::move(ptr_event));
-}
-
-void FakeMdnsResponderAdapter::AddSrvEvent(SrvEvent&& srv_event) {
- if (running_)
- srv_events_.push_back(std::move(srv_event));
-}
-
-void FakeMdnsResponderAdapter::AddTxtEvent(TxtEvent&& txt_event) {
- if (running_)
- txt_events_.push_back(std::move(txt_event));
-}
-
-void FakeMdnsResponderAdapter::AddAEvent(AEvent&& a_event) {
- if (running_)
- a_events_.push_back(std::move(a_event));
-}
-
-void FakeMdnsResponderAdapter::AddAaaaEvent(AaaaEvent&& aaaa_event) {
- if (running_)
- aaaa_events_.push_back(std::move(aaaa_event));
-}
-
-bool FakeMdnsResponderAdapter::ptr_queries_empty() const {
- for (const auto& queries : queries_) {
- if (!queries.second.ptr_queries.empty())
- return false;
- }
- return true;
-}
-
-bool FakeMdnsResponderAdapter::srv_queries_empty() const {
- for (const auto& queries : queries_) {
- if (!queries.second.srv_queries.empty())
- return false;
- }
- return true;
-}
-
-bool FakeMdnsResponderAdapter::txt_queries_empty() const {
- for (const auto& queries : queries_) {
- if (!queries.second.txt_queries.empty())
- return false;
- }
- return true;
-}
-
-bool FakeMdnsResponderAdapter::a_queries_empty() const {
- for (const auto& queries : queries_) {
- if (!queries.second.a_queries.empty())
- return false;
- }
- return true;
-}
-
-bool FakeMdnsResponderAdapter::aaaa_queries_empty() const {
- for (const auto& queries : queries_) {
- if (!queries.second.aaaa_queries.empty())
- return false;
- }
- return true;
-}
-
-Error FakeMdnsResponderAdapter::Init() {
- OSP_CHECK(!running_);
- running_ = true;
- return Error::None();
-}
-
-void FakeMdnsResponderAdapter::Close() {
- queries_.clear();
- ptr_events_.clear();
- srv_events_.clear();
- txt_events_.clear();
- a_events_.clear();
- aaaa_events_.clear();
- registered_interfaces_.clear();
- registered_services_.clear();
- running_ = false;
-}
-
-Error FakeMdnsResponderAdapter::SetHostLabel(const std::string& host_label) {
- return Error::Code::kNotImplemented;
-}
-
-Error FakeMdnsResponderAdapter::RegisterInterface(
- const InterfaceInfo& interface_info,
- const IPSubnet& interface_address,
- UdpSocket* socket) {
- if (!running_)
- return Error::Code::kOperationInvalid;
-
- if (std::find_if(registered_interfaces_.begin(), registered_interfaces_.end(),
- [&socket](const RegisteredInterface& interface) {
- return interface.socket == socket;
- }) != registered_interfaces_.end()) {
- return Error::Code::kItemNotFound;
- }
- registered_interfaces_.push_back({interface_info, interface_address, socket});
- return Error::None();
-}
-
-Error FakeMdnsResponderAdapter::DeregisterInterface(UdpSocket* socket) {
- auto it =
- std::find_if(registered_interfaces_.begin(), registered_interfaces_.end(),
- [&socket](const RegisteredInterface& interface) {
- return interface.socket == socket;
- });
- if (it == registered_interfaces_.end())
- return Error::Code::kItemNotFound;
-
- registered_interfaces_.erase(it);
- return Error::None();
-}
-
-void FakeMdnsResponderAdapter::OnRead(UdpSocket* socket,
- ErrorOr<UdpPacket> packet) {
- OSP_NOTREACHED();
-}
-
-void FakeMdnsResponderAdapter::OnSendError(UdpSocket* socket, Error error) {
- OSP_NOTREACHED();
-}
-
-void FakeMdnsResponderAdapter::OnError(UdpSocket* socket, Error error) {
- OSP_NOTREACHED();
-}
-
-void FakeMdnsResponderAdapter::OnBound(UdpSocket* socket) {
- OSP_NOTREACHED();
-}
-
-Clock::duration FakeMdnsResponderAdapter::RunTasks() {
- return std::chrono::seconds(1);
-}
-
-std::vector<PtrEvent> FakeMdnsResponderAdapter::TakePtrResponses() {
- std::vector<PtrEvent> result;
- for (auto& queries : queries_) {
- const auto query_it = std::stable_partition(
- ptr_events_.begin(), ptr_events_.end(),
- [&queries](const PtrEvent& ptr_event) {
- const auto instance_labels = ptr_event.service_instance.GetLabels();
- for (const auto& query : queries.second.ptr_queries) {
- const auto query_labels = query.GetLabels();
- // TODO(btolsch): Just use qname if it's added to PtrEvent.
- if (ptr_event.header.socket == queries.first &&
- std::equal(instance_labels.begin() + 1, instance_labels.end(),
- query_labels.begin())) {
- return false;
- }
- }
- return true;
- });
- for (auto it = query_it; it != ptr_events_.end(); ++it) {
- result.push_back(std::move(*it));
- }
- ptr_events_.erase(query_it, ptr_events_.end());
- }
- OSP_LOG_INFO << "taking " << result.size() << " ptr response(s)";
- return result;
-}
-
-std::vector<SrvEvent> FakeMdnsResponderAdapter::TakeSrvResponses() {
- std::vector<SrvEvent> result;
- for (auto& queries : queries_) {
- const auto query_it = std::stable_partition(
- srv_events_.begin(), srv_events_.end(),
- [&queries](const SrvEvent& srv_event) {
- for (const auto& query : queries.second.srv_queries) {
- if (srv_event.header.socket == queries.first &&
- srv_event.service_instance == query)
- return false;
- }
- return true;
- });
- for (auto it = query_it; it != srv_events_.end(); ++it) {
- result.push_back(std::move(*it));
- }
- srv_events_.erase(query_it, srv_events_.end());
- }
- OSP_LOG_INFO << "taking " << result.size() << " srv response(s)";
- return result;
-}
-
-std::vector<TxtEvent> FakeMdnsResponderAdapter::TakeTxtResponses() {
- std::vector<TxtEvent> result;
- for (auto& queries : queries_) {
- const auto query_it = std::stable_partition(
- txt_events_.begin(), txt_events_.end(),
- [&queries](const TxtEvent& txt_event) {
- for (const auto& query : queries.second.txt_queries) {
- if (txt_event.header.socket == queries.first &&
- txt_event.service_instance == query) {
- return false;
- }
- }
- return true;
- });
- for (auto it = query_it; it != txt_events_.end(); ++it) {
- result.push_back(std::move(*it));
- }
- txt_events_.erase(query_it, txt_events_.end());
- }
- OSP_LOG_INFO << "taking " << result.size() << " txt response(s)";
- return result;
-}
-
-std::vector<AEvent> FakeMdnsResponderAdapter::TakeAResponses() {
- std::vector<AEvent> result;
- for (auto& queries : queries_) {
- const auto query_it = std::stable_partition(
- a_events_.begin(), a_events_.end(), [&queries](const AEvent& a_event) {
- for (const auto& query : queries.second.a_queries) {
- if (a_event.header.socket == queries.first &&
- a_event.domain_name == query) {
- return false;
- }
- }
- return true;
- });
- for (auto it = query_it; it != a_events_.end(); ++it) {
- result.push_back(std::move(*it));
- }
- a_events_.erase(query_it, a_events_.end());
- }
- OSP_LOG_INFO << "taking " << result.size() << " a response(s)";
- return result;
-}
-
-std::vector<AaaaEvent> FakeMdnsResponderAdapter::TakeAaaaResponses() {
- std::vector<AaaaEvent> result;
- for (auto& queries : queries_) {
- const auto query_it = std::stable_partition(
- aaaa_events_.begin(), aaaa_events_.end(),
- [&queries](const AaaaEvent& aaaa_event) {
- for (const auto& query : queries.second.aaaa_queries) {
- if (aaaa_event.header.socket == queries.first &&
- aaaa_event.domain_name == query) {
- return false;
- }
- }
- return true;
- });
- for (auto it = query_it; it != aaaa_events_.end(); ++it) {
- result.push_back(std::move(*it));
- }
- aaaa_events_.erase(query_it, aaaa_events_.end());
- }
- OSP_LOG_INFO << "taking " << result.size() << " a response(s)";
- return result;
-}
-
-MdnsResponderErrorCode FakeMdnsResponderAdapter::StartPtrQuery(
- UdpSocket* socket,
- const DomainName& service_type) {
- if (!running_)
- return MdnsResponderErrorCode::kUnknownError;
-
- auto canonical_service_type = service_type;
- if (!canonical_service_type.EndsWithLocalDomain())
- OSP_CHECK(canonical_service_type.Append(DomainName::GetLocalDomain()).ok());
-
- auto maybe_inserted =
- queries_[socket].ptr_queries.insert(canonical_service_type);
- if (maybe_inserted.second) {
- return MdnsResponderErrorCode::kNoError;
- } else {
- return MdnsResponderErrorCode::kUnknownError;
- }
-}
-
-MdnsResponderErrorCode FakeMdnsResponderAdapter::StartSrvQuery(
- UdpSocket* socket,
- const DomainName& service_instance) {
- if (!running_)
- return MdnsResponderErrorCode::kUnknownError;
-
- auto maybe_inserted = queries_[socket].srv_queries.insert(service_instance);
- if (maybe_inserted.second) {
- return MdnsResponderErrorCode::kNoError;
- } else {
- return MdnsResponderErrorCode::kUnknownError;
- }
-}
-
-MdnsResponderErrorCode FakeMdnsResponderAdapter::StartTxtQuery(
- UdpSocket* socket,
- const DomainName& service_instance) {
- if (!running_)
- return MdnsResponderErrorCode::kUnknownError;
-
- auto maybe_inserted = queries_[socket].txt_queries.insert(service_instance);
- if (maybe_inserted.second) {
- return MdnsResponderErrorCode::kNoError;
- } else {
- return MdnsResponderErrorCode::kUnknownError;
- }
-}
-
-MdnsResponderErrorCode FakeMdnsResponderAdapter::StartAQuery(
- UdpSocket* socket,
- const DomainName& domain_name) {
- if (!running_)
- return MdnsResponderErrorCode::kUnknownError;
-
- auto maybe_inserted = queries_[socket].a_queries.insert(domain_name);
- if (maybe_inserted.second) {
- return MdnsResponderErrorCode::kNoError;
- } else {
- return MdnsResponderErrorCode::kUnknownError;
- }
-}
-
-MdnsResponderErrorCode FakeMdnsResponderAdapter::StartAaaaQuery(
- UdpSocket* socket,
- const DomainName& domain_name) {
- if (!running_)
- return MdnsResponderErrorCode::kUnknownError;
-
- auto maybe_inserted = queries_[socket].aaaa_queries.insert(domain_name);
- if (maybe_inserted.second) {
- return MdnsResponderErrorCode::kNoError;
- } else {
- return MdnsResponderErrorCode::kUnknownError;
- }
-}
-
-MdnsResponderErrorCode FakeMdnsResponderAdapter::StopPtrQuery(
- UdpSocket* socket,
- const DomainName& service_type) {
- auto interface_entry = queries_.find(socket);
- if (interface_entry == queries_.end())
- return MdnsResponderErrorCode::kUnknownError;
- auto& ptr_queries = interface_entry->second.ptr_queries;
- auto canonical_service_type = service_type;
- if (!canonical_service_type.EndsWithLocalDomain())
- OSP_CHECK(canonical_service_type.Append(DomainName::GetLocalDomain()).ok());
-
- auto it = ptr_queries.find(canonical_service_type);
- if (it == ptr_queries.end())
- return MdnsResponderErrorCode::kUnknownError;
-
- ptr_queries.erase(it);
- return MdnsResponderErrorCode::kNoError;
-}
-
-MdnsResponderErrorCode FakeMdnsResponderAdapter::StopSrvQuery(
- UdpSocket* socket,
- const DomainName& service_instance) {
- auto interface_entry = queries_.find(socket);
- if (interface_entry == queries_.end())
- return MdnsResponderErrorCode::kUnknownError;
- auto& srv_queries = interface_entry->second.srv_queries;
- auto it = srv_queries.find(service_instance);
- if (it == srv_queries.end())
- return MdnsResponderErrorCode::kUnknownError;
-
- srv_queries.erase(it);
- return MdnsResponderErrorCode::kNoError;
-}
-
-MdnsResponderErrorCode FakeMdnsResponderAdapter::StopTxtQuery(
- UdpSocket* socket,
- const DomainName& service_instance) {
- auto interface_entry = queries_.find(socket);
- if (interface_entry == queries_.end())
- return MdnsResponderErrorCode::kUnknownError;
- auto& txt_queries = interface_entry->second.txt_queries;
- auto it = txt_queries.find(service_instance);
- if (it == txt_queries.end())
- return MdnsResponderErrorCode::kUnknownError;
-
- txt_queries.erase(it);
- return MdnsResponderErrorCode::kNoError;
-}
-
-MdnsResponderErrorCode FakeMdnsResponderAdapter::StopAQuery(
- UdpSocket* socket,
- const DomainName& domain_name) {
- auto interface_entry = queries_.find(socket);
- if (interface_entry == queries_.end())
- return MdnsResponderErrorCode::kUnknownError;
- auto& a_queries = interface_entry->second.a_queries;
- auto it = a_queries.find(domain_name);
- if (it == a_queries.end())
- return MdnsResponderErrorCode::kUnknownError;
-
- a_queries.erase(it);
- return MdnsResponderErrorCode::kNoError;
-}
-
-MdnsResponderErrorCode FakeMdnsResponderAdapter::StopAaaaQuery(
- UdpSocket* socket,
- const DomainName& domain_name) {
- auto interface_entry = queries_.find(socket);
- if (interface_entry == queries_.end())
- return MdnsResponderErrorCode::kUnknownError;
- auto& aaaa_queries = interface_entry->second.aaaa_queries;
- auto it = aaaa_queries.find(domain_name);
- if (it == aaaa_queries.end())
- return MdnsResponderErrorCode::kUnknownError;
-
- aaaa_queries.erase(it);
- return MdnsResponderErrorCode::kNoError;
-}
-
-MdnsResponderErrorCode FakeMdnsResponderAdapter::RegisterService(
- const std::string& service_instance,
- const std::string& service_name,
- const std::string& service_protocol,
- const DomainName& target_host,
- uint16_t target_port,
- const std::map<std::string, std::string>& txt_data) {
- if (!running_)
- return MdnsResponderErrorCode::kUnknownError;
-
- if (std::find_if(registered_services_.begin(), registered_services_.end(),
- [&service_instance, &service_name,
- &service_protocol](const RegisteredService& service) {
- return service.service_instance == service_instance &&
- service.service_name == service_name &&
- service.service_protocol == service_protocol;
- }) != registered_services_.end()) {
- return MdnsResponderErrorCode::kUnknownError;
- }
- registered_services_.push_back({service_instance, service_name,
- service_protocol, target_host, target_port,
- txt_data});
- return MdnsResponderErrorCode::kNoError;
-}
-
-MdnsResponderErrorCode FakeMdnsResponderAdapter::DeregisterService(
- const std::string& service_instance,
- const std::string& service_name,
- const std::string& service_protocol) {
- if (!running_)
- return MdnsResponderErrorCode::kUnknownError;
-
- auto it =
- std::find_if(registered_services_.begin(), registered_services_.end(),
- [&service_instance, &service_name,
- &service_protocol](const RegisteredService& service) {
- return service.service_instance == service_instance &&
- service.service_name == service_name &&
- service.service_protocol == service_protocol;
- });
- if (it == registered_services_.end())
- return MdnsResponderErrorCode::kUnknownError;
-
- registered_services_.erase(it);
- return MdnsResponderErrorCode::kNoError;
-}
-
-MdnsResponderErrorCode FakeMdnsResponderAdapter::UpdateTxtData(
- const std::string& service_instance,
- const std::string& service_name,
- const std::string& service_protocol,
- const std::map<std::string, std::string>& txt_data) {
- if (!running_)
- return MdnsResponderErrorCode::kUnknownError;
-
- auto it =
- std::find_if(registered_services_.begin(), registered_services_.end(),
- [&service_instance, &service_name,
- &service_protocol](const RegisteredService& service) {
- return service.service_instance == service_instance &&
- service.service_name == service_name &&
- service.service_protocol == service_protocol;
- });
- if (it == registered_services_.end())
- return MdnsResponderErrorCode::kUnknownError;
-
- it->txt_data = txt_data;
- return MdnsResponderErrorCode::kNoError;
-}
-
-} // namespace osp
-} // namespace openscreen