---
00-README.unittest | 24 ++++++++++++++----------
src/ais/Makefile.am | 5 ++++-
src/amf/Makefile.am | 7 +++++--
src/base/Makefile.am | 21 +++++++++++++++++----
src/base/tests/mock_turtle.cc | 20 ++++++++++++++++++++
src/base/tests/mock_turtle.h | 18 ++++++++++++++++++
src/base/tests/turtle.h | 17 +++++++++++++++++
src/dtm/Makefile.am | 5 ++++-
src/experimental/immcpp/api/Makefile.am | 5 ++++-
src/log/Makefile.am | 5 ++++-
test.sh | 12 +++++++++---
11 files changed, 116 insertions(+), 23 deletions(-)
create mode 100644 src/base/tests/mock_turtle.cc
create mode 100644 src/base/tests/mock_turtle.h
create mode 100644 src/base/tests/turtle.h
diff --git a/00-README.unittest b/00-README.unittest
index 79e4b4b41..f297bccd0 100644
--- a/00-README.unittest
+++ b/00-README.unittest
@@ -1,22 +1,25 @@
-Support for using google unit test in openSAF. Using unit test during e.g.
refactoring
+Support for using google unit test and google mock in openSAF. Using unit test
and mocking during e.g. refactoring
to identify units and make code unit testable should improve the overall code
quality and robustness.
Regarding google unit test, see:
https://code.google.com/p/googletest/
To get and install google test do the following:
-wget https://googletest.googlecode.com/files/gtest-1.7.0.zip
-unzip gtest-1.7.0.zip
-cd gtest-1.7.0
-./configure
-make
-export GTEST_DIR=`pwd`
+git clone https://github.com/google/googletest.git
+cd googletest
+
+autoreconf -vi
+./configure --with-pthreads
+make -j 4
+
+export GTEST_DIR=`pwd`/googletest
+export GMOCK_DIR=`pwd`/googlemock
configure openSAF as usual, for example:
./bootstrap.ch
./configure CFLAGS="-DRUNASROOT -O2" CXXFLAGS="-DRUNASROOT -O2" --enable-tipc
-make -j
+make -j 4
To build and run the unit tests
make check
@@ -40,8 +43,9 @@ services/saf/amf/
└── config
The test code to have the following naming convention as below:
-tests will be in file test_xxxx.cc, where xxxx is the name of the unit test
case,
-e.g test_amfdb.cc. No need to call the RUN_ALL_TESTS() macro, it is included
in gtest_main
+tests will be in file xxxx_test.cc, where xxxx is the name of the unit test
case,
+mocks will be in file mock_xxxx.cc, where xxxx is the name of the mock.
+No need to call the RUN_ALL_TESTS() macro, it is included in gtest_main and
gmock_main
and are automatically linked with the unit test cases.
diff --git a/src/ais/Makefile.am b/src/ais/Makefile.am
index 1af75a0f4..2ef34b219 100644
--- a/src/ais/Makefile.am
+++ b/src/ais/Makefile.am
@@ -101,7 +101,8 @@ bin_testlib_CXXFLAGS = \
bin_testlib_CPPFLAGS = \
$(AM_CPPFLAGS) \
- -I$(GTEST_DIR)/include
+ -I$(GTEST_DIR)/include \
+ -I$(GMOCK_DIR)/include
bin_testlib_LDFLAGS = \
$(AM_LDFLAGS)
@@ -112,4 +113,6 @@ bin_testlib_SOURCES = \
bin_testlib_LDADD = \
$(GTEST_DIR)/lib/libgtest.la \
$(GTEST_DIR)/lib/libgtest_main.la \
+ $(GMOCK_DIR)/lib/libgmock.la \
+ $(GMOCK_DIR)/lib/libgmock_main.la \
lib/libopensaf_core.la
diff --git a/src/amf/Makefile.am b/src/amf/Makefile.am
index 25261fded..413571a52 100644
--- a/src/amf/Makefile.am
+++ b/src/amf/Makefile.am
@@ -194,7 +194,8 @@ bin_testamfd_CXXFLAGS =$(AM_CXXFLAGS)
bin_testamfd_CPPFLAGS = \
-DSA_CLM_B01=1 -DSA_EXTENDED_NAME_SOURCE \
$(AM_CPPFLAGS) \
- -I$(GTEST_DIR)/include
+ -I$(GTEST_DIR)/include \
+ -I$(GMOCK_DIR)/include
bin_testamfd_LDFLAGS = \
$(AM_LDFLAGS) \
@@ -264,7 +265,9 @@ bin_testamfd_LDADD = \
lib/libSaNtf.la \
lib/libopensaf_core.la \
$(GTEST_DIR)/lib/libgtest.la \
- $(GTEST_DIR)/lib/libgtest_main.la
+ $(GTEST_DIR)/lib/libgtest_main.la \
+ $(GMOCK_DIR)/lib/libgmock.la \
+ $(GMOCK_DIR)/lib/libgmock_main.la
bin_amfpm_CPPFLAGS = \
-DSA_EXTENDED_NAME_SOURCE \
diff --git a/src/base/Makefile.am b/src/base/Makefile.am
index bb13d6c43..a7316ceb7 100644
--- a/src/base/Makefile.am
+++ b/src/base/Makefile.am
@@ -150,6 +150,8 @@ noinst_HEADERS += \
src/base/tests/mock_osaf_abort.h \
src/base/tests/mock_osafassert.h \
src/base/tests/mock_syslog.h \
+ src/base/tests/mock_turtle.h \
+ src/base/tests/turtle.h \
src/base/time.h \
src/base/unix_client_socket.h \
src/base/unix_server_socket.h \
@@ -163,7 +165,8 @@ bin_testleap_CXXFLAGS =$(AM_CXXFLAGS)
bin_testleap_CPPFLAGS = \
-DSA_CLM_B01=1 \
$(AM_CPPFLAGS) \
- -I$(GTEST_DIR)/include
+ -I$(GTEST_DIR)/include \
+ -I$(GMOCK_DIR)/include
bin_testleap_LDFLAGS = \
$(AM_LDFLAGS)
@@ -175,6 +178,8 @@ bin_testleap_SOURCES = \
bin_testleap_LDADD = \
$(GTEST_DIR)/lib/libgtest.la \
$(GTEST_DIR)/lib/libgtest_main.la \
+ $(GMOCK_DIR)/lib/libgmock.la \
+ $(GMOCK_DIR)/lib/libgmock_main.la \
lib/libosaf_common.la \
lib/libopensaf_core.la \
lib/libamf_common.la \
@@ -188,7 +193,8 @@ bin_libbase_test_CXXFLAGS =$(AM_CXXFLAGS)
bin_libbase_test_CPPFLAGS = \
$(AM_CPPFLAGS) \
- -I$(GTEST_DIR)/include
+ -I$(GTEST_DIR)/include \
+ -I$(GMOCK_DIR)/include
bin_libbase_test_LDFLAGS = \
$(AM_LDFLAGS) \
@@ -208,6 +214,7 @@ bin_libbase_test_SOURCES = \
src/base/tests/mock_logtrace.cc \
src/base/tests/mock_osaf_abort.cc \
src/base/tests/mock_osafassert.cc \
+ src/base/tests/mock_turtle.cc \
src/base/tests/string_parse_test.cc \
src/base/tests/time_add_test.cc \
src/base/tests/time_compare_test.cc \
@@ -218,13 +225,17 @@ bin_libbase_test_SOURCES = \
bin_libbase_test_LDADD = \
$(GTEST_DIR)/lib/libgtest.la \
$(GTEST_DIR)/lib/libgtest_main.la \
+ $(GMOCK_DIR)/lib/libgmock.la \
+ $(GMOCK_DIR)/lib/libgmock_main.la \
lib/libopensaf_core.la
bin_core_common_test_CXXFLAGS =$(AM_CXXFLAGS)
bin_core_common_test_CPPFLAGS = \
$(AM_CPPFLAGS) \
- -I$(GTEST_DIR)/include
+ -I$(GTEST_DIR)/include \
+ -I$(GMOCK_DIR)/include
+
bin_core_common_test_LDFLAGS = \
$(AM_LDFLAGS) \
@@ -247,4 +258,6 @@ bin_core_common_test_SOURCES = \
bin_core_common_test_LDADD = \
$(GTEST_DIR)/lib/libgtest.la \
- $(GTEST_DIR)/lib/libgtest_main.la
+ $(GTEST_DIR)/lib/libgtest_main.la \
+ $(GMOCK_DIR)/lib/libgmock.la \
+ $(GMOCK_DIR)/lib/libgmock_main.la
diff --git a/src/base/tests/mock_turtle.cc b/src/base/tests/mock_turtle.cc
new file mode 100644
index 000000000..000e7f3f1
--- /dev/null
+++ b/src/base/tests/mock_turtle.cc
@@ -0,0 +1,20 @@
+#include "mock_turtle.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+
+/*
+ This is a dummy implementation to verify that google mock
+ compiles and runs in OpenSAF. Can be removed when real
+ mock classes are implemented
+ */
+
+using ::testing::AtLeast;
+using namespace testing;
+
+TEST(PainterTest, CanDrawSomething) {
+ MockTurtle turtle;
+ EXPECT_CALL(turtle, PenUp())
+ .Times(AtLeast(0));
+
+ // Painter painter(&turtle);
+}
diff --git a/src/base/tests/mock_turtle.h b/src/base/tests/mock_turtle.h
new file mode 100644
index 000000000..a128d1399
--- /dev/null
+++ b/src/base/tests/mock_turtle.h
@@ -0,0 +1,18 @@
+#ifndef MOCK_TURTLE_
+#define MOCK_TURTLE_
+
+/*
+ This is a dummy implementation to verify that google mock
+ compiles and runs in OpenSAF
+ */
+
+#include "gmock/gmock.h" // Brings in Google Mock.
+#include "turtle.h"
+
+class MockTurtle : public Turtle {
+ public:
+ MOCK_METHOD0(PenUp, void());
+ MOCK_METHOD0(PenDown, void());
+};
+
+#endif // MOCK_TURTLE_
diff --git a/src/base/tests/turtle.h b/src/base/tests/turtle.h
new file mode 100644
index 000000000..5e10c6af8
--- /dev/null
+++ b/src/base/tests/turtle.h
@@ -0,0 +1,17 @@
+#ifndef TURTLE_H_
+#define TURTLE_H_
+
+/*
+ This is a dummy interface to verify that google mock
+ compiles and runs in OpenSAF
+ */
+
+class Turtle {
+ public:
+ Turtle() {}
+ virtual ~Turtle() {}
+ virtual void PenUp() = 0;
+ virtual void PenDown() = 0;
+};
+
+#endif // TURTLE_H_
diff --git a/src/dtm/Makefile.am b/src/dtm/Makefile.am
index 822249cbe..f925e512e 100644
--- a/src/dtm/Makefile.am
+++ b/src/dtm/Makefile.am
@@ -101,7 +101,8 @@ bin_transport_test_CXXFLAGS =$(AM_CXXFLAGS)
bin_transport_test_CPPFLAGS = \
$(AM_CPPFLAGS) \
- -I$(GTEST_DIR)/include
+ -I$(GTEST_DIR)/include \
+ -I$(GMOCK_DIR)/include
bin_transport_test_LDFLAGS = \
$(AM_LDFLAGS) \
@@ -118,4 +119,6 @@ bin_transport_test_SOURCES = \
bin_transport_test_LDADD = \
$(GTEST_DIR)/lib/libgtest.la \
$(GTEST_DIR)/lib/libgtest_main.la \
+ $(GMOCK_DIR)/lib/libgmock.la \
+ $(GMOCK_DIR)/lib/libgmock_main.la \
lib/libopensaf_core.la
diff --git a/src/experimental/immcpp/api/Makefile.am
b/src/experimental/immcpp/api/Makefile.am
index e1dba9d08..f0400b710 100644
--- a/src/experimental/immcpp/api/Makefile.am
+++ b/src/experimental/immcpp/api/Makefile.am
@@ -116,7 +116,8 @@ bin_testimmcpp_CXXFLAGS =$(AM_CXXFLAGS)
bin_testimmcpp_CPPFLAGS = \
-DSA_EXTENDED_NAME_SOURCE \
$(AM_CPPFLAGS) \
- -I$(GTEST_DIR)/include
+ -I$(GTEST_DIR)/include \
+ -I$(GMOCK_DIR)/include
bin_testimmcpp_LDFLAGS = \
$(AM_LDFLAGS)
@@ -139,6 +140,8 @@ bin_testimmcpp_SOURCES = \
bin_testimmcpp_LDADD = \
$(GTEST_DIR)/lib/libgtest.la \
$(GTEST_DIR)/lib/libgtest_main.la \
+ $(GMOCK_DIR)/lib/libgmock.la \
+ $(GMOCK_DIR)/lib/libgmock_main.la \
lib/libopensaf_core.la \
lib/libopensaf_immoi.la \
lib/libopensaf_immom.la
diff --git a/src/log/Makefile.am b/src/log/Makefile.am
index 3d951eb5d..a772c9287 100644
--- a/src/log/Makefile.am
+++ b/src/log/Makefile.am
@@ -244,7 +244,8 @@ bin_testlogd_CXXFLAGS =$(AM_CXXFLAGS)
bin_testlogd_CPPFLAGS = \
-DSA_EXTENDED_NAME_SOURCE \
$(AM_CPPFLAGS) \
- -I$(GTEST_DIR)/include
+ -I$(GTEST_DIR)/include \
+ -I$(GMOCK_DIR)/include
bin_testlogd_LDFLAGS = \
$(AM_LDFLAGS)
@@ -258,6 +259,8 @@ bin_testlogd_LDADD = \
lib/libopensaf_core.la \
$(GTEST_DIR)/lib/libgtest.la \
$(GTEST_DIR)/lib/libgtest_main.la \
+ $(GMOCK_DIR)/lib/libgmock.la \
+ $(GMOCK_DIR)/lib/libgmock_main.la \
src/log/logd/bin_osaflogd-lgs_unixsock_dest.o \
src/log/logd/bin_osaflogd-lgs_dest.o \
src/log/logd/bin_osaflogd-lgs_nildest.o
diff --git a/test.sh b/test.sh
index 6416fdd43..8fdb52fde 100755
--- a/test.sh
+++ b/test.sh
@@ -23,15 +23,21 @@ fi
test -d "$OSAF_TEST_WORKDIR" || mkdir -p "$OSAF_TEST_WORKDIR"
test -d "$OSAF_TEST_WORKDIR/good_revisions" || mkdir -p
"$OSAF_TEST_WORKDIR/good_revisions"
-if ! test -f "$OSAF_TEST_WORKDIR/googletest/googletest/lib/libgtest.la"; then
+if [[ ! -f "$OSAF_TEST_WORKDIR/googletest/googlemock/lib/libgmock.la" ||
+ ! -f "$OSAF_TEST_WORKDIR/googletest/googletest/lib/libgtest.la" ]]; then
cd "$OSAF_TEST_WORKDIR"
- "$GIT" clone https://github.com/google/googletest.git
- cd "$OSAF_TEST_WORKDIR/googletest/googletest"
+
+ if [ ! -f "$OSAF_TEST_WORKDIR/googletest" ]; then