4 #include <boost/test/included/unit_test.hpp>
5 #include "schedule_module_control.h"
6 #include "schedule_module_control_test.h"
11 using namespace boost::unit_test;
13 void schedule_module_control_getInstance_test()
15 BOOST_TEST_MESSAGE("schedule_module_control_getInstance_test");
16 // unit_test[1] getInstance 取得したインスタンスが一致していることのチェック
17 schedule_module_control &control = schedule_module_control::getInstance();
18 schedule_module_control &control_2 = schedule_module_control::getInstance();
19 BOOST_CHECK_EQUAL(&control, &control_2);
21 schedule_module_control_testclass &control_3 = schedule_module_control_testclass::getInstance();
22 // unit_test[2] getInstance modulefile_pathのデフォルト値のチェック
23 BOOST_CHECK_EQUAL(control_3.get_modulefile_path(), "");
24 // unit_test[3] getInstance ロードモジュールのマップのデフォルトサイズのチェック
25 schedule_module_control::name_module_info_map &loadmodulemap = control_3.get_loadmodule_map();
26 BOOST_CHECK_EQUAL(loadmodulemap.size(), (size_t)0);
29 void schedule_module_control_initialize_test()
31 BOOST_TEST_MESSAGE("schedule_module_control_initialize_test");
32 schedule_module_control_testclass &control = schedule_module_control_testclass::getInstance();
34 // unit_test[4] initializeメソッドの呼び出しのチェック(正常系その1)
35 control.initialize(".");
37 // unit_test[5] initialize 引数で指定されたモジュールのパスが設定されていることのチェック
38 BOOST_CHECK_EQUAL(control.get_modulefile_path(), ".");
41 // unit_test[6] initializeメソッドの呼び出しのチェック(正常系その2) 指定するパスを変えた場合
42 std::string modulename("./schedule");
43 control.initialize(modulename);
44 // unit_test[7] initialize 引数で指定されたモジュールのパスが設定されていることのチェック
45 BOOST_CHECK_EQUAL(control.get_modulefile_path(), modulename);
49 void schedule_module_control_finalize_test()
51 BOOST_TEST_MESSAGE("schedule_module_control_finalize_test");
52 schedule_module_control_testclass &control = schedule_module_control_testclass::getInstance();
54 // unit_test[8] finalizeメソッドの呼び出しのチェック
58 void schedule_module_control_load_test()
60 BOOST_TEST_MESSAGE("schedule_module_control_load_test");
61 schedule_module_control_testclass &control = schedule_module_control_testclass::getInstance();
63 // unit_test[] load_moduleメソッドのテスト initializeしないでロードした場合
64 l7vs::schedule_module_base *schedule1 = NULL;
66 schedule1 = control.load_module(PM1);
68 BOOST_ERROR("exception : load_module");
70 BOOST_CHECK(schedule1 != NULL);
71 BOOST_CHECK(dlerror() == NULL);
72 control.unload_module(schedule1);
74 // unit_test[9] load_moduleメソッド ロードするモジュール名が存在しない場合のチェック
75 l7vs::schedule_module_base *schedule2 = NULL;
77 schedule2 = control.load_module("error");
79 BOOST_ERROR("exception : load_module");
81 BOOST_CHECK(schedule2 == NULL);
82 control.unload_module(schedule2);
84 // unit_test[10] load_moduleメソッドのテスト(正常系)戻り値がNULLでないことのチェック
85 control.initialize(".");
86 l7vs::schedule_module_base *schedule3 = NULL;
88 schedule3 = control.load_module(PM1);
90 BOOST_ERROR("exception : load_module");
92 BOOST_CHECK(schedule3 != NULL);
93 // unit_test[11] load_module ロードモジュールのマップに追加され、マップのサイズが変わっていることのチェック
94 schedule_module_control::name_module_info_map &loadmodulemap = control.get_loadmodule_map();
95 BOOST_CHECK_EQUAL(loadmodulemap.size(), (size_t)1);
96 // unit_test[12] load_module ロードモジュールのマップのロードしたモジュールの参照回数が増加していることのチェック0→1
97 schedule_module_control::name_module_info_map::iterator it;
98 it = loadmodulemap.find(PM1);
99 BOOST_CHECK_EQUAL(it->second.ref_count, (unsigned int)1);
100 // unit_test[13] load_module 指定したモジュールのdlopenの戻り値のhandleのチェック
101 BOOST_CHECK(it->second.handle != NULL);
102 // unit_test[14] load_module 指定したモジュールのdlsymの戻り値のcreate_funcのチェック
103 BOOST_CHECK(it->second.create_func != NULL);
104 // unit_test[15] load_module 指定したモジュールのdlsymの戻り値のdestroy_funcのチェック
105 BOOST_CHECK(it->second.destroy_func != NULL);
107 // unit_test[16] load_moduleメソッドのテスト(正常系)同じモジュールを再ロードした場合のチェック
108 l7vs::schedule_module_base *schedule4 = NULL;
110 schedule4 = control.load_module(PM1);
112 BOOST_ERROR("exception : load_module");
114 BOOST_CHECK(schedule4 != NULL);
115 // unit_test[17] load_module 前回ロードしたモジュールのインスタンスと別のインスタンスであることのチェック
116 BOOST_CHECK(schedule3 != schedule4);
118 // unit_test[18] load_module ロードモジュールのマップのロードしたモジュールの参照回数が増加していることのチェック1→2
119 it = loadmodulemap.find(PM1);
120 BOOST_CHECK_EQUAL(it->second.ref_count, (unsigned int)2);
122 // unit_test[19] load_moduleメソッドのテスト(正常系)前回のモジュールをロードしたまま、新たに別のモジュールをロードした場合のチェック
123 l7vs::schedule_module_base *schedule5 = NULL;
125 schedule5 = control.load_module(PM2);
127 BOOST_ERROR("exception : load_module");
129 BOOST_CHECK(schedule5 != NULL);
130 // unit_test[20] load_module 新たにロードしたモジュールが別のインスタンスであることのチェック
131 BOOST_CHECK(schedule4 != schedule5);
132 // unit_test[21] load_module 新たにロードモジュールのマップに追加され、マップのサイズが変わっていることのチェック
133 BOOST_CHECK_EQUAL(loadmodulemap.size(), (size_t)2);
134 // load_module ロードモジュールのマップのロードしたモジュールの参照回数が増加していることのチェック0→1
135 it = loadmodulemap.find(PM2);
136 BOOST_CHECK_EQUAL(it->second.ref_count, (unsigned int)1);
138 control.unload_module(schedule3);
139 control.unload_module(schedule4);
140 control.unload_module(schedule5);
144 void schedule_module_control_unload_test()
146 BOOST_TEST_MESSAGE("schedule_module_control_unload_test");
147 schedule_module_control_testclass &control = schedule_module_control_testclass::getInstance();
148 control.initialize(".");
150 // unit_test[22] unload_moduleメソッドのテスト(正常系) 1回だけロードしたモジュールをアンロードする場合のチェック
151 l7vs::schedule_module_base *schedule1 = NULL;
153 schedule1 = control.load_module(PM1);
155 BOOST_ERROR("exception : load_module");
157 control.unload_module(schedule1);
159 // unit_test[23] unload_moduleメソッドのテスト(正常系) 2回ロードしたモジュールをアンロードする場合のチェック
160 l7vs::schedule_module_base *schedule2 = NULL;
162 schedule2 = control.load_module(PM1);
164 BOOST_ERROR("exception : load_module");
166 l7vs::schedule_module_base *schedule3 = NULL;
168 schedule3 = control.load_module(PM1);
170 BOOST_ERROR("exception : load_module");
172 schedule_module_control::name_module_info_map &loadmodulemap = control.get_loadmodule_map();
173 BOOST_CHECK_EQUAL(loadmodulemap.size(), (size_t)1);
174 schedule_module_control::name_module_info_map::iterator it;
175 it = loadmodulemap.find(PM1);
177 control.unload_module(schedule2);
178 BOOST_CHECK_EQUAL(loadmodulemap.size(), (size_t)1);
179 // unit_test[24] unload_module ロードモジュールのマップのロードしたモジュールの参照回数が減少していることのチェック2→1
180 it = loadmodulemap.find(PM1);
181 BOOST_CHECK_EQUAL(it->second.ref_count, (unsigned int)1);
183 control.unload_module(schedule3);
184 // unload_module ロードモジュールのマップのロードしたモジュールの参照回数が減少していることのチェック1→0
185 it = loadmodulemap.find(PM1);
186 BOOST_CHECK_EQUAL(it->second.ref_count, (unsigned int)0);
187 // unit_test[25] unload_module ロードモジュールのマップから削除されたことのチェック
188 BOOST_CHECK_EQUAL(loadmodulemap.size(), (size_t)0);
190 // unit_test[26] unload_moduleメソッドのテスト(異常系) 引数がNULLの場合のチェック
191 l7vs::schedule_module_base *schedule4 = NULL;
192 control.unload_module(schedule4);
193 BOOST_CHECK(dlerror() == NULL);
196 // unit_test[] unload_moduleメソッドのテスト(異常系) アンロードするモジュールを2回unloadした場合のチェック
197 l7vs::schedule_module_base *schedule5 = NULL;
199 schedule5 = control.load_module(PM1);
201 BOOST_ERROR("exception : load_module");
203 control.unload_module(schedule5);
204 BOOST_CHECK(dlerror() == NULL);
205 control.unload_module(schedule5);
206 BOOST_CHECK(dlerror() == NULL);
211 test_suite *init_unit_test_suite(int argc, char *argv[])
215 // l7vs::Parameter param;
217 // create unit test suite
218 test_suite *ts = BOOST_TEST_SUITE("schedule_module_control");
220 // add test case to test suite
221 ts->add(BOOST_TEST_CASE(&schedule_module_control_getInstance_test));
222 ts->add(BOOST_TEST_CASE(&schedule_module_control_initialize_test));
223 ts->add(BOOST_TEST_CASE(&schedule_module_control_finalize_test));
224 ts->add(BOOST_TEST_CASE(&schedule_module_control_load_test));
225 ts->add(BOOST_TEST_CASE(&schedule_module_control_unload_test));
227 framework::master_test_suite().add(ts);