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();
+}