Move TempDevice to test_util.h

TempDevice is useful class for tests, move it to test_util.h to improve
its visibility and make it usable by other tests.

Bug: none
Test: none
Change-Id: Idad5667844b10559b24f8f5e657e47d99e14209e
Signed-off-by: Alessio Balsini <balsini@google.com>
This commit is contained in:
Alessio Balsini 2019-10-10 20:47:29 +01:00
parent cad2fc2429
commit 5e6dc03fd5
2 changed files with 48 additions and 44 deletions

View file

@ -47,50 +47,6 @@ TEST(libdm, HasMinimumTargets) {
ASSERT_TRUE(dm.GetTargetByName("linear", &info));
}
// Helper to ensure that device mapper devices are released.
class TempDevice {
public:
TempDevice(const std::string& name, const DmTable& table)
: dm_(DeviceMapper::Instance()), name_(name), valid_(false) {
valid_ = dm_.CreateDevice(name, table, &path_, 5s);
}
TempDevice(TempDevice&& other) noexcept
: dm_(other.dm_), name_(other.name_), path_(other.path_), valid_(other.valid_) {
other.valid_ = false;
}
~TempDevice() {
if (valid_) {
dm_.DeleteDevice(name_);
}
}
bool Destroy() {
if (!valid_) {
return false;
}
valid_ = false;
return dm_.DeleteDevice(name_);
}
std::string path() const { return path_; }
const std::string& name() const { return name_; }
bool valid() const { return valid_; }
TempDevice(const TempDevice&) = delete;
TempDevice& operator=(const TempDevice&) = delete;
TempDevice& operator=(TempDevice&& other) noexcept {
name_ = other.name_;
valid_ = other.valid_;
other.valid_ = false;
return *this;
}
private:
DeviceMapper& dm_;
std::string name_;
std::string path_;
bool valid_;
};
TEST(libdm, DmLinear) {
unique_fd tmp1(CreateTempFile("file_1", 4096));
ASSERT_GE(tmp1, 0);

View file

@ -20,8 +20,12 @@
#include <android-base/unique_fd.h>
#include <stddef.h>
#include <chrono>
#include <string>
#include <libdm/dm.h>
#include <libdm/dm_table.h>
namespace android {
namespace dm {
@ -29,6 +33,50 @@ namespace dm {
// created with a fixed size.
android::base::unique_fd CreateTempFile(const std::string& name, size_t size);
// Helper to ensure that device mapper devices are released.
class TempDevice {
public:
TempDevice(const std::string& name, const DmTable& table)
: dm_(DeviceMapper::Instance()), name_(name), valid_(false) {
valid_ = dm_.CreateDevice(name, table, &path_, std::chrono::seconds(5));
}
TempDevice(TempDevice&& other) noexcept
: dm_(other.dm_), name_(other.name_), path_(other.path_), valid_(other.valid_) {
other.valid_ = false;
}
~TempDevice() {
if (valid_) {
dm_.DeleteDevice(name_);
}
}
bool Destroy() {
if (!valid_) {
return false;
}
valid_ = false;
return dm_.DeleteDevice(name_);
}
std::string path() const { return path_; }
const std::string& name() const { return name_; }
bool valid() const { return valid_; }
TempDevice(const TempDevice&) = delete;
TempDevice& operator=(const TempDevice&) = delete;
TempDevice& operator=(TempDevice&& other) noexcept {
name_ = other.name_;
valid_ = other.valid_;
other.valid_ = false;
return *this;
}
private:
DeviceMapper& dm_;
std::string name_;
std::string path_;
bool valid_;
};
} // namespace dm
} // namespace android