blob: a730c966b2858f66ec5b6c4bede714f0ec3e6671 [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 <fidl/fuchsia.hardware.block.verified/cpp/wire.h>
#include <zxtest/zxtest.h>
#include "src/devices/block/drivers/block-verity/config.h"
namespace {
TEST(ConfigCheckTest, Accepts4kBlockSHA256HashFunction) {
fidl::Arena allocator;
fuchsia_hardware_block_verified::wire::Config config(allocator);
config.set_hash_function(fuchsia_hardware_block_verified::wire::HashFunction::kSha256);
config.set_block_size(fuchsia_hardware_block_verified::wire::BlockSize::kSize4096);
block_info_t blk;
blk.block_size = 4096;
EXPECT_OK(block_verity::CheckConfig(config, blk));
}
TEST(ConfigCheckTest, Accepts4kBlockSHA256HashFunction512BackingBlockSize) {
fidl::Arena allocator;
fuchsia_hardware_block_verified::wire::Config config(allocator);
config.set_hash_function(fuchsia_hardware_block_verified::wire::HashFunction::kSha256);
config.set_block_size(fuchsia_hardware_block_verified::wire::BlockSize::kSize4096);
block_info_t blk;
blk.block_size = 512;
EXPECT_OK(block_verity::CheckConfig(config, blk));
}
TEST(ConfigCheckTest, RejectsMissingHashFunction) {
fidl::Arena allocator;
fuchsia_hardware_block_verified::wire::Config config(allocator);
config.set_block_size(fuchsia_hardware_block_verified::wire::BlockSize::kSize4096);
block_info_t blk;
blk.block_size = 4096;
EXPECT_EQ(ZX_ERR_INVALID_ARGS, block_verity::CheckConfig(config, blk));
}
TEST(ConfigCheckTest, RejectsMissingBlockSize) {
fidl::Arena allocator;
fuchsia_hardware_block_verified::wire::Config config(allocator);
config.set_hash_function(fuchsia_hardware_block_verified::wire::HashFunction::kSha256);
block_info_t blk;
blk.block_size = 4096;
EXPECT_EQ(ZX_ERR_INVALID_ARGS, block_verity::CheckConfig(config, blk));
}
TEST(ConfigCheckTest, RejectsIfBlockSizeUnsupportable) {
fidl::Arena allocator;
fuchsia_hardware_block_verified::wire::Config config(allocator);
config.set_hash_function(fuchsia_hardware_block_verified::wire::HashFunction::kSha256);
config.set_block_size(fuchsia_hardware_block_verified::wire::BlockSize::kSize4096);
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