00001
00016
00017 #ifndef NET_INSTAWEB_UTIL_PUBLIC_SHARED_DYNAMIC_STRING_MAP_TEST_BASE_H_
00018 #define NET_INSTAWEB_UTIL_PUBLIC_SHARED_DYNAMIC_STRING_MAP_TEST_BASE_H_
00019
00020 #include <vector>
00021 #include "base/scoped_ptr.h"
00022 #include "net/instaweb/util/public/abstract_shared_mem.h"
00023 #include "net/instaweb/util/public/basictypes.h"
00024 #include "net/instaweb/util/public/gtest.h"
00025 #include "net/instaweb/util/public/mock_message_handler.h"
00026 #include "net/instaweb/util/public/shared_mem_test_base.h"
00027 #include "net/instaweb/util/public/string.h"
00028
00029 namespace net_instaweb {
00030 class SharedDynamicStringMap;
00031
00032 class SharedDynamicStringMapTestBase : public testing::Test {
00033 protected:
00034 typedef void (SharedDynamicStringMapTestBase::*TestMethod0)();
00035 typedef void (SharedDynamicStringMapTestBase::*TestMethod2)(int, int);
00036
00037 explicit SharedDynamicStringMapTestBase(SharedMemTestEnv* test_env);
00038
00041 bool CreateChild(TestMethod0 method);
00042 bool CreateFillChild(TestMethod2 method, int start, int number_of_strings);
00043
00045 void TestSimple();
00047 void TestCreate();
00049 void TestAdd();
00052 void TestQuarterFull();
00054 void TestFillSingleThread();
00057 void TestFillMultipleNonOverlappingThreads();
00061 void TestFillMultipleOverlappingThreads();
00062
00063 private:
00064 void AddChild();
00065 void AddFillChild(int start, int number_of_strings);
00066 void AddToFullTable();
00067
00069 SharedDynamicStringMap* ChildInit();
00071 SharedDynamicStringMap* ParentInit();
00072
00073 std::vector<GoogleString> strings_;
00074
00075 scoped_ptr<SharedMemTestEnv> test_env_;
00076 scoped_ptr<AbstractSharedMem> shmem_runtime_;
00077 MockMessageHandler handler_;
00078
00079 DISALLOW_COPY_AND_ASSIGN(SharedDynamicStringMapTestBase);
00080 };
00081
00082 template<typename ConcreteTestEnv>
00083 class SharedDynamicStringMapTestTemplate
00084 : public SharedDynamicStringMapTestBase {
00085 public:
00086 SharedDynamicStringMapTestTemplate()
00087 : SharedDynamicStringMapTestBase(new ConcreteTestEnv) {
00088 }
00089 };
00090
00091 TYPED_TEST_CASE_P(SharedDynamicStringMapTestTemplate);
00092
00093 TYPED_TEST_P(SharedDynamicStringMapTestTemplate, TestSimple) {
00094 SharedDynamicStringMapTestBase::TestSimple();
00095 }
00096
00097 TYPED_TEST_P(SharedDynamicStringMapTestTemplate, TestCreate) {
00098 SharedDynamicStringMapTestBase::TestCreate();
00099 }
00100
00101 TYPED_TEST_P(SharedDynamicStringMapTestTemplate, TestAdd) {
00102 SharedDynamicStringMapTestBase::TestAdd();
00103 }
00104
00105 TYPED_TEST_P(SharedDynamicStringMapTestTemplate, TestQuarterFull) {
00106 SharedDynamicStringMapTestBase::TestQuarterFull();
00107 }
00108
00109 TYPED_TEST_P(SharedDynamicStringMapTestTemplate, TestFillSingleThread) {
00110 SharedDynamicStringMapTestBase::TestFillSingleThread();
00111 }
00112
00113 TYPED_TEST_P(SharedDynamicStringMapTestTemplate,
00114 TestFillMultipleNonOverlappingThreads) {
00115 SharedDynamicStringMapTestBase::TestFillMultipleNonOverlappingThreads();
00116 }
00117
00118 TYPED_TEST_P(SharedDynamicStringMapTestTemplate,
00119 TestFillMultipleOverlappingThreads) {
00120 SharedDynamicStringMapTestBase::TestFillMultipleOverlappingThreads();
00121 }
00122
00123 REGISTER_TYPED_TEST_CASE_P(SharedDynamicStringMapTestTemplate, TestSimple,
00124 TestCreate, TestAdd, TestQuarterFull,
00125 TestFillSingleThread,
00126 TestFillMultipleNonOverlappingThreads,
00127 TestFillMultipleOverlappingThreads);
00128
00129 }
00130
00131 #endif ///< NET_INSTAWEB_UTIL_PUBLIC_SHARED_DYNAMIC_STRING_MAP_TEST_BASE_H_