blob: 8f7964b15bfdb66ffb4b65fc2c717d7829b6d772 [file] [log] [blame]
// Copyright 2018 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 <limits.h>
#include <stddef.h>
#include <blkctl/command.h>
#include <blkctl/blkctl.h>
#include <fbl/unique_ptr.h>
#include <unittest/unittest.h>
#include <zircon/types.h>
#include "utils.h"
namespace blkctl {
namespace testing {
namespace {
bool TestBadCommand(void) {
BEGIN_TEST;
// Missing command
EXPECT_TRUE(ParseAndRun(ZX_ERR_INVALID_ARGS, "blkctl ramdisk"));
// Gibberish
EXPECT_TRUE(ParseAndRun(ZX_ERR_INVALID_ARGS, "blkctl ramdisk booplesnoot"));
END_TEST;
}
bool TestInitDestroy(void) {
BEGIN_TEST;
// Missing block size and/or count
EXPECT_TRUE(ParseAndRun(ZX_ERR_INVALID_ARGS, "blkctl ramdisk init"));
EXPECT_TRUE(ParseAndRun(ZX_ERR_INVALID_ARGS, "blkctl ramdisk init %zu", kBlockSize));
// Bad block size
EXPECT_TRUE(ParseAndRun(ZX_ERR_INVALID_ARGS, "blkctl ramdisk init foo %zu", kBlockSize));
EXPECT_TRUE(ParseAndRun(ZX_ERR_INVALID_ARGS, "blkctl ramdisk init -1 %zu", kBlockSize));
// Bad block count
EXPECT_TRUE(ParseAndRun(ZX_ERR_INVALID_ARGS, "blkctl ramdisk init %zu foo", kBlockSize));
EXPECT_TRUE(ParseAndRun(ZX_ERR_INVALID_ARGS, "blkctl ramdisk init %zu -1", kBlockSize));
// Too many args
EXPECT_TRUE(ParseAndRun(ZX_ERR_INVALID_ARGS, "blkctl ramdisk init %zu %zu foo", kBlockSize,
kBlockCount));
// Valid; do it "manually" to get ramdisk path
fbl::Vector<char*> args;
char buf[PATH_MAX];
ASSERT_TRUE(SplitArgs(&args, buf, sizeof(buf), "blkctl ramdisk init %zu %zu",
kBlockSize, kBlockCount));
BlkCtl cmdline;
ASSERT_EQ(cmdline.Parse(static_cast<int>(args.size()), args.get()), ZX_OK);
Command *cmd = cmdline.cmd();
EXPECT_EQ(cmd->Run(), ZX_OK);
const char *path = cmd->devname();
// Missing/bad device
EXPECT_TRUE(ParseAndRun(ZX_ERR_INVALID_ARGS, "blkctl ramdisk destroy"));
EXPECT_TRUE(ParseAndRun(ZX_ERR_INVALID_ARGS, "blkctl ramdisk destroy booplesnoot"));
// Too many args
EXPECT_TRUE(ParseAndRun(ZX_ERR_INVALID_ARGS, "blkctl ramdisk destroy %s foo", path));
// Valid
EXPECT_TRUE(ParseAndRun(ZX_OK, "blkctl ramdisk destroy --force %s", path));
END_TEST;
}
BEGIN_TEST_CASE(RamdiskCommandTest)
RUN_TEST(TestBadCommand)
RUN_TEST(TestInitDestroy)
END_TEST_CASE(RamdiskCommandTest)
} // namespace
} // namespace testing
} // namespace blkctl