// Copyright (c) 2016-present, Facebook, Inc. All rights reserved. // This source code is licensed under both the GPLv2 (found in the // COPYING file in the root directory) and Apache 2.0 License // (found in the LICENSE.Apache file in the root directory). #ifndef ROCKSDB_LITE #include "rocksdb/utilities/object_registry.h" #include "util/testharness.h" namespace rocksdb { class EnvRegistryTest : public testing::Test { public: static int num_a, num_b; }; int EnvRegistryTest::num_a = 0; int EnvRegistryTest::num_b = 0; static Registrar test_reg_a("a://.*", [](const std::string& /*uri*/, std::unique_ptr* /*env_guard*/) { ++EnvRegistryTest::num_a; return Env::Default(); }); static Registrar test_reg_b("b://.*", [](const std::string& /*uri*/, std::unique_ptr* env_guard) { ++EnvRegistryTest::num_b; // Env::Default() is a singleton so we can't grant ownership directly to the // caller - we must wrap it first. env_guard->reset(new EnvWrapper(Env::Default())); return env_guard->get(); }); TEST_F(EnvRegistryTest, Basics) { std::unique_ptr env_guard; auto res = NewCustomObject("a://test", &env_guard); ASSERT_NE(res, nullptr); ASSERT_EQ(env_guard, nullptr); ASSERT_EQ(1, num_a); ASSERT_EQ(0, num_b); res = NewCustomObject("b://test", &env_guard); ASSERT_NE(res, nullptr); ASSERT_NE(env_guard, nullptr); ASSERT_EQ(1, num_a); ASSERT_EQ(1, num_b); res = NewCustomObject("c://test", &env_guard); ASSERT_EQ(res, nullptr); ASSERT_EQ(env_guard, nullptr); ASSERT_EQ(1, num_a); ASSERT_EQ(1, num_b); } } // namespace rocksdb int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } #else // ROCKSDB_LITE #include int main(int /*argc*/, char** /*argv*/) { fprintf(stderr, "SKIPPED as EnvRegistry is not supported in ROCKSDB_LITE\n"); return 0; } #endif // ROCKSDB_LITE