blob: d97b477cd0563ea21a1307b80a46e5aa0625f021 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMEOS_SERVICES_SECURE_CHANNEL_FAKE_BLE_ADVERTISER_H_
#define CHROMEOS_SERVICES_SECURE_CHANNEL_FAKE_BLE_ADVERTISER_H_
#include <list>
#include <memory>
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>
#include "base/macros.h"
#include "base/optional.h"
#include "chromeos/services/secure_channel/ble_advertiser.h"
#include "chromeos/services/secure_channel/device_id_pair.h"
#include "chromeos/services/secure_channel/public/cpp/shared/connection_priority.h"
#include "chromeos/services/secure_channel/shared_resource_scheduler.h"
namespace chromeos {
namespace secure_channel {
// Test BleAdvertisementScheduler implementation, which internally uses a
// SharedResourceScheduler to store the provided requests.
class FakeBleAdvertiser : public BleAdvertiser {
public:
explicit FakeBleAdvertiser(Delegate* delegate);
~FakeBleAdvertiser() override;
const std::list<DeviceIdPair>& GetRequestsForPriority(
ConnectionPriority connection_priority);
base::Optional<ConnectionPriority> GetPriorityForRequest(
const DeviceIdPair& request) const;
std::vector<DeviceIdPair> GetAllRequestsForRemoteDevice(
const std::string& remote_device_id);
void NotifyAdvertisingSlotEnded(
const DeviceIdPair& device_id_pair,
bool replaced_by_higher_priority_advertisement);
void NotifyFailureToGenerateAdvertisement(const DeviceIdPair& device_id_pair);
private:
// BleAdvertiser:
void AddAdvertisementRequest(const DeviceIdPair& request,
ConnectionPriority connection_priority) override;
void UpdateAdvertisementRequestPriority(
const DeviceIdPair& request,
ConnectionPriority connection_priority) override;
void RemoveAdvertisementRequest(const DeviceIdPair& request) override;
base::flat_map<ConnectionPriority, std::list<DeviceIdPair>>&
priority_to_queued_requests_map() const {
return scheduler_->priority_to_queued_requests_map_;
}
const base::flat_map<DeviceIdPair, ConnectionPriority>&
request_to_priority_map() const {
return scheduler_->request_to_priority_map_;
}
std::unique_ptr<SharedResourceScheduler> scheduler_;
DISALLOW_COPY_AND_ASSIGN(FakeBleAdvertiser);
};
// Test BleAdvertiser::Delegate implementation.
class FakeBleAdvertiserDelegate : public BleAdvertiser::Delegate {
public:
FakeBleAdvertiserDelegate();
~FakeBleAdvertiserDelegate() override;
using SlotEndedEvent = std::pair<DeviceIdPair, bool>;
const std::vector<SlotEndedEvent>& slot_ended_events() const {
return slot_ended_events_;
}
const std::vector<DeviceIdPair>& advertisement_generation_failures() const {
return advertisement_generation_failures_;
}
private:
// BleAdvertiser::Delegate:
void OnAdvertisingSlotEnded(
const DeviceIdPair& device_id_pair,
bool replaced_by_higher_priority_advertisement) override;
void OnFailureToGenerateAdvertisement(
const DeviceIdPair& device_id_pair) override;
std::vector<SlotEndedEvent> slot_ended_events_;
std::vector<DeviceIdPair> advertisement_generation_failures_;
DISALLOW_COPY_AND_ASSIGN(FakeBleAdvertiserDelegate);
};
} // namespace secure_channel
} // namespace chromeos
#endif // CHROMEOS_SERVICES_SECURE_CHANNEL_FAKE_BLE_ADVERTISER_H_