shill_service_client_unittest.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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 "base/bind.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/shill_client_unittest_base.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/shill_service_client.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/message.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/object_path.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/values_util.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::_; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::ByRef; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kExampleServicePath[] = "/foo/bar"; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ShillServiceClientTest : public ShillClientUnittestBase { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShillServiceClientTest() 2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) : ShillClientUnittestBase(shill::kFlimflamServiceInterface, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::ObjectPath(kExampleServicePath)) { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShillClientUnittestBase::SetUp(); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a client with the mock bus. 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) client_.reset(ShillServiceClient::Create()); 37424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) client_->Init(mock_bus_.get()); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the message loop to run the signal connection result callback. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_loop_.RunUntilIdle(); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShillClientUnittestBase::TearDown(); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ShillServiceClient> client_; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ShillServiceClientTest, PropertyChanged) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kValue = 42; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a signal. 5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) dbus::Signal signal(shill::kFlimflamServiceInterface, 5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kMonitorPropertyChanged); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::MessageWriter writer(&signal); 5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) writer.AppendString(shill::kSignalStrengthProperty); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.AppendVariantOfByte(kValue); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FundamentalValue value(kValue); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockPropertyChangeObserver observer; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPropertyChanged( 6468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kSignalStrengthProperty, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueEq(ByRef(value)))).Times(1); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add the observer 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_->AddPropertyChangedObserver( 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::ObjectPath(kExampleServicePath), 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &observer); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the signal callback. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendPropertyChangedSignal(&signal); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove the observer. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_->RemovePropertyChangedObserver( 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::ObjectPath(kExampleServicePath), 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &observer); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer, OnPropertyChanged(_, _)).Times(0); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the signal callback again and make sure the observer isn't called. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendPropertyChangedSignal(&signal); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ShillServiceClientTest, GetProperties) { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kValue = 42; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create response. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::MessageWriter writer(response.get()); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::MessageWriter array_writer(NULL); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.OpenArray("{sv}", &array_writer); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::MessageWriter entry_writer(NULL); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) array_writer.OpenDictEntry(&entry_writer); 9568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) entry_writer.AppendString(shill::kSignalStrengthProperty); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry_writer.AppendVariantOfByte(kValue); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) array_writer.CloseContainer(&entry_writer); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.CloseContainer(&array_writer); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue value; 10268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) value.SetWithoutPathExpansion(shill::kSignalStrengthProperty, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Value::CreateIntegerValue(kValue)); 10468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PrepareForMethodCall(shill::kGetPropertiesFunction, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ExpectNoArgument), 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) response.get()); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call method. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_->GetProperties(dbus::ObjectPath(kExampleServicePath), 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ExpectDictionaryValueResult, &value)); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the message loop. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_loop_.RunUntilIdle(); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ShillServiceClientTest, SetProperty) { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kValue[] = "passphrase"; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create response. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::StringValue value(kValue); 12168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PrepareForMethodCall(shill::kSetPropertyFunction, 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ExpectStringAndValueArguments, 12368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kPassphraseProperty, 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &value), 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) response.get()); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call method. 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockClosure mock_closure; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockErrorCallback mock_error_callback; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_->SetProperty(dbus::ObjectPath(kExampleServicePath), 13068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kPassphraseProperty, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_closure.GetCallback(), 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_error_callback.GetCallback()); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_closure, Run()).Times(1); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_error_callback, Run(_, _)).Times(0); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the message loop. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_loop_.RunUntilIdle(); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1417dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(ShillServiceClientTest, SetProperties) { 1427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Create response. 1437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); 1447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Set expectations. 1467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<base::DictionaryValue> arg(CreateExampleServiceProperties()); 1477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch PrepareForMethodCall(shill::kSetPropertiesFunction, 1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&ExpectDictionaryValueArgument, arg.get()), 1497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch response.get()); 1507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Call method. 1527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch MockClosure mock_closure; 1537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch MockErrorCallback mock_error_callback; 1547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch client_->SetProperties(dbus::ObjectPath(kExampleServicePath), 1557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch *arg, 1567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch mock_closure.GetCallback(), 1577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch mock_error_callback.GetCallback()); 1587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_CALL(mock_closure, Run()).Times(1); 1597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_CALL(mock_error_callback, Run(_, _)).Times(0); 1607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Run the message loop. 1627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch message_loop_.RunUntilIdle(); 1637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ShillServiceClientTest, ClearProperty) { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create response. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 17068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PrepareForMethodCall(shill::kClearPropertyFunction, 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ExpectStringArgument, 17268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kPassphraseProperty), 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) response.get()); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call method. 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockClosure mock_closure; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockErrorCallback mock_error_callback; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_->ClearProperty(dbus::ObjectPath(kExampleServicePath), 17868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kPassphraseProperty, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_closure.GetCallback(), 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_error_callback.GetCallback()); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_closure, Run()).Times(1); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_error_callback, Run(_, _)).Times(0); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the message loop. 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_loop_.RunUntilIdle(); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ShillServiceClientTest, ClearProperties) { 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create response. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::MessageWriter writer(response.get()); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbus::MessageWriter array_writer(NULL); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.OpenArray("b", &array_writer); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) array_writer.AppendBool(true); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) array_writer.AppendBool(true); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) writer.CloseContainer(&array_writer); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> keys; 20068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) keys.push_back(shill::kPassphraseProperty); 20168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) keys.push_back(shill::kSignalStrengthProperty); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrepareForMethodCall(shill::kClearPropertiesFunction, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ExpectArrayOfStringsArgument, keys), 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) response.get()); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call method. 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockListValueCallback mock_list_value_callback; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockErrorCallback mock_error_callback; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_->ClearProperties(dbus::ObjectPath(kExampleServicePath), 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keys, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_list_value_callback.GetCallback(), 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_error_callback.GetCallback()); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_list_value_callback, Run(_)).Times(1); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_error_callback, Run(_, _)).Times(0); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the message loop. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_loop_.RunUntilIdle(); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ShillServiceClientTest, Connect) { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create response. 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockClosure mock_closure; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockErrorCallback mock_error_callback; 22668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PrepareForMethodCall(shill::kConnectFunction, 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ExpectNoArgument), 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) response.get()); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_closure, Run()).Times(1); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call method. 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_->Connect(dbus::ObjectPath(kExampleServicePath), 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_closure.GetCallback(), 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_error_callback.GetCallback()); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the message loop. 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_loop_.RunUntilIdle(); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ShillServiceClientTest, Disconnect) { 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create response. 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 24468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PrepareForMethodCall(shill::kDisconnectFunction, 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ExpectNoArgument), 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) response.get()); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call method. 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockClosure mock_closure; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockErrorCallback mock_error_callback; 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_->Disconnect(dbus::ObjectPath(kExampleServicePath), 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_closure.GetCallback(), 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_error_callback.GetCallback()); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_closure, Run()).Times(1); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_error_callback, Run(_, _)).Times(0); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the message loop. 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_loop_.RunUntilIdle(); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ShillServiceClientTest, Remove) { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create response. 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 26568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PrepareForMethodCall(shill::kRemoveServiceFunction, 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ExpectNoArgument), 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) response.get()); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call method. 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockClosure mock_closure; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockErrorCallback mock_error_callback; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_->Remove(dbus::ObjectPath(kExampleServicePath), 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_closure.GetCallback(), 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_error_callback.GetCallback()); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_closure, Run()).Times(1); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_error_callback, Run(_, _)).Times(0); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the message loop. 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_loop_.RunUntilIdle(); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ShillServiceClientTest, ActivateCellularModem) { 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kCarrier[] = "carrier"; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create response. 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set expectations. 28768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PrepareForMethodCall(shill::kActivateCellularModemFunction, 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ExpectStringArgument, kCarrier), 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) response.get()); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call method. 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockClosure mock_closure; 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockErrorCallback mock_error_callback; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client_->ActivateCellularModem(dbus::ObjectPath(kExampleServicePath), 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCarrier, 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_closure.GetCallback(), 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_error_callback.GetCallback()); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_closure, Run()).Times(1); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_error_callback, Run(_, _)).Times(0); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the message loop. 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_loop_.RunUntilIdle(); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 305