blob: 42bd169ad9bc4e207ee53f6f3f3f644e37f42468 [file] [log] [blame]
// Copyright 2019 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.io/cpp/wire.h>
#include <zircon/errors.h>
#include <type_traits>
#include <utility>
#include <zxtest/zxtest.h>
#include "src/storage/lib/vfs/cpp/vfs_types.h"
#include "src/storage/lib/vfs/cpp/vnode.h"
namespace fs {
namespace {
namespace fio = fuchsia_io;
class DummyVnode : public Vnode {
public:
DummyVnode() = default;
};
#define EXPECT_RESULT_OK(expr) EXPECT_TRUE((expr).is_ok())
#define EXPECT_RESULT_ERROR(error_val, expr) \
EXPECT_TRUE((expr).is_error()); \
EXPECT_EQ(error_val, (expr).status_value())
TEST(VnodeConnectionOptions, ValidateOptionsForDirectory) {
class TestDirectory : public DummyVnode {
public:
fio::NodeProtocolKinds GetProtocols() const final { return fio::NodeProtocolKinds::kDirectory; }
};
TestDirectory vnode;
EXPECT_RESULT_OK(
vnode.ValidateOptions(*VnodeConnectionOptions::FromOpen1Flags(fio::OpenFlags::kDirectory)));
EXPECT_RESULT_ERROR(ZX_ERR_NOT_FILE,
vnode.ValidateOptions(
*VnodeConnectionOptions::FromOpen1Flags(fio::OpenFlags::kNotDirectory)));
}
TEST(VnodeConnectionOptions, ValidateOptionsForService) {
class TestConnector : public DummyVnode {
public:
fio::NodeProtocolKinds GetProtocols() const final { return fio::NodeProtocolKinds::kConnector; }
};
TestConnector vnode;
EXPECT_RESULT_ERROR(
ZX_ERR_NOT_DIR,
vnode.ValidateOptions(*VnodeConnectionOptions::FromOpen1Flags(fio::OpenFlags::kDirectory)));
EXPECT_RESULT_OK(vnode.ValidateOptions(
*VnodeConnectionOptions::FromOpen1Flags(fio::OpenFlags::kNotDirectory)));
}
TEST(VnodeConnectionOptions, ValidateOptionsForFile) {
class TestFile : public DummyVnode {
public:
fio::NodeProtocolKinds GetProtocols() const final { return fio::NodeProtocolKinds::kFile; }
};
TestFile vnode;
EXPECT_RESULT_ERROR(
ZX_ERR_NOT_DIR,
vnode.ValidateOptions(*VnodeConnectionOptions::FromOpen1Flags(fio::OpenFlags::kDirectory)));
EXPECT_RESULT_OK(vnode.ValidateOptions(
*VnodeConnectionOptions::FromOpen1Flags(fio::OpenFlags::kNotDirectory)));
}
} // namespace
} // namespace fs