summaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile26
-rw-r--r--tests/unittests.cpp94
2 files changed, 120 insertions, 0 deletions
diff --git a/tests/Makefile b/tests/Makefile
new file mode 100644
index 0000000..78097ce
--- /dev/null
+++ b/tests/Makefile
@@ -0,0 +1,26 @@
+include ../common.mk
+
+CXXFLAGS+=\
+ -I/usr/src/googletest/googletest/include \
+ -I/usr/src/googletest/googlemock/include \
+ -I/usr/src/googletest/googletest \
+ -I/usr/src/googletest/googlemock \
+ -I..
+
+test: unittests
+ ./unittests
+
+unittests: libgmock.a unittests.o ../config.o ../file.o ../storage.o
+ $(CXX) $(LDFLAGS) $^ $(LDLIBS) $(LIBS) -o $@
+
+unittests.o: unittests.cpp
+ $(CXX) $(CXXFLAGS) -o $@ -c unittests.cpp
+
+libgmock.a:
+ $(CXX) $(CXXFLAGS) -c /usr/src/googletest/googletest/src/gtest-all.cc
+ $(CXX) $(CXXFLAGS) -c /usr/src/googletest/googlemock/src/gmock-all.cc
+ $(CXX) $(CXXFLAGS) -c /usr/src/googletest/googlemock/src/gmock_main.cc
+ ar -rv libgmock.a gmock-all.o gtest-all.o gmock_main.o
+
+clean:
+ -rm -f *.o *.a unittests
diff --git a/tests/unittests.cpp b/tests/unittests.cpp
new file mode 100644
index 0000000..3b24f83
--- /dev/null
+++ b/tests/unittests.cpp
@@ -0,0 +1,94 @@
+#include <gtest/gtest.h>
+
+#include <filesystem>
+#include <string>
+#include <system_error>
+
+#include "config.h"
+#include "file.h"
+#include "storage.h"
+
+namespace fs = std::filesystem;
+
+namespace {
+ const std::string testConfigFilename{"./test.conf"};
+ const std::string testDbFilename{"./whiteboard.db3"};
+}
+
+class ConfigTest: public ::testing::Test
+{
+protected:
+ ConfigTest(){
+ }
+
+ ~ConfigTest(){
+ }
+};
+
+TEST_F(ConfigTest, defaultData)
+{
+ std::string filename{testConfigFilename + "doesntexist"};
+ std::error_code ec;
+ fs::remove(filename, ec);
+ ASSERT_TRUE(!fs::exists(filename));
+ {
+ Config config{filename};
+ EXPECT_EQ(config.getDataPath(), "/var/lib/whiteboard");
+ ASSERT_TRUE(!fs::exists(filename));
+ }
+
+ ASSERT_TRUE(!fs::exists(filename));
+}
+
+TEST_F(ConfigTest, testData)
+{
+ File::setFile(testConfigFilename, R"CONFIG(
+<config>
+ <datapath>/some/other/location</datapath>
+ <maxage>2592000</maxage>
+</config>
+)CONFIG");
+
+ {
+ Config config{testConfigFilename};
+ EXPECT_EQ(config.getDataPath(), "/some/other/location");
+ }
+
+ std::error_code ec;
+ fs::remove(testConfigFilename, ec);
+}
+
+class StorageTest: public ::testing::Test
+{
+protected:
+ StorageTest(){
+ File::setFile(testConfigFilename, R"CONFIG(
+<config>
+ <datapath>.</datapath>
+ <maxage>2592000</maxage>
+</config>
+)CONFIG");
+ std::error_code ec;
+ fs::remove(testDbFilename, ec);
+ }
+
+ ~StorageTest(){
+ std::error_code ec;
+ fs::remove(testDbFilename, ec);
+ fs::remove(testConfigFilename, ec);
+ }
+};
+
+TEST_F(StorageTest, create)
+{
+ ASSERT_TRUE(!fs::exists(testDbFilename));
+
+ {
+ Config config(testConfigFilename);
+ ASSERT_EQ(config.getDataPath(), ".");
+ Storage storage(config);
+ }
+
+ ASSERT_TRUE(fs::exists(testDbFilename));
+}
+