Home | History | Annotate | Download | only in dbus
      1 // Copyright 2014 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_BLUETOOTH_GATT_MANAGER_CLIENT_H_
      6 #define CHROMEOS_DBUS_FAKE_BLUETOOTH_GATT_MANAGER_CLIENT_H_
      7 
      8 #include <map>
      9 #include <string>
     10 #include <utility>
     11 
     12 #include "base/callback.h"
     13 #include "chromeos/chromeos_export.h"
     14 #include "chromeos/dbus/bluetooth_gatt_manager_client.h"
     15 #include "dbus/object_path.h"
     16 
     17 namespace chromeos {
     18 
     19 class FakeBluetoothGattCharacteristicServiceProvider;
     20 class FakeBluetoothGattDescriptorServiceProvider;
     21 class FakeBluetoothGattServiceServiceProvider;
     22 
     23 // FakeBluetoothGattManagerClient simulates the behavior of the Bluetooth
     24 // daemon's GATT manager object and is used both in test cases in place of a
     25 // mock and on the Linux desktop.
     26 class CHROMEOS_EXPORT FakeBluetoothGattManagerClient
     27     : public BluetoothGattManagerClient {
     28  public:
     29   FakeBluetoothGattManagerClient();
     30   virtual ~FakeBluetoothGattManagerClient();
     31 
     32   // DBusClient override.
     33   virtual void Init(dbus::Bus* bus) OVERRIDE;
     34 
     35   // BluetoothGattManagerClient overrides.
     36   virtual void RegisterService(const dbus::ObjectPath& service_path,
     37                                const Options& options,
     38                                const base::Closure& callback,
     39                                const ErrorCallback& error_callback) OVERRIDE;
     40   virtual void UnregisterService(const dbus::ObjectPath& service_path,
     41                                  const base::Closure& callback,
     42                                  const ErrorCallback& error_callback) OVERRIDE;
     43 
     44   // Register, unregister, and retrieve pointers to service, characteristic, and
     45   // descriptor service providers. Automatically called from the service
     46   // provider constructor and destructors.
     47   void RegisterServiceServiceProvider(
     48       FakeBluetoothGattServiceServiceProvider* provider);
     49   void RegisterCharacteristicServiceProvider(
     50       FakeBluetoothGattCharacteristicServiceProvider* provider);
     51   void RegisterDescriptorServiceProvider(
     52       FakeBluetoothGattDescriptorServiceProvider* provider);
     53 
     54   void UnregisterServiceServiceProvider(
     55       FakeBluetoothGattServiceServiceProvider* provider);
     56   void UnregisterCharacteristicServiceProvider(
     57       FakeBluetoothGattCharacteristicServiceProvider* provider);
     58   void UnregisterDescriptorServiceProvider(
     59       FakeBluetoothGattDescriptorServiceProvider* provider);
     60 
     61   // Return a pointer to the service provider that corresponds to the object
     62   // path |object_path| if it exists.
     63   FakeBluetoothGattServiceServiceProvider*
     64       GetServiceServiceProvider(const dbus::ObjectPath& object_path) const;
     65   FakeBluetoothGattCharacteristicServiceProvider*
     66       GetCharacteristicServiceProvider(
     67           const dbus::ObjectPath& object_path) const;
     68   FakeBluetoothGattDescriptorServiceProvider*
     69       GetDescriptorServiceProvider(const dbus::ObjectPath& object_path) const;
     70 
     71   // Returns true, if a GATT service with object path |object_path| was
     72   // registered with the GATT manager using RegisterService.
     73   bool IsServiceRegistered(const dbus::ObjectPath& object_path) const;
     74 
     75  private:
     76   // Mappings for GATT service, characteristic, and descriptor service
     77   // providers. The fake GATT manager stores references to all instances
     78   // created so that they can be obtained by tests.
     79   typedef std::map<
     80       dbus::ObjectPath, FakeBluetoothGattCharacteristicServiceProvider*>
     81       CharacteristicMap;
     82   typedef std::map<
     83       dbus::ObjectPath, FakeBluetoothGattDescriptorServiceProvider*>
     84       DescriptorMap;
     85 
     86   // The mapping for services is from object paths to pairs of boolean and
     87   // service provider pointer, where the boolean denotes whether or not the
     88   // service is already registered.
     89   typedef std::pair<bool, FakeBluetoothGattServiceServiceProvider*>
     90       ServiceProvider;
     91   typedef std::map<dbus::ObjectPath, ServiceProvider> ServiceMap;
     92 
     93   ServiceMap service_map_;
     94   CharacteristicMap characteristic_map_;
     95   DescriptorMap descriptor_map_;
     96 
     97   DISALLOW_COPY_AND_ASSIGN(FakeBluetoothGattManagerClient);
     98 };
     99 
    100 }  // namespace chromeos
    101 
    102 #endif  // CHROMEOS_DBUS_FAKE_BLUETOOTH_GATT_MANAGER_CLIENT_H_
    103