/* * Copyright © 2014 Canonical Ltd. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version 3, * as published by the Free Software Foundation. * * 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by: Thomas Voß */ #ifndef MOCK_OFONO_H_ #define MOCK_OFONO_H_ #include #include #include namespace mock { struct Ofono { struct Modem { struct NetworkRegistration { NetworkRegistration(const core::dbus::Bus::Ptr& bus, const core::dbus::Object::Ptr& object) : bus{bus}, object{object} { // Saves us some typing. using namespace ::testing; object->install_method_handler([this](const core::dbus::Message::Ptr& msg) { auto reply = core::dbus::Message::make_method_return(msg); reply->writer() << get_properties(); this->bus->send(reply); }); ON_CALL(*this, get_properties()).WillByDefault(Invoke(this, &NetworkRegistration::get_properties_impl)); ON_CALL(*this, status()).WillByDefault(Return(org::Ofono::Manager::Modem::NetworkRegistration::Status::unknown)); ON_CALL(*this, technology()).WillByDefault(Return(org::Ofono::Manager::Modem::NetworkRegistration::Technology::gsm())); ON_CALL(*this, location_area_code()).WillByDefault(Return(0)); ON_CALL(*this, cell_id()).WillByDefault(Return(0)); ON_CALL(*this, mcc()).WillByDefault(Return("0")); ON_CALL(*this, mnc()).WillByDefault(Return("0")); } virtual org::Ofono::Manager::Modem::NetworkRegistration::GetProperties::ValueType get_properties_impl() { org::Ofono::Manager::Modem::NetworkRegistration::GetProperties::ValueType result; result[org::Ofono::Manager::Modem::NetworkRegistration::Status::name()] = core::dbus::types::Variant::encode(status()); result[org::Ofono::Manager::Modem::NetworkRegistration::LocationAreaCode::name()] = core::dbus::types::Variant::encode(location_area_code()); result[org::Ofono::Manager::Modem::NetworkRegistration::CellId::name()] = core::dbus::types::Variant::encode(cell_id()); result[org::Ofono::Manager::Modem::NetworkRegistration::MobileCountryCode::name()] = core::dbus::types::Variant::encode(mcc()); result[org::Ofono::Manager::Modem::NetworkRegistration::MobileNetworkCode::name()] = core::dbus::types::Variant::encode(mnc()); result[org::Ofono::Manager::Modem::NetworkRegistration::Technology::name()] = core::dbus::types::Variant::encode(technology()); result[org::Ofono::Manager::Modem::NetworkRegistration::Strength::name()] = core::dbus::types::Variant::encode(strength()); return result; } MOCK_METHOD0(get_properties, org::Ofono::Manager::Modem::NetworkRegistration::GetProperties::ValueType()); MOCK_METHOD0(status, org::Ofono::Manager::Modem::NetworkRegistration::Status::ValueType()); MOCK_METHOD0(location_area_code, org::Ofono::Manager::Modem::NetworkRegistration::LocationAreaCode::ValueType()); MOCK_METHOD0(cell_id, org::Ofono::Manager::Modem::NetworkRegistration::CellId::ValueType()); MOCK_METHOD0(mcc, org::Ofono::Manager::Modem::NetworkRegistration::MobileCountryCode::ValueType()); MOCK_METHOD0(mnc, org::Ofono::Manager::Modem::NetworkRegistration::MobileNetworkCode::ValueType()); MOCK_METHOD0(technology, org::Ofono::Manager::Modem::NetworkRegistration::Technology::ValueType()); MOCK_METHOD0(strength, org::Ofono::Manager::Modem::NetworkRegistration::Strength::ValueType()); core::dbus::Bus::Ptr bus; core::dbus::Object::Ptr object; }; // Constructs a modem without a network registration Modem(const core::dbus::Bus::Ptr& bus, const core::dbus::Object::Ptr& object) : bus{bus}, object{object} { // Saves us some typing. using namespace ::testing; object->install_method_handler([this](const core::dbus::Message::Ptr& msg) { auto reply = core::dbus::Message::make_method_return(msg); reply->writer() << get_properties(); this->bus->send(reply); }); ON_CALL(*this, get_properties()).WillByDefault(Invoke(this, &Modem::get_properties_impl)); ON_CALL(*this, is_powered()).WillByDefault(Return(true)); ON_CALL(*this, is_online()).WillByDefault(Return(true)); ON_CALL(*this, is_locked_down()).WillByDefault(Return(true)); ON_CALL(*this, name()).WillByDefault(Return(__PRETTY_FUNCTION__)); ON_CALL(*this, manufacturer()).WillByDefault(Return(__PRETTY_FUNCTION__)); ON_CALL(*this, model()).WillByDefault(Return(__PRETTY_FUNCTION__)); ON_CALL(*this, revision()).WillByDefault(Return(__PRETTY_FUNCTION__)); ON_CALL(*this, serial()).WillByDefault(Return(__PRETTY_FUNCTION__)); ON_CALL(*this, features()).WillByDefault(Return(std::vector())); ON_CALL(*this, interfaces()).WillByDefault(Return(std::vector())); ON_CALL(*this, type()).WillByDefault(Return(org::Ofono::Manager::Modem::Properties::Type::test)); } // Constructs a modem without a network registration Modem(const core::dbus::Bus::Ptr& bus, const core::dbus::Object::Ptr& object, const std::shared_ptr& net_reg) : Modem{bus, object} { // Saves us some typing. using namespace ::testing; network_registration = net_reg; object->install_method_handler([this](const core::dbus::Message::Ptr& msg) { auto reply = core::dbus::Message::make_method_return(msg); reply->writer() << get_properties(); this->bus->send(reply); }); ON_CALL(*this, features()).WillByDefault(Return(std::vector{{org::Ofono::Manager::Modem::Properties::Features::net}})); ON_CALL(*this, interfaces()).WillByDefault(Return(std::vector{{org::Ofono::Manager::Modem::Properties::Interfaces::network_registration}})); } virtual ~Modem() = default; virtual org::Ofono::Manager::Modem::GetProperties::ValueType get_properties_impl() { org::Ofono::Manager::Modem::GetProperties::ValueType result; result[org::Ofono::Manager::Modem::Properties::Powered::name()] = core::dbus::types::Variant::encode(is_powered()); result[org::Ofono::Manager::Modem::Properties::Online::name()] = core::dbus::types::Variant::encode(is_online()); result[org::Ofono::Manager::Modem::Properties::Lockdown::name()] = core::dbus::types::Variant::encode(is_locked_down()); result[org::Ofono::Manager::Modem::Properties::Name::name()] = core::dbus::types::Variant::encode(name()); result[org::Ofono::Manager::Modem::Properties::Manufacturer::name()] = core::dbus::types::Variant::encode(manufacturer()); result[org::Ofono::Manager::Modem::Properties::Model::name()] = core::dbus::types::Variant::encode(model()); result[org::Ofono::Manager::Modem::Properties::Revision::name()] = core::dbus::types::Variant::encode(revision()); result[org::Ofono::Manager::Modem::Properties::Serial::name()] = core::dbus::types::Variant::encode(serial()); result[org::Ofono::Manager::Modem::Properties::Features::name()] = core::dbus::types::Variant::encode(features()); result[org::Ofono::Manager::Modem::Properties::Interfaces::name()] = core::dbus::types::Variant::encode(interfaces()); result[org::Ofono::Manager::Modem::Properties::Type::name()] = core::dbus::types::Variant::encode(type()); return result; } MOCK_METHOD0(get_properties, org::Ofono::Manager::Modem::GetProperties::ValueType()); MOCK_METHOD0(is_powered, org::Ofono::Manager::Modem::Properties::Powered::ValueType()); MOCK_METHOD0(is_online, org::Ofono::Manager::Modem::Properties::Online::ValueType()); MOCK_METHOD0(is_locked_down, org::Ofono::Manager::Modem::Properties::Lockdown::ValueType()); MOCK_METHOD0(name, org::Ofono::Manager::Modem::Properties::Name::ValueType()); MOCK_METHOD0(manufacturer, org::Ofono::Manager::Modem::Properties::Manufacturer::ValueType()); MOCK_METHOD0(model, org::Ofono::Manager::Modem::Properties::Model::ValueType()); MOCK_METHOD0(revision, org::Ofono::Manager::Modem::Properties::Revision::ValueType()); MOCK_METHOD0(serial, org::Ofono::Manager::Modem::Properties::Serial::ValueType()); MOCK_METHOD0(features, org::Ofono::Manager::Modem::Properties::Features::ValueType()); MOCK_METHOD0(interfaces, org::Ofono::Manager::Modem::Properties::Interfaces::ValueType()); MOCK_METHOD0(type, org::Ofono::Manager::Modem::Properties::Type::ValueType()); // We are adding implementing the modem interface on this object. core::dbus::Bus::Ptr bus; core::dbus::Object::Ptr object; // A modem might have a network registration. std::shared_ptr network_registration; }; struct Manager { Manager(const core::dbus::Bus::Ptr& bus, const core::dbus::Object::Ptr& object) : bus{bus}, manager{object} { using namespace ::testing; ON_CALL(*this, get_modems()).WillByDefault(Return(std::vector{})); manager->install_method_handler([this](const core::dbus::Message::Ptr& msg) { auto reply = core::dbus::Message::make_method_return(msg); reply->writer() << get_modems(); this->bus->send(reply); }); } MOCK_METHOD0(get_modems, std::vector()); core::dbus::Bus::Ptr bus; core::dbus::Object::Ptr manager; }; }; } #endif // MOCK_OFONO_H_