You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2011/06/05 11:14:08 UTC
svn commit: r1132270 - in /incubator/mesos/trunk/third_party/libprocess:
Makefile.in configure configure.ac example.cpp tests.cpp
Author: benh
Date: Sun Jun 5 09:14:06 2011
New Revision: 1132270
URL: http://svn.apache.org/viewvc?rev=1132270&view=rev
Log:
Added testing via gmock/gtest.
Added:
incubator/mesos/trunk/third_party/libprocess/example.cpp
incubator/mesos/trunk/third_party/libprocess/tests.cpp
Modified:
incubator/mesos/trunk/third_party/libprocess/Makefile.in
incubator/mesos/trunk/third_party/libprocess/configure
incubator/mesos/trunk/third_party/libprocess/configure.ac
Modified: incubator/mesos/trunk/third_party/libprocess/Makefile.in
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/third_party/libprocess/Makefile.in?rev=1132270&r1=1132269&r2=1132270&view=diff
==============================================================================
--- incubator/mesos/trunk/third_party/libprocess/Makefile.in (original)
+++ incubator/mesos/trunk/third_party/libprocess/Makefile.in Sun Jun 5 09:14:06 2011
@@ -10,13 +10,14 @@ LIBS = @LIBS@
BOOST = third_party/boost-1.37.0
GLOG = third_party/glog-0.3.1
+GMOCK = third_party/gmock-1.5.0
LIBEV = third_party/libev-3.8
RY_HTTP_PARSER = third_party/ry-http-parser-1c3624a
# Get better debugging info.
CXXFLAGS += -g
-# Add . to CXXFLAGS.
+# Add source directory to CXXFLAGS.
CXXFLAGS += -I@srcdir@
# Add libev to CXXFLAGS.
@@ -29,8 +30,8 @@ CXXFLAGS += -I@srcdir@/$(BOOST)
CXXFLAGS += -I@srcdir@/$(RY_HTTP_PARSER)
# Add glog to include and lib paths.
-CXXFLAGS += -I@srcdir@/$(GLOG)/src -I@builddir@/$(GLOG)/src
-LDFLAGS += -L@builddir@/$(GLOG)/.libs
+CXXFLAGS += -I@srcdir@/$(GLOG)/src -I$(GLOG)/src
+LDFLAGS += -L$(GLOG)/.libs
# Add -fPIC to CXXFLAGS.
CXXFLAGS += -fPIC -D_XOPEN_SOURCE
@@ -41,41 +42,72 @@ CXXFLAGS += -MMD -MP
LDFLAGS += -L. -L$(LIBEV)/.libs
LIBS += -lprocess -lglog -lev -lpthread
-LIBPROCESS_OBJS = process.o pid.o fatal.o tokenize.o latch.o
+LIBPROCESS_OBJ = process.o pid.o fatal.o tokenize.o latch.o
LIBPROCESS_LIB = libprocess.a
+# Create some testing specific flags.
+CXXFLAGS_TEST = $(CXXFLAGS)
+LDFLAGS_TEST = $(LDFLAGS)
+LIBS_TEST = $(LIBS)
+
+# Add gmock/gtest to include paths, library paths, and libraries for testing.
+CXXFLAGS_TEST += -I@srcdir@/$(GMOCK)/include -I@srcdir@/$(GMOCK)/gtest/include
+LDFLAGS_TEST += -L$(GMOCK)/lib/.libs -L$(GMOCK)/gtest/lib/.libs
+LIBS_TEST += -lgmock -lgtest
+
+LIBPROCESS_TEST_OBJ = tests.o
+LIBPROCESS_TEST_EXE = tests
+
default: all
--include $(patsubst %.o, %.d, $(LIBPROCESS_OBJS))
+-include $(patsubst %.o, %.d, $(LIBPROCESS_OBJ))
+-include $(patsubst %.o, %.d, $(LIBPROCESS_TEST_OBJ))
+-include $(patsubst %, %.d, $(LIBPROCESS_TEST_EXE))
-$(LIBPROCESS_OBJS): %.o: @srcdir@/%.cpp
- $(CXX) $(CXXFLAGS) -c -o $@ $<
+$(LIBPROCESS_OBJ): %.o: @srcdir@/%.cpp
+ $(CXX) -c $(CXXFLAGS) -o $@ $<
-$(LIBPROCESS_LIB): $(LIBPROCESS_OBJS)
+$(LIBPROCESS_LIB): $(LIBPROCESS_OBJ)
$(AR) rcs $@ $^ $(RY_HTTP_PARSER)/http_parser_g.o
third_party:
$(MAKE) -C $(GLOG)
- $(MAKE) -C @builddir@/$(LIBEV)
- cp -r @srcdir@/$(RY_HTTP_PARSER) @builddir@/third_party
- $(MAKE) -C @builddir@/$(RY_HTTP_PARSER) http_parser_g.o
+ $(MAKE) -C $(GMOCK)
+ $(MAKE) -C $(LIBEV)
+ cp -r @srcdir@/$(RY_HTTP_PARSER) third_party
+ $(MAKE) -C $(RY_HTTP_PARSER) http_parser_g.o
+
+$(LIBPROCESS_TEST_OBJ): %.o: @srcdir@/%.cpp
+ $(CXX) -c $(CXXFLAGS_TEST) -o $@ $<
-all: third_party $(LIBPROCESS_LIB)
+$(LIBPROCESS_TEST_EXE): $(LIBPROCESS_LIB) $(LIBPROCESS_TEST_OBJ)
+ $(CXX) $(CXXFLAGS_TEST) -o $@ $^ $(LDFLAGS_TEST) $(LIBS_TEST)
-test: all
- $(CXX) $(CXXFLAGS) -o test @srcdir@/test.cpp $(LDFLAGS) $(LIBS)
+test: $(LIBPROCESS_TEST_EXE)
+ ./$(LIBPROCESS_TEST_EXE)
+
+examples:
+ $(CXX) $(CXXFLAGS) -o example @srcdir@/example.cpp $(LDFLAGS) $(LIBS)
+
+all: third_party $(LIBPROCESS_LIB)
clean:
$(MAKE) -C $(GLOG) clean
- $(MAKE) -C @builddir@/$(LIBEV)
- $(MAKE) -C @builddir@/$(RY_HTTP_PARSER) clean
- rm -f $(patsubst %.o, %.d, $(LIBPROCESS_OBJS)) $(LIBPROCESS_OBJS) $(LIBPROCESS_LIB)
+ $(MAKE) -C $(GMOCK) clean
+ $(MAKE) -C $(LIBEV)
+ $(MAKE) -C $(RY_HTTP_PARSER) clean
+ rm -f $(patsubst %.o, %.d, $(LIBPROCESS_OBJ)) $(LIBPROCESS_OBJ)
+ rm -f $(LIBPROCESS_LIB)
+ rm -f $(patsubst %.o, %.d, $(LIBPROCESS_TEST_OBJ))
+ rm -f $(LIBPROCESS_TEST_EXE)
+ rm -f example
distclean: clean
$(MAKE) -C $(GLOG) distclean
- $(MAKE) -C @builddir@/$(LIBEV) distclean
+ $(MAKE) -C $(GMOCK) distclean
+ $(MAKE) -C $(LIBEV) distclean
rm -f config.status config.cache config.log
rm -f Makefile
-.PHONY: default third_party all clean
\ No newline at end of file
+.PHONY: default third_party test examples all clean
\ No newline at end of file
Modified: incubator/mesos/trunk/third_party/libprocess/configure
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/third_party/libprocess/configure?rev=1132270&r1=1132269&r2=1132270&view=diff
==============================================================================
--- incubator/mesos/trunk/third_party/libprocess/configure (original)
+++ incubator/mesos/trunk/third_party/libprocess/configure Sun Jun 5 09:14:06 2011
@@ -660,6 +660,7 @@ CC
CFLAGS
CPP'
ac_subdirs_all='third_party/glog-0.3.1
+third_party/gmock-1.5.0
third_party/libev-3.8'
# Initialize some variables set by options.
@@ -4207,6 +4208,8 @@ ac_configure="$SHELL $ac_aux_dir/configu
subdirs="$subdirs third_party/glog-0.3.1"
+subdirs="$subdirs third_party/gmock-1.5.0"
+
subdirs="$subdirs third_party/libev-3.8"
Modified: incubator/mesos/trunk/third_party/libprocess/configure.ac
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/third_party/libprocess/configure.ac?rev=1132270&r1=1132269&r2=1132270&view=diff
==============================================================================
--- incubator/mesos/trunk/third_party/libprocess/configure.ac (original)
+++ incubator/mesos/trunk/third_party/libprocess/configure.ac Sun Jun 5 09:14:06 2011
@@ -34,6 +34,7 @@ AC_CHECK_FUNCS([gethostbyname gethostnam
AC_CONFIG_FILES([Makefile])
AC_CONFIG_SUBDIRS([third_party/glog-0.3.1])
+AC_CONFIG_SUBDIRS([third_party/gmock-1.5.0])
AC_CONFIG_SUBDIRS([third_party/libev-3.8])
# Temporary fix so we don't build dylib's on Mac OS X.
Added: incubator/mesos/trunk/third_party/libprocess/example.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/third_party/libprocess/example.cpp?rev=1132270&view=auto
==============================================================================
--- incubator/mesos/trunk/third_party/libprocess/example.cpp (added)
+++ incubator/mesos/trunk/third_party/libprocess/example.cpp Sun Jun 5 09:14:06 2011
@@ -0,0 +1,82 @@
+#include <iostream>
+#include <sstream>
+
+#include <process.hpp>
+
+
+using process::Future;
+using process::HttpOKResponse;
+using process::HttpRequest;
+using process::HttpResponse;
+using process::PID;
+using process::Process;
+using process::Promise;
+
+
+class MyProcess : public Process<MyProcess>
+{
+public:
+ MyProcess()
+ {
+ std::cout << "MyProcess at " << self() << std::endl;
+
+ install("ehlo", &MyProcess::ehlo);
+ install("vars", &MyProcess::vars);
+ }
+
+ Promise<int> func1()
+ {
+ std::cout << "MyProcess::func1 (this = " << this << ")" << std::endl;
+ return promise;
+ }
+
+ void func2(int i)
+ {
+ std::cout << "MyProcess::func2 (this = " << this << ")" << std::endl;
+ promise.set(i);
+ }
+
+ void ehlo()
+ {
+ std::cout << "MyProcess::ehlo (this = " << this << ")" << std::endl;
+ std::cout << "from(): " << from() << std::endl;
+ std::cout << "name(): " << name() << std::endl;
+ std::cout << "body(): " << body() << std::endl;
+ }
+
+ Promise<HttpResponse> vars(const HttpRequest& request)
+ {
+ std::cout << "MyProcess::vars (this = " << this << ")" << std::endl;
+ std::string body = "... vars here ...";
+ HttpOKResponse response;
+ response.headers["Content-Type"] = "text/plain";
+ std::ostringstream out;
+ out << body.size();
+ response.headers["Content-Length"] = out.str();
+ response.body = body;
+ return response;
+ }
+
+private:
+ Promise<int> promise;
+};
+
+
+class Foo : public Process<Foo> {};
+
+
+int main(int argc, char** argv)
+{
+ MyProcess process;
+ PID<MyProcess> pid = process::spawn(&process);
+
+ Future<int> future = process::dispatch(pid, &MyProcess::func1);
+ process::dispatch(pid, &MyProcess::func2, 42);
+
+ std::cout << future.get() << std::endl;
+
+ process::post(pid, "ehlo");
+
+ process::wait(pid);
+ return 0;
+}
Added: incubator/mesos/trunk/third_party/libprocess/tests.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/third_party/libprocess/tests.cpp?rev=1132270&view=auto
==============================================================================
--- incubator/mesos/trunk/third_party/libprocess/tests.cpp (added)
+++ incubator/mesos/trunk/third_party/libprocess/tests.cpp Sun Jun 5 09:14:06 2011
@@ -0,0 +1,100 @@
+#include <gmock/gmock.h>
+
+#include <process.hpp>
+
+using process::PID;
+using process::Process;
+using process::UPID;
+
+using testing::AtMost;
+
+
+class SpawnMockProcess : public Process<SpawnMockProcess>
+{
+public:
+ MOCK_METHOD0(__operator_call__, void());
+ virtual void operator () () { __operator_call__(); }
+};
+
+
+TEST(libprocess, spawn)
+{
+ ASSERT_TRUE(GTEST_IS_THREADSAFE);
+
+ SpawnMockProcess process;
+
+ EXPECT_CALL(process, __operator_call__())
+ .Times(AtMost(1));
+
+ PID<SpawnMockProcess> pid = process::spawn(&process);
+
+ ASSERT_NE(pid, UPID());
+
+ process::wait(pid);
+}
+
+
+class DispatchMockProcess : public Process<DispatchMockProcess>
+{
+public:
+ MOCK_METHOD0(func, void());
+ virtual void operator () () { serve(); }
+};
+
+
+TEST(libprocess, dispatch)
+{
+ ASSERT_TRUE(GTEST_IS_THREADSAFE);
+
+ DispatchMockProcess process;
+
+ EXPECT_CALL(process, func())
+ .Times(AtMost(1));
+
+ PID<DispatchMockProcess> pid = process::spawn(&process);
+
+ ASSERT_NE(pid, UPID());
+
+ process::dispatch(pid, &DispatchMockProcess::func);
+ process::post(pid, process::TERMINATE);
+
+ process::wait(pid);
+}
+
+
+class InstallMockProcess : public Process<InstallMockProcess>
+{
+public:
+ InstallMockProcess() { install("func", &InstallMockProcess::func); }
+ MOCK_METHOD0(func, void());
+ virtual void operator () () { serve(); }
+};
+
+
+TEST(libprocess, install)
+{
+ ASSERT_TRUE(GTEST_IS_THREADSAFE);
+
+ InstallMockProcess process;
+
+ EXPECT_CALL(process, func())
+ .Times(AtMost(1));
+
+ PID<InstallMockProcess> pid = process::spawn(&process);
+
+ ASSERT_NE(pid, UPID());
+
+ process::post(pid, "func");
+ process::post(pid, process::TERMINATE);
+
+ process::wait(pid);
+}
+
+
+int main(int argc, char** argv)
+{
+ // Initialize Google Mock/Test.
+ testing::InitGoogleMock(&argc, argv);
+
+ return RUN_ALL_TESTS();
+}