//
// Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+#include <algorithm>
#include <memory>
#include <string>
#include <vector>
-#include <algorithm>
#include "env/mock_env.h"
+#include "rocksdb/convenience.h"
#include "rocksdb/env.h"
+#include "rocksdb/env_encryption.h"
#include "test_util/testharness.h"
namespace ROCKSDB_NAMESPACE {
// Normalizes trivial differences across Envs such that these test cases can
// run on all Envs.
class NormalizingEnvWrapper : public EnvWrapper {
+ private:
+ std::unique_ptr<Env> base_;
+
public:
+ explicit NormalizingEnvWrapper(std::unique_ptr<Env>&& base)
+ : EnvWrapper(base.get()), base_(std::move(base)) {}
explicit NormalizingEnvWrapper(Env* base) : EnvWrapper(base) {}
// Removes . and .. from directory listing
test_dir_ = test::PerThreadDBPath(env_, "env_basic_test");
}
- void SetUp() override { env_->CreateDirIfMissing(test_dir_); }
+ void SetUp() override {
+ env_->CreateDirIfMissing(test_dir_).PermitUncheckedError();
+ }
void TearDown() override {
std::vector<std::string> files;
- env_->GetChildren(test_dir_, &files);
+ env_->GetChildren(test_dir_, &files).PermitUncheckedError();
for (const auto& file : files) {
// don't know whether it's file or directory, try both. The tests must
// only create files or empty directories, so one must succeed, else the
static std::unique_ptr<Env> mock_env(new MockEnv(Env::Default()));
INSTANTIATE_TEST_CASE_P(MockEnv, EnvBasicTestWithParam,
::testing::Values(mock_env.get()));
+
+#ifndef ROCKSDB_LITE
+static Env* NewTestEncryptedEnv(Env* base, const std::string& provider_id) {
+ std::shared_ptr<EncryptionProvider> provider;
+ EXPECT_OK(EncryptionProvider::CreateFromString(ConfigOptions(), provider_id,
+ &provider));
+ std::unique_ptr<Env> encrypted(NewEncryptedEnv(base, provider));
+ return new NormalizingEnvWrapper(std::move(encrypted));
+}
+
+// next statements run env test against default encryption code.
+static std::unique_ptr<Env> ctr_encrypt_env(NewTestEncryptedEnv(Env::Default(),
+ "test://CTR"));
+INSTANTIATE_TEST_CASE_P(EncryptedEnv, EnvBasicTestWithParam,
+ ::testing::Values(ctr_encrypt_env.get()));
+INSTANTIATE_TEST_CASE_P(EncryptedEnv, EnvMoreTestWithParam,
+ ::testing::Values(ctr_encrypt_env.get()));
+#endif // ROCKSDB_LITE
+
#ifndef ROCKSDB_LITE
static std::unique_ptr<Env> mem_env(NewMemEnv(Env::Default()));
INSTANTIATE_TEST_CASE_P(MemEnv, EnvBasicTestWithParam,
soptions_)
.ok());
ASSERT_TRUE(!seq_file);
- ASSERT_TRUE(!env_->NewRandomAccessFile(test_dir_ + "/non_existent",
- &rand_file, soptions_)
- .ok());
+ ASSERT_NOK(env_->NewRandomAccessFile(test_dir_ + "/non_existent", &rand_file,
+ soptions_));
ASSERT_TRUE(!rand_file);
// Check that deleting works.
- ASSERT_TRUE(!env_->DeleteFile(test_dir_ + "/non_existent").ok());
+ ASSERT_NOK(env_->DeleteFile(test_dir_ + "/non_existent"));
ASSERT_OK(env_->DeleteFile(test_dir_ + "/g"));
ASSERT_EQ(Status::NotFound(), env_->FileExists(test_dir_ + "/g"));
ASSERT_OK(env_->GetChildren(test_dir_, &children));
ASSERT_EQ(0U, children.size());
- ASSERT_TRUE(
- env_->GetChildren(test_dir_ + "/non_existent", &children).IsNotFound());
+ Status s = env_->GetChildren(test_dir_ + "/non_existent", &children);
+ ASSERT_TRUE(s.IsNotFound());
}
TEST_P(EnvBasicTestWithParam, ReadWrite) {
ASSERT_EQ(3U, children.size());
ASSERT_EQ(3U, childAttr.size());
for (auto each : children) {
- env_->DeleteDir(test_dir_ + "/" + each);
+ env_->DeleteDir(test_dir_ + "/" + each).PermitUncheckedError();
} // necessary for default POSIX env
// non-exist directory returns IOError
ASSERT_OK(env_->DeleteDir(test_dir_));
- ASSERT_TRUE(!env_->FileExists(test_dir_).ok());
- ASSERT_TRUE(!env_->GetChildren(test_dir_, &children).ok());
- ASSERT_TRUE(!env_->GetChildrenFileAttributes(test_dir_, &childAttr).ok());
+ ASSERT_NOK(env_->FileExists(test_dir_));
+ ASSERT_NOK(env_->GetChildren(test_dir_, &children));
+ ASSERT_NOK(env_->GetChildrenFileAttributes(test_dir_, &childAttr));
// if dir is a file, returns IOError
ASSERT_OK(env_->CreateDir(test_dir_));
env_->NewWritableFile(test_dir_ + "/file", &writable_file, soptions_));
ASSERT_OK(writable_file->Close());
writable_file.reset();
- ASSERT_TRUE(!env_->GetChildren(test_dir_ + "/file", &children).ok());
+ ASSERT_NOK(env_->GetChildren(test_dir_ + "/file", &children));
ASSERT_EQ(0U, children.size());
}