From e4d02269b36d68d8ae2846c809b0f8312f6262fc Mon Sep 17 00:00:00 2001 From: Irene Y Zhang <iyzhang@cs.washington.edu> Date: Thu, 25 Jun 2015 15:46:10 -0700 Subject: [PATCH] adding some simple test cases --- store/common/backend/tests/Rules.mk | 12 ++- store/common/backend/tests/lockserver-test.cc | 51 +++++++++++ .../common/backend/tests/versionstore-test.cc | 84 +++++++++++++++++++ 3 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 store/common/backend/tests/lockserver-test.cc create mode 100644 store/common/backend/tests/versionstore-test.cc diff --git a/store/common/backend/tests/Rules.mk b/store/common/backend/tests/Rules.mk index f79b779..d2bb153 100644 --- a/store/common/backend/tests/Rules.mk +++ b/store/common/backend/tests/Rules.mk @@ -4,8 +4,16 @@ d := $(dir $(lastword $(MAKEFILE_LIST))) # gtest-based tests # GTEST_SRCS += $(addprefix $(d), \ - kvstore-test.cc) + kvstore-test.cc, versionstore-test.cc, lockserver-test.cc) $(d)kvstore-test: $(o)kvstore-test.o $(LIB-transport) $(LIB-common) $(LIB-backend) $(GTEST_MAIN) -TEST_BINS += $(d)kvstore-test \ No newline at end of file +TEST_BINS += $(d)kvstore-test + +$(d)versionstore-test: $(o)versionstore-test.o $(LIB-transport) $(LIB-common) $(LIB-backend) $(GTEST_MAIN) + +TEST_BINS += $(d)versionstore-test + +$(d)lockserver-test: $(o)lockserver-test.o $(LIB-transport) $(LIB-common) $(LIB-backend) $(GTEST_MAIN) + +TEST_BINS += $(d)lockserver-test diff --git a/store/common/backend/tests/lockserver-test.cc b/store/common/backend/tests/lockserver-test.cc new file mode 100644 index 0000000..2e53a5a --- /dev/null +++ b/store/common/backend/tests/lockserver-test.cc @@ -0,0 +1,51 @@ +// -*- mode: c++; c-file-style: "k&r"; c-basic-offset: 4 -*- +/*********************************************************************** + * + * kvstore-test.cc: + * test cases for simple key-value store class + * + * Copyright 2015 Irene Zhang <iyzhang@cs.washington.edu> + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + **********************************************************************/ + +#include "store/common/backend/versionstore.h" + +#include <gtest/gtest.h> + +TEST(LockServer, ReadLock) +{ + LockServer s; + + EXPECT_TRUE(s.LockForRead("x", 1)); + EXPECT_TRUE(s.LockForRead("x", 2)); + EXPECT_FALSE(s.LockForWrite("x", 3)); +} + +TEST(LockServer, WriteLock) +{ + LockServer s; + + EXPECT_TRUE(s.LockForWrite("x", 1)); + EXPECT_FALSE(s.LockForRead("x", 2)); + EXPECT_FALSE(s.LockForWrite("x", 3)); +} diff --git a/store/common/backend/tests/versionstore-test.cc b/store/common/backend/tests/versionstore-test.cc new file mode 100644 index 0000000..63465ea --- /dev/null +++ b/store/common/backend/tests/versionstore-test.cc @@ -0,0 +1,84 @@ +// -*- mode: c++; c-file-style: "k&r"; c-basic-offset: 4 -*- +/*********************************************************************** + * + * kvstore-test.cc: + * test cases for simple key-value store class + * + * Copyright 2015 Irene Zhang <iyzhang@cs.washington.edu> + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + **********************************************************************/ + +#include "store/common/backend/versionstore.h" + +#include <gtest/gtest.h> + +TEST(VersionedKVStore, Put) +{ + VersionedKVStore store; + + EXPECT_TRUE(store.put("test1", "abc")); + EXPECT_TRUE(store.put("test2", "def")); + EXPECT_TRUE(store.put("test1", "xyz")); + EXPECT_TRUE(store.put("test3", "abc")); +} + +TEST(VersionedKVStore, Get) +{ + VersionedKVStore store; + pair<Timestamp, std::string> val; + + EXPECT_TRUE(store.put("test1", "abc")); + EXPECT_TRUE(store.get("test1", val)); + EXPECT_EQ(val[1], "abc"); + + EXPECT_TRUE(store.put("test2", "def")); + EXPECT_TRUE(store.get("test2", val)); + EXPECT_EQ(val[1], "def"); + + EXPECT_TRUE(store.put("test1", "xyz")); + EXPECT_TRUE(store.get("test1", val)); + EXPECT_EQ(val[1], "xyz"); +} + +TEST(VersionedKVStore, VersionedGet) +{ + VersionedKVStore store; + Timestamp time; + Timestamp time2; + std::string val; + + EXPECT_TRUE(store.put("test1", "abc", time)); + EXPECT_TRUE(store.get("test1", val, time)); + EXPECT_EQ(val, "abc"); + + EXPECT_TRUE(store.put("test2", "def", time2)); + EXPECT_TRUE(store.get("test2", val, time2)); + EXPECT_EQ(val, "def"); + + EXPECT_TRUE(store.put("test1", "xyz", time2)); + EXPECT_TRUE(store.get("test1", val, time2)); + EXPECT_EQ(val, "xyz"); + + EXPECT_TRUE(store.get("test1", val, time)); + EXPECT_EQ(val, "abc"); +} -- GitLab