15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/dbus/cros_dbus_service.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/message.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/mock_bus.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/mock_exported_object.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/mock_object_proxy.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/object_path.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Eq; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Invoke; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Return; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockProxyResolutionService 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public CrosDBusService::ServiceProviderInterface { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(Start, void(scoped_refptr<dbus::ExportedObject> 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exported_object)); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CrosDBusServiceTest : public testing::Test { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosDBusServiceTest() { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates an instance of CrosDBusService with mocks injected. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a mock bus. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::Bus::Options options; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options.bus_type = dbus::Bus::SYSTEM; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_bus_ = new dbus::MockBus(options); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ShutdownAndBlock() will be called in TearDown(). 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(*mock_bus_.get(), ShutdownAndBlock()).WillOnce(Return()); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a mock exported object that behaves as 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // org.chromium.CrosDBusService. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_exported_object_ = 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new dbus::MockExportedObject(mock_bus_.get(), 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::ObjectPath(kLibCrosServicePath)); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |mock_bus_|'s GetExportedObject() will return mock_exported_object_| 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for the given service name and the object path. 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_CALL(*mock_bus_.get(), 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GetExportedObject(dbus::ObjectPath(kLibCrosServicePath))) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(mock_exported_object_.get())); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a mock proxy resolution service. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockProxyResolutionService* mock_proxy_resolution_service_provider = 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new MockProxyResolutionService; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start() will be called with |mock_exported_object_|. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_proxy_resolution_service_provider, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Start(Eq(mock_exported_object_))).WillOnce(Return()); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the cros service with the mocks injected. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosDBusService::InitializeForTesting( 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) mock_bus_.get(), mock_proxy_resolution_service_provider); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shutdown the cros service. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosDBusService::Shutdown(); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shutdown the bus. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_bus_->ShutdownAndBlock(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<dbus::MockBus> mock_bus_; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<dbus::MockExportedObject> mock_exported_object_; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CrosDBusServiceTest, Start) { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simply start the service and see if mock expectations are met: 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - The service object is exported by GetExportedObject() 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - The proxy resolution service is started. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 91