/*
|
* Copyright (C) 2018 The Android Open Source Project
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
|
#include <linux/fs.h>
|
#include <mntent.h>
|
|
#include <algorithm>
|
#include <iterator>
|
#include <set>
|
#include <string>
|
#include <utility>
|
#include <vector>
|
|
#include <android-base/file.h>
|
#include <android-base/properties.h>
|
#include <android-base/strings.h>
|
#include <fstab/fstab.h>
|
#include <gtest/gtest.h>
|
|
#include "../fs_mgr_priv_boot_config.h"
|
|
using namespace android::fs_mgr;
|
|
namespace {
|
|
const std::string cmdline =
|
"rcupdate.rcu_expedited=1 rootwait ro "
|
"init=/init androidboot.bootdevice=1d84000.ufshc "
|
"androidboot.baseband=sdy androidboot.keymaster=1 skip_initramfs "
|
"androidboot.serialno=BLAHBLAHBLAH androidboot.slot_suffix=_a "
|
"androidboot.hardware.platform=sdw813 androidboot.hardware=foo "
|
"androidboot.revision=EVT1.0 androidboot.bootloader=burp-0.1-7521 "
|
"androidboot.hardware.sku=mary androidboot.hardware.radio.subtype=0 "
|
"androidboot.dtbo_idx=2 androidboot.mode=normal "
|
"androidboot.hardware.ddr=1GB,combuchi,LPDDR4X "
|
"androidboot.ddr_info=combuchiandroidboot.ddr_size=2GB "
|
"androidboot.hardware.ufs=2GB,combushi "
|
"androidboot.boottime=0BLE:58,1BLL:22,1BLE:571,2BLL:105,ODT:0,AVB:123 "
|
"androidboot.ramdump=disabled "
|
"dm=\"1 vroot none ro 1,0 10416 verity 1 624684 fec_start 624684\" "
|
"root=/dev/dm-0 "
|
"androidboot.vbmeta.device=PARTUUID=aa08f1a4-c7c9-402e-9a66-9707cafa9ceb "
|
"androidboot.vbmeta.avb_version=\"1.1\" "
|
"androidboot.vbmeta.device_state=unlocked "
|
"androidboot.vbmeta.hash_alg=sha256 androidboot.vbmeta.size=5248 "
|
"androidboot.vbmeta.digest="
|
"ac13147e959861c20f2a6da97d25fe79e60e902c022a371c5c039d31e7c68860 "
|
"androidboot.vbmeta.invalidate_on_error=yes "
|
"androidboot.veritymode=enforcing androidboot.verifiedbootstate=orange "
|
"androidboot.space=\"sha256 5248 androidboot.nospace=nope\" "
|
"printk.devkmsg=on msm_rtb.filter=0x237 ehci-hcd.park=3 "
|
"\"string =\"\"string '\" "
|
"service_locator.enable=1 firmware_class.path=/vendor/firmware "
|
"cgroup.memory=nokmem lpm_levels.sleep_disabled=1 "
|
"buildvariant=userdebug console=null "
|
"terminator=\"truncated";
|
|
const std::vector<std::pair<std::string, std::string>> result_space = {
|
{"rcupdate.rcu_expedited", "1"},
|
{"rootwait", ""},
|
{"ro", ""},
|
{"init", "/init"},
|
{"androidboot.bootdevice", "1d84000.ufshc"},
|
{"androidboot.baseband", "sdy"},
|
{"androidboot.keymaster", "1"},
|
{"skip_initramfs", ""},
|
{"androidboot.serialno", "BLAHBLAHBLAH"},
|
{"androidboot.slot_suffix", "_a"},
|
{"androidboot.hardware.platform", "sdw813"},
|
{"androidboot.hardware", "foo"},
|
{"androidboot.revision", "EVT1.0"},
|
{"androidboot.bootloader", "burp-0.1-7521"},
|
{"androidboot.hardware.sku", "mary"},
|
{"androidboot.hardware.radio.subtype", "0"},
|
{"androidboot.dtbo_idx", "2"},
|
{"androidboot.mode", "normal"},
|
{"androidboot.hardware.ddr", "1GB,combuchi,LPDDR4X"},
|
{"androidboot.ddr_info", "combuchiandroidboot.ddr_size=2GB"},
|
{"androidboot.hardware.ufs", "2GB,combushi"},
|
{"androidboot.boottime", "0BLE:58,1BLL:22,1BLE:571,2BLL:105,ODT:0,AVB:123"},
|
{"androidboot.ramdump", "disabled"},
|
{"dm", "1 vroot none ro 1,0 10416 verity 1 624684 fec_start 624684"},
|
{"root", "/dev/dm-0"},
|
{"androidboot.vbmeta.device", "PARTUUID=aa08f1a4-c7c9-402e-9a66-9707cafa9ceb"},
|
{"androidboot.vbmeta.avb_version", "1.1"},
|
{"androidboot.vbmeta.device_state", "unlocked"},
|
{"androidboot.vbmeta.hash_alg", "sha256"},
|
{"androidboot.vbmeta.size", "5248"},
|
{"androidboot.vbmeta.digest",
|
"ac13147e959861c20f2a6da97d25fe79e60e902c022a371c5c039d31e7c68860"},
|
{"androidboot.vbmeta.invalidate_on_error", "yes"},
|
{"androidboot.veritymode", "enforcing"},
|
{"androidboot.verifiedbootstate", "orange"},
|
{"androidboot.space", "sha256 5248 androidboot.nospace=nope"},
|
{"printk.devkmsg", "on"},
|
{"msm_rtb.filter", "0x237"},
|
{"ehci-hcd.park", "3"},
|
{"string ", "string '"},
|
{"service_locator.enable", "1"},
|
{"firmware_class.path", "/vendor/firmware"},
|
{"cgroup.memory", "nokmem"},
|
{"lpm_levels.sleep_disabled", "1"},
|
{"buildvariant", "userdebug"},
|
{"console", "null"},
|
{"terminator", "truncated"},
|
};
|
|
} // namespace
|
|
TEST(fs_mgr, fs_mgr_parse_boot_config) {
|
EXPECT_EQ(result_space, fs_mgr_parse_boot_config(cmdline));
|
}
|
|
TEST(fs_mgr, fs_mgr_get_boot_config_from_kernel_cmdline) {
|
std::string content;
|
for (const auto& entry : result_space) {
|
static constexpr char androidboot[] = "androidboot.";
|
if (!android::base::StartsWith(entry.first, androidboot)) continue;
|
auto key = entry.first.substr(strlen(androidboot));
|
EXPECT_TRUE(fs_mgr_get_boot_config_from_kernel(cmdline, key, &content)) << " for " << key;
|
EXPECT_EQ(entry.second, content);
|
}
|
EXPECT_FALSE(fs_mgr_get_boot_config_from_kernel(cmdline, "vbmeta.avb_versio", &content));
|
EXPECT_TRUE(content.empty()) << content;
|
EXPECT_FALSE(fs_mgr_get_boot_config_from_kernel(cmdline, "nospace", &content));
|
EXPECT_TRUE(content.empty()) << content;
|
}
|
|
TEST(fs_mgr, fs_mgr_read_fstab_file_proc_mounts) {
|
Fstab fstab;
|
ASSERT_TRUE(ReadFstabFromFile("/proc/mounts", &fstab));
|
|
std::unique_ptr<std::FILE, int (*)(std::FILE*)> mounts(setmntent("/proc/mounts", "re"),
|
endmntent);
|
ASSERT_NE(mounts, nullptr);
|
|
mntent* mentry;
|
size_t i = 0;
|
while ((mentry = getmntent(mounts.get())) != nullptr) {
|
ASSERT_LT(i, fstab.size());
|
auto& entry = fstab[i];
|
|
EXPECT_EQ(mentry->mnt_fsname, entry.blk_device);
|
EXPECT_EQ(mentry->mnt_dir, entry.mount_point);
|
EXPECT_EQ(mentry->mnt_type, entry.fs_type);
|
|
std::set<std::string> mnt_opts;
|
for (auto& s : android::base::Split(mentry->mnt_opts, ",")) {
|
mnt_opts.emplace(s);
|
}
|
std::set<std::string> fs_options;
|
if (!entry.fs_options.empty()) {
|
for (auto& s : android::base::Split(entry.fs_options, ",")) {
|
fs_options.emplace(s);
|
}
|
}
|
// matches private content in fs_mgr_fstab.c
|
static struct flag_list {
|
const char* name;
|
unsigned int flag;
|
} mount_flags[] = {
|
{"noatime", MS_NOATIME},
|
{"noexec", MS_NOEXEC},
|
{"nosuid", MS_NOSUID},
|
{"nodev", MS_NODEV},
|
{"nodiratime", MS_NODIRATIME},
|
{"ro", MS_RDONLY},
|
{"rw", 0},
|
{"remount", MS_REMOUNT},
|
{"bind", MS_BIND},
|
{"rec", MS_REC},
|
{"unbindable", MS_UNBINDABLE},
|
{"private", MS_PRIVATE},
|
{"slave", MS_SLAVE},
|
{"shared", MS_SHARED},
|
{"defaults", 0},
|
{0, 0},
|
};
|
for (auto f = 0; mount_flags[f].name; ++f) {
|
if (mount_flags[f].flag & entry.flags) {
|
fs_options.emplace(mount_flags[f].name);
|
}
|
}
|
if (!(entry.flags & MS_RDONLY)) {
|
fs_options.emplace("rw");
|
}
|
EXPECT_EQ(mnt_opts, fs_options);
|
++i;
|
}
|
EXPECT_EQ(i, fstab.size());
|
}
|
|
// TODO(124837435): enable it later when it can pass TreeHugger.
|
TEST(fs_mgr, DISABLED_ReadFstabFromFile_MountOptions) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source / ext4 ro,barrier=1 wait,slotselect,avb
|
source /metadata ext4 noatime,nosuid,nodev,discard wait,formattable
|
|
source /data f2fs noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065,fsync_mode=nobarrier latemount,wait,check,fileencryption=ice,keydirectory=/metadata/vold/metadata_encryption,quota,formattable,sysfs_path=/sys/devices/platform/soc/1d84000.ufshc,reservedsize=128M
|
|
source /misc emmc defaults defaults
|
|
source /vendor/firmware_mnt vfat ro,shortname=lower,uid=1000,gid=1000,dmask=227,fmask=337,context=u:object_r:firmware_file:s0 wait,slotselect
|
|
source auto vfat defaults voldmanaged=usb:auto
|
source none swap defaults zramsize=1073741824,max_comp_streams=8
|
source none2 swap nodiratime,remount,bind zramsize=1073741824,max_comp_streams=8
|
source none3 swap unbindable,private,slave zramsize=1073741824,max_comp_streams=8
|
source none4 swap noexec,shared,rec zramsize=1073741824,max_comp_streams=8
|
source none5 swap rw zramsize=1073741824,max_comp_streams=8
|
)fs";
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(11U, fstab.size());
|
|
EXPECT_EQ("/", fstab[0].mount_point);
|
EXPECT_EQ(static_cast<unsigned long>(MS_RDONLY), fstab[0].flags);
|
EXPECT_EQ("barrier=1", fstab[0].fs_options);
|
|
EXPECT_EQ("/metadata", fstab[1].mount_point);
|
EXPECT_EQ(static_cast<unsigned long>(MS_NOATIME | MS_NOSUID | MS_NODEV), fstab[1].flags);
|
EXPECT_EQ("discard", fstab[1].fs_options);
|
|
EXPECT_EQ("/data", fstab[2].mount_point);
|
EXPECT_EQ(static_cast<unsigned long>(MS_NOATIME | MS_NOSUID | MS_NODEV), fstab[2].flags);
|
EXPECT_EQ("discard,reserve_root=32768,resgid=1065,fsync_mode=nobarrier", fstab[2].fs_options);
|
|
EXPECT_EQ("/misc", fstab[3].mount_point);
|
EXPECT_EQ(0U, fstab[3].flags);
|
EXPECT_EQ("", fstab[3].fs_options);
|
|
EXPECT_EQ("/vendor/firmware_mnt", fstab[4].mount_point);
|
EXPECT_EQ(static_cast<unsigned long>(MS_RDONLY), fstab[4].flags);
|
EXPECT_EQ(
|
"shortname=lower,uid=1000,gid=1000,dmask=227,fmask=337,"
|
"context=u:object_r:firmware_file:s0",
|
fstab[4].fs_options);
|
|
EXPECT_EQ("auto", fstab[5].mount_point);
|
EXPECT_EQ(0U, fstab[5].flags);
|
EXPECT_EQ("", fstab[5].fs_options);
|
|
EXPECT_EQ("none", fstab[6].mount_point);
|
EXPECT_EQ(0U, fstab[6].flags);
|
EXPECT_EQ("", fstab[6].fs_options);
|
|
EXPECT_EQ("none2", fstab[7].mount_point);
|
EXPECT_EQ(static_cast<unsigned long>(MS_NODIRATIME | MS_REMOUNT | MS_BIND), fstab[7].flags);
|
EXPECT_EQ("", fstab[7].fs_options);
|
|
EXPECT_EQ("none3", fstab[8].mount_point);
|
EXPECT_EQ(static_cast<unsigned long>(MS_UNBINDABLE | MS_PRIVATE | MS_SLAVE), fstab[8].flags);
|
EXPECT_EQ("", fstab[8].fs_options);
|
|
EXPECT_EQ("none4", fstab[9].mount_point);
|
EXPECT_EQ(static_cast<unsigned long>(MS_NOEXEC | MS_SHARED | MS_REC), fstab[9].flags);
|
EXPECT_EQ("", fstab[9].fs_options);
|
|
EXPECT_EQ("none5", fstab[10].mount_point);
|
EXPECT_EQ(0U, fstab[10].flags); // rw is the same as defaults
|
EXPECT_EQ("", fstab[10].fs_options);
|
}
|
|
static bool CompareFlags(FstabEntry::FsMgrFlags& lhs, FstabEntry::FsMgrFlags& rhs) {
|
// clang-format off
|
return lhs.wait == rhs.wait &&
|
lhs.check == rhs.check &&
|
lhs.crypt == rhs.crypt &&
|
lhs.nonremovable == rhs.nonremovable &&
|
lhs.vold_managed == rhs.vold_managed &&
|
lhs.recovery_only == rhs.recovery_only &&
|
lhs.verify == rhs.verify &&
|
lhs.force_crypt == rhs.force_crypt &&
|
lhs.no_emulated_sd == rhs.no_emulated_sd &&
|
lhs.no_trim == rhs.no_trim &&
|
lhs.file_encryption == rhs.file_encryption &&
|
lhs.formattable == rhs.formattable &&
|
lhs.slot_select == rhs.slot_select &&
|
lhs.force_fde_or_fbe == rhs.force_fde_or_fbe &&
|
lhs.late_mount == rhs.late_mount &&
|
lhs.no_fail == rhs.no_fail &&
|
lhs.verify_at_boot == rhs.verify_at_boot &&
|
lhs.quota == rhs.quota &&
|
lhs.avb == rhs.avb &&
|
lhs.logical == rhs.logical &&
|
lhs.checkpoint_blk == rhs.checkpoint_blk &&
|
lhs.checkpoint_fs == rhs.checkpoint_fs &&
|
lhs.first_stage_mount == rhs.first_stage_mount &&
|
lhs.slot_select_other == rhs.slot_select_other &&
|
lhs.fs_verity == rhs.fs_verity;
|
// clang-format on
|
}
|
|
// TODO(124837435): enable it later when it can pass TreeHugger.
|
TEST(fs_mgr, DISABLED_ReadFstabFromFile_FsMgrFlags) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults wait,check,nonremovable,recoveryonly,verifyatboot,verify
|
source none1 swap defaults avb,noemulatedsd,notrim,formattable,slotselect,nofail
|
source none2 swap defaults first_stage_mount,latemount,quota,logical,slotselect_other
|
source none3 swap defaults checkpoint=block
|
source none4 swap defaults checkpoint=fs
|
source none5 swap defaults defaults
|
)fs";
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(6U, fstab.size());
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
{
|
FstabEntry::FsMgrFlags flags = {};
|
flags.wait = true;
|
flags.check = true;
|
flags.nonremovable = true;
|
flags.recovery_only = true;
|
flags.verify_at_boot = true;
|
flags.verify = true;
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
}
|
entry++;
|
|
EXPECT_EQ("none1", entry->mount_point);
|
{
|
FstabEntry::FsMgrFlags flags = {};
|
flags.avb = true;
|
flags.no_emulated_sd = true;
|
flags.no_trim = true;
|
flags.formattable = true;
|
flags.slot_select = true;
|
flags.no_fail = true;
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
}
|
entry++;
|
|
EXPECT_EQ("none2", entry->mount_point);
|
{
|
FstabEntry::FsMgrFlags flags = {};
|
flags.first_stage_mount = true;
|
flags.late_mount = true;
|
flags.quota = true;
|
flags.logical = true;
|
flags.slot_select_other = true;
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
}
|
entry++;
|
|
EXPECT_EQ("none3", entry->mount_point);
|
{
|
FstabEntry::FsMgrFlags flags = {};
|
flags.checkpoint_blk = true;
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
}
|
entry++;
|
|
EXPECT_EQ("none4", entry->mount_point);
|
{
|
FstabEntry::FsMgrFlags flags = {};
|
flags.checkpoint_fs = true;
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
}
|
entry++;
|
|
EXPECT_EQ("none5", entry->mount_point);
|
{
|
FstabEntry::FsMgrFlags flags = {};
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
}
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_AllBad) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults encryptable,forceencrypt,fileencryption,forcefdeorfbe,keydirectory,length,swapprio,zramsize,max_comp_streams,reservedsize,eraseblk,logicalblk,sysfs_path,zram_loopback_path,zram_loopback_size,zram_backing_dev_path
|
|
source none1 swap defaults encryptable=,forceencrypt=,fileencryption=,keydirectory=,length=,swapprio=,zramsize=,max_comp_streams=,verify=,avb=,reservedsize=,eraseblk=,logicalblk=,sysfs_path=,zram_loopback_path=,zram_loopback_size=,zram_backing_dev_path=
|
|
source none2 swap defaults forcefdeorfbe=
|
|
)fs";
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(3U, fstab.size());
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
{
|
FstabEntry::FsMgrFlags flags = {};
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
}
|
EXPECT_EQ("", entry->key_loc);
|
EXPECT_EQ("", entry->key_dir);
|
EXPECT_EQ("", entry->verity_loc);
|
EXPECT_EQ(0, entry->length);
|
EXPECT_EQ("", entry->label);
|
EXPECT_EQ(-1, entry->partnum);
|
EXPECT_EQ(-1, entry->swap_prio);
|
EXPECT_EQ(0, entry->max_comp_streams);
|
EXPECT_EQ(0, entry->zram_size);
|
EXPECT_EQ(0, entry->reserved_size);
|
EXPECT_EQ("", entry->file_contents_mode);
|
EXPECT_EQ("", entry->file_names_mode);
|
EXPECT_EQ(0, entry->erase_blk_size);
|
EXPECT_EQ(0, entry->logical_blk_size);
|
EXPECT_EQ("", entry->sysfs_path);
|
EXPECT_EQ("", entry->zram_loopback_path);
|
EXPECT_EQ(512U * 1024U * 1024U, entry->zram_loopback_size);
|
EXPECT_EQ("", entry->zram_backing_dev_path);
|
entry++;
|
|
EXPECT_EQ("none1", entry->mount_point);
|
{
|
FstabEntry::FsMgrFlags flags = {};
|
flags.crypt = true;
|
flags.force_crypt = true;
|
flags.file_encryption = true;
|
flags.verify = true;
|
flags.avb = true;
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
}
|
EXPECT_EQ("", entry->key_loc);
|
EXPECT_EQ("", entry->key_dir);
|
EXPECT_EQ("", entry->verity_loc);
|
EXPECT_EQ(0, entry->length);
|
EXPECT_EQ("", entry->label);
|
EXPECT_EQ(-1, entry->partnum);
|
EXPECT_EQ(-1, entry->swap_prio);
|
EXPECT_EQ(0, entry->max_comp_streams);
|
EXPECT_EQ(0, entry->zram_size);
|
EXPECT_EQ(0, entry->reserved_size);
|
EXPECT_EQ("", entry->file_contents_mode);
|
EXPECT_EQ("", entry->file_names_mode);
|
EXPECT_EQ(0, entry->erase_blk_size);
|
EXPECT_EQ(0, entry->logical_blk_size);
|
EXPECT_EQ("", entry->sysfs_path);
|
EXPECT_EQ("", entry->zram_loopback_path);
|
EXPECT_EQ(512U * 1024U * 1024U, entry->zram_loopback_size);
|
EXPECT_EQ("", entry->zram_backing_dev_path);
|
entry++;
|
|
// forcefdeorfbe sets file_contents_mode and file_names_mode by default, so test it separately.
|
EXPECT_EQ("none2", entry->mount_point);
|
{
|
FstabEntry::FsMgrFlags flags = {};
|
flags.force_fde_or_fbe = true;
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
}
|
EXPECT_EQ("aes-256-xts", entry->file_contents_mode);
|
EXPECT_EQ("aes-256-cts", entry->file_names_mode);
|
EXPECT_EQ("", entry->key_loc);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_Encryptable) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults encryptable=/dir/key
|
)fs";
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(1U, fstab.size());
|
|
FstabEntry::FsMgrFlags flags = {};
|
flags.crypt = true;
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ("/dir/key", entry->key_loc);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_VoldManaged) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults voldmanaged=:
|
source none1 swap defaults voldmanaged=sdcard
|
source none2 swap defaults voldmanaged=sdcard:3
|
source none3 swap defaults voldmanaged=sdcard:auto
|
)fs";
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(4U, fstab.size());
|
|
FstabEntry::FsMgrFlags flags = {};
|
flags.vold_managed = true;
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_TRUE(entry->label.empty());
|
EXPECT_EQ(-1, entry->partnum);
|
entry++;
|
|
EXPECT_EQ("none1", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_TRUE(entry->label.empty());
|
EXPECT_EQ(-1, entry->partnum);
|
entry++;
|
|
EXPECT_EQ("none2", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ("sdcard", entry->label);
|
EXPECT_EQ(3, entry->partnum);
|
entry++;
|
|
EXPECT_EQ("none3", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ("sdcard", entry->label);
|
EXPECT_EQ(-1, entry->partnum);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_Length) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults length=blah
|
source none1 swap defaults length=123456
|
)fs";
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(2U, fstab.size());
|
|
FstabEntry::FsMgrFlags flags = {};
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(0, entry->length);
|
entry++;
|
|
EXPECT_EQ("none1", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(123456, entry->length);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_Swapprio) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults swapprio=blah
|
source none1 swap defaults swapprio=123456
|
)fs";
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(2U, fstab.size());
|
|
FstabEntry::FsMgrFlags flags = {};
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(-1, entry->swap_prio);
|
entry++;
|
|
EXPECT_EQ("none1", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(123456, entry->swap_prio);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_ZramSize) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults zramsize=blah
|
source none1 swap defaults zramsize=123456
|
source none2 swap defaults zramsize=blah%
|
source none3 swap defaults zramsize=5%
|
source none4 swap defaults zramsize=105%
|
source none5 swap defaults zramsize=%
|
)fs";
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(6U, fstab.size());
|
|
FstabEntry::FsMgrFlags flags = {};
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(0, entry->zram_size);
|
entry++;
|
|
EXPECT_EQ("none1", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(123456, entry->zram_size);
|
entry++;
|
|
EXPECT_EQ("none2", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(0, entry->zram_size);
|
entry++;
|
|
EXPECT_EQ("none3", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_NE(0, entry->zram_size);
|
entry++;
|
|
EXPECT_EQ("none4", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(0, entry->zram_size);
|
entry++;
|
|
EXPECT_EQ("none5", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(0, entry->zram_size);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_Verify) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults verify=/dir/key
|
)fs";
|
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(1U, fstab.size());
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
|
FstabEntry::FsMgrFlags flags = {};
|
flags.verify = true;
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
|
EXPECT_EQ("/dir/key", entry->verity_loc);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_ForceEncrypt) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults forceencrypt=/dir/key
|
)fs";
|
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(1U, fstab.size());
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
|
FstabEntry::FsMgrFlags flags = {};
|
flags.force_crypt = true;
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
|
EXPECT_EQ("/dir/key", entry->key_loc);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_ForceFdeOrFbe) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults forcefdeorfbe=/dir/key
|
)fs";
|
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(1U, fstab.size());
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
|
FstabEntry::FsMgrFlags flags = {};
|
flags.force_fde_or_fbe = true;
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
|
EXPECT_EQ("/dir/key", entry->key_loc);
|
EXPECT_EQ("aes-256-xts", entry->file_contents_mode);
|
EXPECT_EQ("aes-256-cts", entry->file_names_mode);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_FileEncryption) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults fileencryption=blah
|
source none1 swap defaults fileencryption=software
|
source none2 swap defaults fileencryption=aes-256-xts
|
source none3 swap defaults fileencryption=adiantum
|
source none4 swap defaults fileencryption=adiantum:aes-256-heh
|
source none5 swap defaults fileencryption=ice
|
source none6 swap defaults fileencryption=ice:blah
|
source none7 swap defaults fileencryption=ice:aes-256-cts
|
source none8 swap defaults fileencryption=ice:aes-256-heh
|
source none9 swap defaults fileencryption=ice:adiantum
|
source none10 swap defaults fileencryption=ice:adiantum:
|
)fs";
|
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(11U, fstab.size());
|
|
FstabEntry::FsMgrFlags flags = {};
|
flags.file_encryption = true;
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ("", entry->file_contents_mode);
|
EXPECT_EQ("", entry->file_names_mode);
|
|
entry++;
|
EXPECT_EQ("none1", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ("aes-256-xts", entry->file_contents_mode);
|
EXPECT_EQ("aes-256-cts", entry->file_names_mode);
|
|
entry++;
|
EXPECT_EQ("none2", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ("aes-256-xts", entry->file_contents_mode);
|
EXPECT_EQ("aes-256-cts", entry->file_names_mode);
|
|
entry++;
|
EXPECT_EQ("none3", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ("adiantum", entry->file_contents_mode);
|
EXPECT_EQ("adiantum", entry->file_names_mode);
|
|
entry++;
|
EXPECT_EQ("none4", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ("adiantum", entry->file_contents_mode);
|
EXPECT_EQ("aes-256-heh", entry->file_names_mode);
|
|
entry++;
|
EXPECT_EQ("none5", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ("ice", entry->file_contents_mode);
|
EXPECT_EQ("aes-256-cts", entry->file_names_mode);
|
|
entry++;
|
EXPECT_EQ("none6", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ("ice", entry->file_contents_mode);
|
EXPECT_EQ("", entry->file_names_mode);
|
|
entry++;
|
EXPECT_EQ("none7", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ("ice", entry->file_contents_mode);
|
EXPECT_EQ("aes-256-cts", entry->file_names_mode);
|
|
entry++;
|
EXPECT_EQ("none8", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ("ice", entry->file_contents_mode);
|
EXPECT_EQ("aes-256-heh", entry->file_names_mode);
|
|
entry++;
|
EXPECT_EQ("none9", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ("ice", entry->file_contents_mode);
|
EXPECT_EQ("adiantum", entry->file_names_mode);
|
|
entry++;
|
EXPECT_EQ("none10", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ("", entry->file_contents_mode);
|
EXPECT_EQ("", entry->file_names_mode);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_MaxCompStreams) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults max_comp_streams=blah
|
source none1 swap defaults max_comp_streams=123456
|
)fs";
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(2U, fstab.size());
|
|
FstabEntry::FsMgrFlags flags = {};
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(0, entry->max_comp_streams);
|
entry++;
|
|
EXPECT_EQ("none1", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(123456, entry->max_comp_streams);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_ReservedSize) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults reservedsize=blah
|
source none1 swap defaults reservedsize=2
|
source none2 swap defaults reservedsize=1K
|
source none3 swap defaults reservedsize=2m
|
)fs";
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(4U, fstab.size());
|
|
FstabEntry::FsMgrFlags flags = {};
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(0, entry->reserved_size);
|
entry++;
|
|
EXPECT_EQ("none1", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(2, entry->reserved_size);
|
entry++;
|
|
EXPECT_EQ("none2", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(1024, entry->reserved_size);
|
entry++;
|
|
EXPECT_EQ("none3", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(2 * 1024 * 1024, entry->reserved_size);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_EraseBlk) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults eraseblk=blah
|
source none1 swap defaults eraseblk=4000
|
source none2 swap defaults eraseblk=5000
|
source none3 swap defaults eraseblk=8192
|
)fs";
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(4U, fstab.size());
|
|
FstabEntry::FsMgrFlags flags = {};
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(0, entry->erase_blk_size);
|
entry++;
|
|
EXPECT_EQ("none1", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(0, entry->erase_blk_size);
|
entry++;
|
|
EXPECT_EQ("none2", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(0, entry->erase_blk_size);
|
entry++;
|
|
EXPECT_EQ("none3", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(8192, entry->erase_blk_size);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_Logicalblk) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults logicalblk=blah
|
source none1 swap defaults logicalblk=4000
|
source none2 swap defaults logicalblk=5000
|
source none3 swap defaults logicalblk=8192
|
)fs";
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(4U, fstab.size());
|
|
FstabEntry::FsMgrFlags flags = {};
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(0, entry->logical_blk_size);
|
entry++;
|
|
EXPECT_EQ("none1", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(0, entry->logical_blk_size);
|
entry++;
|
|
EXPECT_EQ("none2", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(0, entry->logical_blk_size);
|
entry++;
|
|
EXPECT_EQ("none3", entry->mount_point);
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
EXPECT_EQ(8192, entry->logical_blk_size);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_Avb) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults avb=vbmeta_partition
|
source none1 swap defaults avb_keys=/path/to/test.avbpubkey
|
)fs";
|
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(2U, fstab.size());
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
|
FstabEntry::FsMgrFlags flags = {};
|
flags.avb = true;
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
|
EXPECT_EQ("vbmeta_partition", entry->vbmeta_partition);
|
entry++;
|
|
EXPECT_EQ("none1", entry->mount_point);
|
FstabEntry::FsMgrFlags empty_flags = {}; // no flags should be set for avb_keys.
|
EXPECT_TRUE(CompareFlags(empty_flags, entry->fs_mgr_flags));
|
EXPECT_EQ("/path/to/test.avbpubkey", entry->avb_keys);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_KeyDirectory) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults keydirectory=/dir/key
|
)fs";
|
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(1U, fstab.size());
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
|
FstabEntry::FsMgrFlags flags = {};
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
|
EXPECT_EQ("/dir/key", entry->key_dir);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_SysfsPath) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults sysfs_path=/sys/device
|
)fs";
|
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(1U, fstab.size());
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
|
FstabEntry::FsMgrFlags flags = {};
|
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
|
|
EXPECT_EQ("/sys/device", entry->sysfs_path);
|
}
|
|
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_Zram) {
|
TemporaryFile tf;
|
ASSERT_TRUE(tf.fd != -1);
|
std::string fstab_contents = R"fs(
|
source none0 swap defaults zram_loopback_path=/dev/path
|
|
source none1 swap defaults zram_loopback_size=blah
|
source none2 swap defaults zram_loopback_size=2
|
source none3 swap defaults zram_loopback_size=1K
|
source none4 swap defaults zram_loopback_size=2m
|
|
source none5 swap defaults zram_backing_dev_path=/dev/path2
|
|
)fs";
|
|
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
|
|
Fstab fstab;
|
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
|
ASSERT_EQ(6U, fstab.size());
|
|
auto entry = fstab.begin();
|
EXPECT_EQ("none0", entry->mount_point);
|
EXPECT_EQ("/dev/path", entry->zram_loopback_path);
|
entry++;
|
|
EXPECT_EQ("none1", entry->mount_point);
|
EXPECT_EQ(512U * 1024U * 1024U, entry->zram_loopback_size);
|
entry++;
|
|
EXPECT_EQ("none2", entry->mount_point);
|
EXPECT_EQ(2U, entry->zram_loopback_size);
|
entry++;
|
|
EXPECT_EQ("none3", entry->mount_point);
|
EXPECT_EQ(1024U, entry->zram_loopback_size);
|
entry++;
|
|
EXPECT_EQ("none4", entry->mount_point);
|
EXPECT_EQ(2U * 1024U * 1024U, entry->zram_loopback_size);
|
entry++;
|
|
EXPECT_EQ("none5", entry->mount_point);
|
EXPECT_EQ("/dev/path2", entry->zram_backing_dev_path);
|
}
|