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