aboutsummaryrefslogtreecommitdiff
path: root/brillo/blkdev_utils/device_mapper_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'brillo/blkdev_utils/device_mapper_test.cc')
-rw-r--r--brillo/blkdev_utils/device_mapper_test.cc143
1 files changed, 143 insertions, 0 deletions
diff --git a/brillo/blkdev_utils/device_mapper_test.cc b/brillo/blkdev_utils/device_mapper_test.cc
new file mode 100644
index 0000000..ab19092
--- /dev/null
+++ b/brillo/blkdev_utils/device_mapper_test.cc
@@ -0,0 +1,143 @@
+// 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.
+
+#include <libdevmapper.h>
+
+#include <base/files/file_util.h>
+#include <base/memory/ptr_util.h>
+#include <base/strings/string_number_conversions.h>
+#include <base/strings/string_split.h>
+#include <brillo/blkdev_utils/device_mapper_fake.h>
+#include <gtest/gtest.h>
+
+namespace brillo {
+
+TEST(DevmapperTableTest, CreateTableFromSecureBlobTest) {
+ SecureBlob crypt_table_str("0 100 crypt");
+
+ DevmapperTable dm_table =
+ DevmapperTable::CreateTableFromSecureBlob(crypt_table_str);
+ EXPECT_EQ(DevmapperTable(0, 0, "", SecureBlob()).ToSecureBlob(),
+ dm_table.ToSecureBlob());
+}
+
+TEST(DevmapperTableTest, CryptCreateParametersTest) {
+ base::FilePath device("/some/random/filepath");
+
+ SecureBlob secret;
+ SecureBlob::HexStringToSecureBlob("0123456789ABCDEF", &secret);
+
+ SecureBlob crypt_parameters = DevmapperTable::CryptCreateParameters(
+ "aes-cbc-essiv:sha256", secret, 0, device, 0, true);
+
+ DevmapperTable crypt_table(0, 100, "crypt", crypt_parameters);
+
+ SecureBlob crypt_table_str(
+ "0 100 crypt aes-cbc-essiv:sha256 "
+ "0123456789ABCDEF 0 /some/random/filepath 0 1 "
+ "allow_discards");
+
+ EXPECT_EQ(crypt_table.ToSecureBlob().to_string(),
+ crypt_table_str.to_string());
+}
+
+TEST(DevmapperTableTest, CryptCreateTableFromSecureBlobTest) {
+ base::FilePath device("/some/random/filepath");
+
+ SecureBlob secret;
+ SecureBlob::HexStringToSecureBlob("0123456789ABCDEF", &secret);
+
+ SecureBlob crypt_parameters = DevmapperTable::CryptCreateParameters(
+ "aes-cbc-essiv:sha256", secret, 0, device, 0, true);
+
+ DevmapperTable crypt_table(0, 100, "crypt", crypt_parameters);
+
+ SecureBlob crypt_table_str(
+ "0 100 crypt aes-cbc-essiv:sha256 "
+ "0123456789ABCDEF 0 /some/random/filepath 0 1 "
+ "allow_discards");
+
+ DevmapperTable parsed_blob_table =
+ DevmapperTable::CreateTableFromSecureBlob(crypt_table_str);
+
+ EXPECT_EQ(crypt_table.ToSecureBlob(), parsed_blob_table.ToSecureBlob());
+}
+
+TEST(DevmapperTableTest, CryptGetKeyTest) {
+ SecureBlob secret;
+ SecureBlob::HexStringToSecureBlob("0123456789ABCDEF", &secret);
+ SecureBlob crypt_table_str(
+ "0 100 crypt aes-cbc-essiv:sha256 "
+ "0123456789ABCDEF 0 /some/random/filepath 0 1 "
+ "allow_discards");
+
+ DevmapperTable dm_table =
+ DevmapperTable::CreateTableFromSecureBlob(crypt_table_str);
+
+ EXPECT_EQ(secret, dm_table.CryptGetKey());
+}
+
+TEST(DevmapperTableTest, MalformedCryptTableTest) {
+ SecureBlob secret;
+ SecureBlob::HexStringToSecureBlob("0123456789ABCDEF", &secret);
+ // Pass malformed crypt table string.
+ SecureBlob crypt_table_str(
+ "0 100 crypt ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ");
+
+ DevmapperTable dm_table =
+ DevmapperTable::CreateTableFromSecureBlob(crypt_table_str);
+
+ EXPECT_EQ(SecureBlob(), dm_table.CryptGetKey());
+}
+
+TEST(DevmapperTableTest, GetterTest) {
+ SecureBlob verity_table(
+ "0 40 verity payload=/dev/loop6 hashtree=/dev/loop6 "
+ "hashstart=40 alg=sha256 root_hexdigest="
+ "01234567 "
+ "salt=89ABCDEF "
+ "error_behavior=eio");
+
+ DevmapperTable dm_table =
+ DevmapperTable::CreateTableFromSecureBlob(verity_table);
+
+ EXPECT_EQ(dm_table.GetStart(), 0);
+ EXPECT_EQ(dm_table.GetSize(), 40);
+ EXPECT_EQ(dm_table.GetType(), "verity");
+ EXPECT_EQ(dm_table.GetParameters(),
+ SecureBlob("payload=/dev/loop6 hashtree=/dev/loop6 "
+ "hashstart=40 alg=sha256 root_hexdigest=01234567 "
+ "salt=89ABCDEF error_behavior=eio"));
+}
+
+TEST(DevmapperTest, FakeTaskConformance) {
+ SecureBlob secret;
+ SecureBlob::HexStringToSecureBlob("0123456789ABCDEF", &secret);
+ SecureBlob crypt_table_str(
+ "0 100 crypt aes-cbc-essiv:sha256 "
+ "0123456789ABCDEF 0 /some/random/filepath 0 1 "
+ "allow_discards");
+
+ DevmapperTable dm_table =
+ DevmapperTable::CreateTableFromSecureBlob(crypt_table_str);
+
+ EXPECT_EQ(secret, dm_table.CryptGetKey());
+ DeviceMapper dm(base::Bind(&fake::CreateDevmapperTask));
+
+ // Add device.
+ EXPECT_TRUE(dm.Setup("abcd", dm_table));
+ EXPECT_FALSE(dm.Setup("abcd", dm_table));
+ DevmapperTable table = dm.GetTable("abcd");
+ // Expect tables to be the same.
+ EXPECT_EQ(table.ToSecureBlob(), dm_table.ToSecureBlob());
+ // Expect key to match.
+ EXPECT_EQ(table.CryptGetKey(), secret);
+ EXPECT_TRUE(dm.Remove("abcd"));
+ EXPECT_FALSE(dm.Remove("abcd"));
+}
+
+} // namespace brillo