1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROMEOS_DBUS_FAKE_SHILL_MANAGER_CLIENT_H_ 6 #define CHROMEOS_DBUS_FAKE_SHILL_MANAGER_CLIENT_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/callback.h" 12 #include "chromeos/chromeos_export.h" 13 #include "chromeos/dbus/shill_manager_client.h" 14 15 namespace chromeos { 16 17 // A fake implementation of ShillManagerClient. This works in close coordination 18 // with FakeShillServiceClient. FakeShillDeviceClient, and 19 // FakeShillProfileClient, and is not intended to be used independently. 20 class CHROMEOS_EXPORT FakeShillManagerClient 21 : public ShillManagerClient, 22 public ShillManagerClient::TestInterface { 23 public: 24 FakeShillManagerClient(); 25 virtual ~FakeShillManagerClient(); 26 27 // ShillManagerClient overrides 28 virtual void Init(dbus::Bus* bus) OVERRIDE; 29 virtual void AddPropertyChangedObserver( 30 ShillPropertyChangedObserver* observer) OVERRIDE; 31 virtual void RemovePropertyChangedObserver( 32 ShillPropertyChangedObserver* observer) OVERRIDE; 33 virtual void GetProperties(const DictionaryValueCallback& callback) OVERRIDE; 34 virtual void GetNetworksForGeolocation( 35 const DictionaryValueCallback& callback) OVERRIDE; 36 virtual void SetProperty(const std::string& name, 37 const base::Value& value, 38 const base::Closure& callback, 39 const ErrorCallback& error_callback) OVERRIDE; 40 virtual void RequestScan(const std::string& type, 41 const base::Closure& callback, 42 const ErrorCallback& error_callback) OVERRIDE; 43 virtual void EnableTechnology( 44 const std::string& type, 45 const base::Closure& callback, 46 const ErrorCallback& error_callback) OVERRIDE; 47 virtual void DisableTechnology( 48 const std::string& type, 49 const base::Closure& callback, 50 const ErrorCallback& error_callback) OVERRIDE; 51 virtual void ConfigureService( 52 const base::DictionaryValue& properties, 53 const ObjectPathCallback& callback, 54 const ErrorCallback& error_callback) OVERRIDE; 55 virtual void ConfigureServiceForProfile( 56 const dbus::ObjectPath& profile_path, 57 const base::DictionaryValue& properties, 58 const ObjectPathCallback& callback, 59 const ErrorCallback& error_callback) OVERRIDE; 60 virtual void GetService( 61 const base::DictionaryValue& properties, 62 const ObjectPathCallback& callback, 63 const ErrorCallback& error_callback) OVERRIDE; 64 virtual void VerifyDestination(const VerificationProperties& properties, 65 const BooleanCallback& callback, 66 const ErrorCallback& error_callback) OVERRIDE; 67 virtual void VerifyAndEncryptCredentials( 68 const VerificationProperties& properties, 69 const std::string& service_path, 70 const StringCallback& callback, 71 const ErrorCallback& error_callback) OVERRIDE; 72 virtual void VerifyAndEncryptData( 73 const VerificationProperties& properties, 74 const std::string& data, 75 const StringCallback& callback, 76 const ErrorCallback& error_callback) OVERRIDE; 77 virtual void ConnectToBestServices( 78 const base::Closure& callback, 79 const ErrorCallback& error_callback) OVERRIDE; 80 virtual ShillManagerClient::TestInterface* GetTestInterface() OVERRIDE; 81 82 // ShillManagerClient::TestInterface overrides. 83 virtual void AddDevice(const std::string& device_path) OVERRIDE; 84 virtual void RemoveDevice(const std::string& device_path) OVERRIDE; 85 virtual void ClearDevices() OVERRIDE; 86 virtual void AddTechnology(const std::string& type, bool enabled) OVERRIDE; 87 virtual void RemoveTechnology(const std::string& type) OVERRIDE; 88 virtual void SetTechnologyInitializing(const std::string& type, 89 bool initializing) OVERRIDE; 90 virtual void AddGeoNetwork(const std::string& technology, 91 const base::DictionaryValue& network) OVERRIDE; 92 virtual void AddProfile(const std::string& profile_path) OVERRIDE; 93 virtual void ClearProperties() OVERRIDE; 94 virtual void SetManagerProperty(const std::string& key, 95 const base::Value& value) OVERRIDE; 96 virtual void AddManagerService(const std::string& service_path, 97 bool notify_observers) OVERRIDE; 98 virtual void RemoveManagerService(const std::string& service_path) OVERRIDE; 99 virtual void ClearManagerServices() OVERRIDE; 100 virtual void ServiceStateChanged(const std::string& service_path, 101 const std::string& state) OVERRIDE; 102 virtual void SortManagerServices(bool notify) OVERRIDE; 103 virtual void SetupDefaultEnvironment() OVERRIDE; 104 virtual int GetInteractiveDelay() const OVERRIDE; 105 virtual void SetBestServiceToConnect( 106 const std::string& service_path) OVERRIDE; 107 108 // Constants used for testing. 109 static const char kFakeEthernetNetworkPath[]; 110 111 private: 112 void SetDefaultProperties(); 113 void PassStubProperties(const DictionaryValueCallback& callback) const; 114 void PassStubGeoNetworks(const DictionaryValueCallback& callback) const; 115 void CallNotifyObserversPropertyChanged(const std::string& property); 116 void NotifyObserversPropertyChanged(const std::string& property); 117 base::ListValue* GetListProperty(const std::string& property); 118 bool TechnologyEnabled(const std::string& type) const; 119 void SetTechnologyEnabled(const std::string& type, 120 const base::Closure& callback, 121 bool enabled); 122 base::ListValue* GetEnabledServiceList(const std::string& property) const; 123 void ScanCompleted(const std::string& device_path, 124 const base::Closure& callback); 125 126 // Parses the command line for Shill stub switches and sets initial states. 127 // Uses comma-separated name-value pairs (see SplitStringIntoKeyValuePairs): 128 // interactive={delay} - sets delay in seconds for interactive UI 129 // {wifi,cellular,etc}={on,off,disabled,none} - sets initial state for type 130 void ParseCommandLineSwitch(); 131 bool ParseOption(const std::string& arg0, const std::string& arg1); 132 bool SetInitialNetworkState(std::string type_arg, std::string state_arg); 133 std::string GetInitialStateForType(const std::string& type, 134 bool* enabled); 135 136 // Dictionary of property name -> property value 137 base::DictionaryValue stub_properties_; 138 139 // Dictionary of technology -> list of property dictionaries 140 base::DictionaryValue stub_geo_networks_; 141 142 // Seconds to delay interactive actions 143 int interactive_delay_; 144 145 // Initial state for fake services. 146 std::map<std::string, std::string> shill_initial_state_map_; 147 148 ObserverList<ShillPropertyChangedObserver> observer_list_; 149 150 // Note: This should remain the last member so it'll be destroyed and 151 // invalidate its weak pointers before any other members are destroyed. 152 base::WeakPtrFactory<FakeShillManagerClient> weak_ptr_factory_; 153 154 // Track the default service for signaling Manager.DefaultService. 155 std::string default_service_; 156 157 // 'Best' service to connect to on ConnectToBestServices() calls. 158 std::string best_service_; 159 160 DISALLOW_COPY_AND_ASSIGN(FakeShillManagerClient); 161 }; 162 163 } // namespace chromeos 164 165 #endif // CHROMEOS_DBUS_FAKE_SHILL_MANAGER_CLIENT_H_ 166