diff --git a/tst/redisgeneral_test.cpp b/tst/redisgeneral_test.cpp
new file mode 100644
index 0000000..2bdc377
--- /dev/null
+++ b/tst/redisgeneral_test.cpp
@@ -0,0 +1,72 @@
+/*
+   Copyright (c) 2018-2019 Nokia.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+*/
+
+#include <type_traits>
+#include <gtest/gtest.h>
+#include <gmock/gmock.h>
+#include "private/redis/asyncredisreply.hpp"
+#include "private/redis/redisgeneral.hpp"
+#include "private/tst/redisreplybuilder.hpp"
+
+using namespace shareddatalayer;
+using namespace shareddatalayer::redis;
+using namespace shareddatalayer::tst;
+using namespace testing;
+
+namespace
+{
+    class RedisGeneralTest: public testing::Test
+    {
+    public:
+        RedisReplyBuilder redisReplyBuilder;
+        RedisGeneralTest():
+            redisReplyBuilder { }
+        {
+        }
+
+        virtual ~RedisGeneralTest()
+        {
+        }
+    };
+}
+
+TEST_F(RedisGeneralTest, ParseCommandListReplySuccessfully)
+{
+    std::set<std::string> requiredRedisModuleCommands(getRequiredRedisModuleCommands());
+    const AsyncRedisReply replyHavingAllRequiredCommands(redisReplyBuilder.buildCommandListQueryReply());
+    std::set<std::string> parsedRedisModuleCommands(parseCommandListReply(replyHavingAllRequiredCommands));
+    EXPECT_THAT(requiredRedisModuleCommands, ContainerEq(parsedRedisModuleCommands));
+}
+
+TEST_F(RedisGeneralTest, CheckRedisModuleCommandsAllCommandsFound)
+{
+    std::set<std::string> requiredRedisModuleCommands(getRequiredRedisModuleCommands());
+    EXPECT_TRUE(checkRedisModuleCommands(requiredRedisModuleCommands));
+}
+
+TEST_F(RedisGeneralTest, CheckRedisModuleCommandsOneCommandMissing)
+{
+    std::set<std::string> requiredRedisModuleCommands(getRequiredRedisModuleCommands());
+    auto commandToRemove = --requiredRedisModuleCommands.end();
+    requiredRedisModuleCommands.erase(commandToRemove);
+    EXPECT_FALSE(checkRedisModuleCommands(requiredRedisModuleCommands));
+}
+
+TEST_F(RedisGeneralTest, CheckRedisModuleCommandsAllCommandsMissing)
+{
+    std::set<std::string> requiredRedisModuleCommands({});
+    EXPECT_FALSE(checkRedisModuleCommands(requiredRedisModuleCommands));
+}
