blob: 0aefc71555b995dd0f01c84ab69dc45ea35b419b [file] [log] [blame]
// Copyright 2020 The Fuchsia 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 <fuchsia/hardware/block/verified/llcpp/fidl.h>
#include <zxtest/zxtest.h>
#include "src/devices/block/drivers/block-verity/config.h"
namespace {
TEST(ConfigCheckTest, Accepts4kBlockSHA256HashFunction) {
fidl::aligned<llcpp::fuchsia::hardware::block::verified::HashFunction> hash_function =
llcpp::fuchsia::hardware::block::verified::HashFunction::SHA256;
fidl::aligned<llcpp::fuchsia::hardware::block::verified::BlockSize> block_size =
llcpp::fuchsia::hardware::block::verified::BlockSize::SIZE_4096;
auto config = llcpp::fuchsia::hardware::block::verified::Config::Builder(
std::make_unique<llcpp::fuchsia::hardware::block::verified::Config::Frame>())
.set_hash_function(fidl::unowned_ptr(&hash_function))
.set_block_size(fidl::unowned_ptr(&block_size))
.build();
block_info_t blk;
blk.block_size = 4096;
EXPECT_OK(block_verity::CheckConfig(config, blk));
}
TEST(ConfigCheckTest, Accepts4kBlockSHA256HashFunction512BackingBlockSize) {
fidl::aligned<llcpp::fuchsia::hardware::block::verified::HashFunction> hash_function =
llcpp::fuchsia::hardware::block::verified::HashFunction::SHA256;
fidl::aligned<llcpp::fuchsia::hardware::block::verified::BlockSize> block_size =
llcpp::fuchsia::hardware::block::verified::BlockSize::SIZE_4096;
auto config = llcpp::fuchsia::hardware::block::verified::Config::Builder(
std::make_unique<llcpp::fuchsia::hardware::block::verified::Config::Frame>())
.set_hash_function(fidl::unowned_ptr(&hash_function))
.set_block_size(fidl::unowned_ptr(&block_size))
.build();
block_info_t blk;
blk.block_size = 512;
EXPECT_OK(block_verity::CheckConfig(config, blk));
}
TEST(ConfigCheckTest, RejectsMissingHashFunction) {
fidl::aligned<llcpp::fuchsia::hardware::block::verified::BlockSize> block_size =
llcpp::fuchsia::hardware::block::verified::BlockSize::SIZE_4096;
auto config = llcpp::fuchsia::hardware::block::verified::Config::Builder(
std::make_unique<llcpp::fuchsia::hardware::block::verified::Config::Frame>())
.set_block_size(fidl::unowned_ptr(&block_size))
.build();
block_info_t blk;
blk.block_size = 4096;
EXPECT_EQ(ZX_ERR_INVALID_ARGS, block_verity::CheckConfig(config, blk));
}
TEST(ConfigCheckTest, RejectsMissingBlockSize) {
fidl::aligned<llcpp::fuchsia::hardware::block::verified::HashFunction> hash_function =
llcpp::fuchsia::hardware::block::verified::HashFunction::SHA256;
auto config = llcpp::fuchsia::hardware::block::verified::Config::Builder(
std::make_unique<llcpp::fuchsia::hardware::block::verified::Config::Frame>())
.set_hash_function(fidl::unowned_ptr(&hash_function))
.build();
block_info_t blk;
blk.block_size = 4096;
EXPECT_EQ(ZX_ERR_INVALID_ARGS, block_verity::CheckConfig(config, blk));
}
TEST(ConfigCheckTest, RejectsIfBlockSizeUnsupportable) {
fidl::aligned<llcpp::fuchsia::hardware::block::verified::HashFunction> hash_function =
llcpp::fuchsia::hardware::block::verified::HashFunction::SHA256;
fidl::aligned<llcpp::fuchsia::hardware::block::verified::BlockSize> block_size =
llcpp::fuchsia::hardware::block::verified::BlockSize::SIZE_4096;
auto config = llcpp::fuchsia::hardware::block::verified::Config::Builder(
std::make_unique<llcpp::fuchsia::hardware::block::verified::Config::Frame>())
.set_hash_function(fidl::unowned_ptr(&hash_function))
.set_block_size(fidl::unowned_ptr(&block_size))
.build();
block_info_t blk;
// not a divisor of 4k
blk.block_size = 640;
EXPECT_EQ(ZX_ERR_INVALID_ARGS, block_verity::CheckConfig(config, blk));
blk.block_size = 8192;
EXPECT_EQ(ZX_ERR_INVALID_ARGS, block_verity::CheckConfig(config, blk));
}
} // namespace