blob: bc4f28cf474e1128cc68f5b68ffc59f68731af74 [file] [log] [blame]
// Copyright 2018 The Chromium OS 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 LIBBRILLO_BRILLO_BLKDEV_UTILS_DEVICE_MAPPER_FAKE_H_
#define LIBBRILLO_BRILLO_BLKDEV_UTILS_DEVICE_MAPPER_FAKE_H_
#include <memory>
#include <string>
#include <vector>
#include <base/files/file_path.h>
#include <brillo/blkdev_utils/device_mapper.h>
#include <brillo/blkdev_utils/device_mapper_fake.h>
#include <brillo/blkdev_utils/device_mapper_task.h>
#include <brillo/secure_blob.h>
namespace brillo {
namespace fake {
// Fake implementation of dm_task primitives.
// ------------------------------------------
// dm_task is an opaque type in libdevmapper so we
// define a minimal struct for DmTask and DmTarget
// to avoid linking in libdevmapper.
struct DmTarget {
uint64_t start;
uint64_t size;
std::string type;
SecureBlob parameters;
};
struct DmTask {
int type;
std::string name;
std::vector<DmTarget> targets;
};
// Fake task factory: creates fake tasks that
// stub task info into a map.
std::unique_ptr<DevmapperTask> CreateDevmapperTask(int type);
class FakeDevmapperTask : public brillo::DevmapperTask {
public:
explicit FakeDevmapperTask(int type);
~FakeDevmapperTask() override = default;
bool SetName(const std::string& name) override;
bool AddTarget(uint64_t start,
uint64_t sectors,
const std::string& target,
const SecureBlob& parameters) override;
bool GetNextTarget(uint64_t* start,
uint64_t* sectors,
std::string* target,
SecureBlob* parameters) override;
bool Run(bool udev_sync = true) override;
private:
std::unique_ptr<DmTask> task_;
};
} // namespace fake
} // namespace brillo
#endif // LIBBRILLO_BRILLO_BLKDEV_UTILS_DEVICE_MAPPER_FAKE_H_