Sipper 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. data/sipper/README.rb +26 -0
  2. data/sipper/b2bua_controller.rb +163 -0
  3. data/sipper/b2bua_session_mixin.rb +24 -0
  4. data/sipper/base_controller.rb +425 -0
  5. data/sipper/bin/common.rb +42 -0
  6. data/sipper/bin/generate.rb +70 -0
  7. data/sipper/bin/project.rb +44 -0
  8. data/sipper/bin/run.rb +85 -0
  9. data/sipper/bin/run_smoke.rb +8 -0
  10. data/sipper/config/log4r.xml +71 -0
  11. data/sipper/controller_class_loader.rb +29 -0
  12. data/sipper/controller_selector.rb +119 -0
  13. data/sipper/controllers/invite_controller.rb +30 -0
  14. data/sipper/controllers/order.yaml +3 -0
  15. data/sipper/custom_message.rb +4 -0
  16. data/sipper/detached_session.rb +11 -0
  17. data/sipper/docs/manual.txt +1621 -0
  18. data/sipper/generators/README +12 -0
  19. data/sipper/generators/gen_controller.rb +228 -0
  20. data/sipper/generators/gen_project.rb +45 -0
  21. data/sipper/generators/gen_test.rb +72 -0
  22. data/sipper/generators/project_template_dir/Rakefile +56 -0
  23. data/sipper/generators/project_template_dir/config/sipper.cfg +31 -0
  24. data/sipper/generators/project_template_dir/controllers/README.txt +2 -0
  25. data/sipper/generators/project_template_dir/dot_sipper.proj +2 -0
  26. data/sipper/generators/project_template_dir/logs/README.txt +2 -0
  27. data/sipper/generators/project_template_dir/tests/README.txt +2 -0
  28. data/sipper/lib/smc/statemap.rb +194 -0
  29. data/sipper/logs/dialog_info_store +0 -0
  30. data/sipper/logs/r.cmd +6 -0
  31. data/sipper/logs/r.sh +6 -0
  32. data/sipper/media/sipper_media_client.rb +268 -0
  33. data/sipper/media/sipper_media_event.rb +43 -0
  34. data/sipper/media/sipper_media_manager.rb +145 -0
  35. data/sipper/media/sipper_media_proxy.rb +60 -0
  36. data/sipper/media/sipper_offer_answer.rb +285 -0
  37. data/sipper/message.rb +512 -0
  38. data/sipper/modified_pattern_formatter.rb +119 -0
  39. data/sipper/proxy_controller.rb +143 -0
  40. data/sipper/registration.rb +52 -0
  41. data/sipper/request.rb +109 -0
  42. data/sipper/response.rb +123 -0
  43. data/sipper/ruby_ext/module.rb +27 -0
  44. data/sipper/ruby_ext/mutable_class.rb +17 -0
  45. data/sipper/ruby_ext/object.rb +38 -0
  46. data/sipper/ruby_ext/pqueue.rb +190 -0
  47. data/sipper/ruby_ext/snapshot.rb +201 -0
  48. data/sipper/ruby_ext/string.rb +18 -0
  49. data/sipper/ruby_ext/time.rb +9 -0
  50. data/sipper/run/run_sipper1.rb +28 -0
  51. data/sipper/run/run_sipper2.rb +56 -0
  52. data/sipper/sdp/sdp.rb +257 -0
  53. data/sipper/sdp/sdp_generator.rb +131 -0
  54. data/sipper/sdp/sdp_parser.rb +136 -0
  55. data/sipper/session.rb +1952 -0
  56. data/sipper/session_manager.rb +170 -0
  57. data/sipper/session_recorder.rb +190 -0
  58. data/sipper/session_state/DialogState.sm +54 -0
  59. data/sipper/session_state/DialogState_sm.rb +337 -0
  60. data/sipper/session_state/dialog_routes.rb +141 -0
  61. data/sipper/sip_headers/header.rb +632 -0
  62. data/sipper/sip_headers/sipuri.rb +352 -0
  63. data/sipper/sip_logger.rb +65 -0
  64. data/sipper/sip_message_router.rb +231 -0
  65. data/sipper/sip_test_driver_controller.rb +10 -0
  66. data/sipper/sipper.rb +329 -0
  67. data/sipper/sipper_assertions.rb +21 -0
  68. data/sipper/sipper_configurator.rb +376 -0
  69. data/sipper/sipper_http/sipper_http_request_dispatcher.rb +71 -0
  70. data/sipper/sipper_http/sipper_http_response.rb +25 -0
  71. data/sipper/stray_message_manager.rb +40 -0
  72. data/sipper/test_completion_signaling_helper.rb +77 -0
  73. data/sipper/transaction/Ict.sm +59 -0
  74. data/sipper/transaction/Ict_sm.rb +430 -0
  75. data/sipper/transaction/Ist.sm +74 -0
  76. data/sipper/transaction/Ist_sm.rb +460 -0
  77. data/sipper/transaction/Nict.sm +51 -0
  78. data/sipper/transaction/Nict_sm.rb +325 -0
  79. data/sipper/transaction/Nist.sm +59 -0
  80. data/sipper/transaction/Nist_sm.rb +356 -0
  81. data/sipper/transaction/invite_client_transaction.rb +274 -0
  82. data/sipper/transaction/invite_server_transaction.rb +319 -0
  83. data/sipper/transaction/non_invite_client_transaction.rb +230 -0
  84. data/sipper/transaction/non_invite_server_transaction.rb +263 -0
  85. data/sipper/transaction/state_machine_wrapper.rb +58 -0
  86. data/sipper/transaction/transaction.rb +212 -0
  87. data/sipper/transport/base_transport.rb +84 -0
  88. data/sipper/transport/rel_unrel.rb +19 -0
  89. data/sipper/transport/transport_and_route_resolver.rb +67 -0
  90. data/sipper/transport/udp_transport.rb +156 -0
  91. data/sipper/transport_manager.rb +33 -0
  92. data/sipper/udp_session.rb +17 -0
  93. data/sipper/util/command_element.rb +62 -0
  94. data/sipper/util/compact_converter.rb +50 -0
  95. data/sipper/util/counter.rb +26 -0
  96. data/sipper/util/digest/digest_authorizer.rb +204 -0
  97. data/sipper/util/expectation_parser.rb +164 -0
  98. data/sipper/util/locator.rb +31 -0
  99. data/sipper/util/message_fill.rb +58 -0
  100. data/sipper/util/persistence/ps_sipper_map.rb +63 -0
  101. data/sipper/util/persistence/sipper_map.rb +41 -0
  102. data/sipper/util/sipper_util.rb +305 -0
  103. data/sipper/util/timer/sip_timer_helper.rb +26 -0
  104. data/sipper/util/timer/timer_manager.rb +80 -0
  105. data/sipper/util/timer/timer_task.rb +56 -0
  106. data/sipper/util/validations.rb +44 -0
  107. data/sipper/version.rb +10 -0
  108. data/sipper_test/_test_media_uas.rb +79 -0
  109. data/sipper_test/base_test_case.rb +31 -0
  110. data/sipper_test/c_134.txt +7 -0
  111. data/sipper_test/driven_sip_test_case.rb +96 -0
  112. data/sipper_test/gold.txt +10 -0
  113. data/sipper_test/gold_res.txt +8 -0
  114. data/sipper_test/gold_sub.txt +9 -0
  115. data/sipper_test/hello_sipper.au +0 -0
  116. data/sipper_test/in_sipper.au +0 -0
  117. data/sipper_test/nonrr_proxy.rb +17 -0
  118. data/sipper_test/order_tests.yaml +4 -0
  119. data/sipper_test/rake_res.txt +399 -0
  120. data/sipper_test/rr_proxy.rb +17 -0
  121. data/sipper_test/run_test.cmd +94 -0
  122. data/sipper_test/sip_test_case.rb +104 -0
  123. data/sipper_test/test2xx_retransmission.rb +80 -0
  124. data/sipper_test/test2xx_retransmission_with_limit.rb +81 -0
  125. data/sipper_test/test2xx_retransmission_with_nist.rb +91 -0
  126. data/sipper_test/test2xx_retransmission_with_txns.rb +94 -0
  127. data/sipper_test/test_address_header.rb +66 -0
  128. data/sipper_test/test_b2bua1.rb +130 -0
  129. data/sipper_test/test_b2bua2.rb +120 -0
  130. data/sipper_test/test_b2bua3.rb +160 -0
  131. data/sipper_test/test_b2bua4.rb +130 -0
  132. data/sipper_test/test_base_controller.rb +110 -0
  133. data/sipper_test/test_base_transport.rb +37 -0
  134. data/sipper_test/test_cancel.rb +21 -0
  135. data/sipper_test/test_cancel_after2xx.rb +81 -0
  136. data/sipper_test/test_cancel_retransmission.rb +105 -0
  137. data/sipper_test/test_cancel_with481.rb +83 -0
  138. data/sipper_test/test_cancel_with487.rb +70 -0
  139. data/sipper_test/test_cancel_with_ist_without_nist.rb +99 -0
  140. data/sipper_test/test_cancel_with_nist.rb +84 -0
  141. data/sipper_test/test_cancel_without487.rb +77 -0
  142. data/sipper_test/test_command_element.rb +38 -0
  143. data/sipper_test/test_compact_converter.rb +33 -0
  144. data/sipper_test/test_controller_class_loader.rb +37 -0
  145. data/sipper_test/test_controller_selector.rb +53 -0
  146. data/sipper_test/test_controller_using_compact_headers.rb +74 -0
  147. data/sipper_test/test_controller_using_header_order.rb +85 -0
  148. data/sipper_test/test_controller_using_ict.rb +64 -0
  149. data/sipper_test/test_controller_using_ict_with_non_success.rb +72 -0
  150. data/sipper_test/test_controller_using_ict_with_tcbh.rb +24 -0
  151. data/sipper_test/test_controller_using_ict_with_tcbh_no_action.rb +24 -0
  152. data/sipper_test/test_controller_using_ist.rb +70 -0
  153. data/sipper_test/test_controller_using_ist_with_tcbh.rb +24 -0
  154. data/sipper_test/test_controller_using_nict.rb +115 -0
  155. data/sipper_test/test_controller_using_nict_with_tcbh.rb +24 -0
  156. data/sipper_test/test_controller_using_nist.rb +63 -0
  157. data/sipper_test/test_controller_using_pre_existing_rs0.rb +73 -0
  158. data/sipper_test/test_controller_using_pre_existing_rs1.rb +75 -0
  159. data/sipper_test/test_controller_using_pre_existing_rs2.rb +71 -0
  160. data/sipper_test/test_controller_using_route_set.rb +86 -0
  161. data/sipper_test/test_controller_with_sdp.rb +80 -0
  162. data/sipper_test/test_controllers/cancel/order.yaml +2 -0
  163. data/sipper_test/test_controllers/cancel/uac_cancel_controller.rb +35 -0
  164. data/sipper_test/test_controllers/cancel/uas_cancel_controller.rb +25 -0
  165. data/sipper_test/test_controllers/class_loading/ordered/first_ordered_controller.rb +5 -0
  166. data/sipper_test/test_controllers/class_loading/ordered/order.yaml +3 -0
  167. data/sipper_test/test_controllers/class_loading/ordered/recond_ordered_controller.rb +6 -0
  168. data/sipper_test/test_controllers/class_loading/ordered/second_ordered_controller.rb +6 -0
  169. data/sipper_test/test_controllers/class_loading/unordered/first_unordered_controller.rb +7 -0
  170. data/sipper_test/test_controllers/class_loading/unordered/second_unordered_controller.rb +6 -0
  171. data/sipper_test/test_controllers/ctrl_trhandler/lib/transport_filters/my_transport_handler.rb +22 -0
  172. data/sipper_test/test_controllers/ctrl_trhandler/uac_tr_handler_controller.rb +27 -0
  173. data/sipper_test/test_controllers/ctrl_trhandler/uas_tr_handler_controller.rb +21 -0
  174. data/sipper_test/test_controllers/ete/order.yaml +1 -0
  175. data/sipper_test/test_controllers/ete/uac_controller.rb +39 -0
  176. data/sipper_test/test_controllers/ete/uas_controller.rb +34 -0
  177. data/sipper_test/test_controllers/extensions/extension_uac_controller.rb +24 -0
  178. data/sipper_test/test_controllers/extensions/extension_uas_controller.rb +35 -0
  179. data/sipper_test/test_controllers/extensions/lib/sipper_extensions/my_from_extension.rb +16 -0
  180. data/sipper_test/test_controllers/ict_tcbh/lib/transaction_handlers/app_ict_handler.rb +23 -0
  181. data/sipper_test/test_controllers/ict_tcbh/uac_ict_tcbh_controller.rb +27 -0
  182. data/sipper_test/test_controllers/ict_tcbh/uac_ict_tcbh_no_action_controller.rb +28 -0
  183. data/sipper_test/test_controllers/ict_tcbh/uas_ict_tcbh_controller.rb +29 -0
  184. data/sipper_test/test_controllers/ict_tcbh/uas_ict_tcbh_no_action_controller.rb +31 -0
  185. data/sipper_test/test_controllers/ist_tcbh/lib/app_ist_handler.rb +13 -0
  186. data/sipper_test/test_controllers/ist_tcbh/uac_ist_tcbh_controller.rb +22 -0
  187. data/sipper_test/test_controllers/ist_tcbh/uas_ist_tcbh_controller.rb +31 -0
  188. data/sipper_test/test_controllers/multi_trhandlers/lib/transport_filters/in_order.yaml +2 -0
  189. data/sipper_test/test_controllers/multi_trhandlers/lib/transport_filters/my_transport_handler1.rb +21 -0
  190. data/sipper_test/test_controllers/multi_trhandlers/lib/transport_filters/my_transport_handler2.rb +21 -0
  191. data/sipper_test/test_controllers/multi_trhandlers/lib/transport_filters/out_order.yaml +2 -0
  192. data/sipper_test/test_controllers/multi_trhandlers/uac_multi_tr_handler_controller.rb +27 -0
  193. data/sipper_test/test_controllers/multi_trhandlers/uas_multi_tr_handler_controller.rb +29 -0
  194. data/sipper_test/test_controllers/multiple/lib/blank_test.rb +2 -0
  195. data/sipper_test/test_controllers/multiple/uac_info_controller.rb +21 -0
  196. data/sipper_test/test_controllers/multiple/uac_msg_controller.rb +20 -0
  197. data/sipper_test/test_controllers/multiple/uas_info_controller.rb +15 -0
  198. data/sipper_test/test_controllers/multiple/uas_msg_controller.rb +14 -0
  199. data/sipper_test/test_controllers/nict_tcbh/lib/transaction_handlers/app_nict_handler.rb +13 -0
  200. data/sipper_test/test_controllers/nict_tcbh/uac_nict_tcbh_controller.rb +26 -0
  201. data/sipper_test/test_controllers/nict_tcbh/uas_nict_tcbh_controller.rb +20 -0
  202. data/sipper_test/test_controllers/state_machine_based/lib/CreditControl.sm +43 -0
  203. data/sipper_test/test_controllers/state_machine_based/lib/CreditControl_sm.rb +194 -0
  204. data/sipper_test/test_controllers/state_machine_based/order.yaml +1 -0
  205. data/sipper_test/test_controllers/state_machine_based/uac_message_controller.rb +34 -0
  206. data/sipper_test/test_controllers/state_machine_based/uas_message_controller.rb +44 -0
  207. data/sipper_test/test_controllers/stray_message/lib/sipper_extensions/my_stray_handler.rb +9 -0
  208. data/sipper_test/test_controllers/stray_message/stray_uac_controller.rb +24 -0
  209. data/sipper_test/test_controllers/stray_message/stray_uas_controller.rb +31 -0
  210. data/sipper_test/test_controllers/string/order.yaml +1 -0
  211. data/sipper_test/test_controllers/string/uac_controller.rb +29 -0
  212. data/sipper_test/test_controllers/string/uas_controller.rb +22 -0
  213. data/sipper_test/test_controllers/test_controller.rb +24 -0
  214. data/sipper_test/test_detached_session1.rb +78 -0
  215. data/sipper_test/test_dialog_routes.rb +139 -0
  216. data/sipper_test/test_digest_challenge1.rb +89 -0
  217. data/sipper_test/test_digest_challenge2.rb +90 -0
  218. data/sipper_test/test_dynamic_parse.rb +249 -0
  219. data/sipper_test/test_empty_sdp.rb +89 -0
  220. data/sipper_test/test_ete.rb +37 -0
  221. data/sipper_test/test_expectation_parser.rb +76 -0
  222. data/sipper_test/test_extensions.rb +28 -0
  223. data/sipper_test/test_freeze.rb +81 -0
  224. data/sipper_test/test_generated.rb +90 -0
  225. data/sipper_test/test_header_parameters.rb +75 -0
  226. data/sipper_test/test_header_parse.rb +141 -0
  227. data/sipper_test/test_http_client1.rb +84 -0
  228. data/sipper_test/test_http_client2.rb +90 -0
  229. data/sipper_test/test_ict_with_timeout.rb +62 -0
  230. data/sipper_test/test_in_dialog_request.rb +61 -0
  231. data/sipper_test/test_inline_controller.rb +67 -0
  232. data/sipper_test/test_invite_client_transaction.rb +272 -0
  233. data/sipper_test/test_invite_replace.rb +147 -0
  234. data/sipper_test/test_invite_retransmission.rb +90 -0
  235. data/sipper_test/test_invite_server_transaction.rb +208 -0
  236. data/sipper_test/test_lower_cseq.rb +79 -0
  237. data/sipper_test/test_media.rb +52 -0
  238. data/sipper_test/test_message.rb +392 -0
  239. data/sipper_test/test_method_specific_response_handling.rb +81 -0
  240. data/sipper_test/test_multi_homed1.rb +127 -0
  241. data/sipper_test/test_multi_homed2.rb +109 -0
  242. data/sipper_test/test_multi_homed_duplicate.rb +87 -0
  243. data/sipper_test/test_multi_homed_with_detached.rb +88 -0
  244. data/sipper_test/test_multiple.rb +49 -0
  245. data/sipper_test/test_multiple_contacts.rb +89 -0
  246. data/sipper_test/test_non2xx_retransmission_with_ist.rb +87 -0
  247. data/sipper_test/test_non_invite_client_transaction.rb +210 -0
  248. data/sipper_test/test_non_invite_retransmission.rb +91 -0
  249. data/sipper_test/test_non_invite_server_transaction.rb +202 -0
  250. data/sipper_test/test_offer_answer_prack.rb +103 -0
  251. data/sipper_test/test_pickup.rb +258 -0
  252. data/sipper_test/test_prack.rb +105 -0
  253. data/sipper_test/test_prack_store_and_dispatch.rb +101 -0
  254. data/sipper_test/test_prack_timer.rb +105 -0
  255. data/sipper_test/test_ps_sipper_map.rb +56 -0
  256. data/sipper_test/test_re_invite_uas_ongoing_ict.rb +81 -0
  257. data/sipper_test/test_re_invite_uas_ongoing_ist.rb +84 -0
  258. data/sipper_test/test_re_invite_with_ongoing_ict.rb +101 -0
  259. data/sipper_test/test_re_invite_with_ongoing_ist.rb +89 -0
  260. data/sipper_test/test_recorder_swap.rb +157 -0
  261. data/sipper_test/test_refer.rb +121 -0
  262. data/sipper_test/test_registeration_clearing.rb +97 -0
  263. data/sipper_test/test_registrar.rb +109 -0
  264. data/sipper_test/test_registration_controller.rb +73 -0
  265. data/sipper_test/test_registration_timeout.rb +90 -0
  266. data/sipper_test/test_remote_controller.rb +39 -0
  267. data/sipper_test/test_remote_target_update_on2xx.rb +140 -0
  268. data/sipper_test/test_request.rb +106 -0
  269. data/sipper_test/test_response.rb +40 -0
  270. data/sipper_test/test_response_without_to_tag.rb +92 -0
  271. data/sipper_test/test_rport.rb +88 -0
  272. data/sipper_test/test_sdp.rb +91 -0
  273. data/sipper_test/test_sdp_parser.rb +145 -0
  274. data/sipper_test/test_session.rb +276 -0
  275. data/sipper_test/test_session_callback_handler.rb +68 -0
  276. data/sipper_test/test_session_lifetime.rb +66 -0
  277. data/sipper_test/test_session_manager.rb +141 -0
  278. data/sipper_test/test_session_recorder.rb +145 -0
  279. data/sipper_test/test_session_state_user_defined.rb +84 -0
  280. data/sipper_test/test_session_states.rb +91 -0
  281. data/sipper_test/test_simple_dialog_state.rb +86 -0
  282. data/sipper_test/test_simple_re_invite.rb +86 -0
  283. data/sipper_test/test_sip_uri.rb +234 -0
  284. data/sipper_test/test_sipper_util.rb +45 -0
  285. data/sipper_test/test_smc_controller.rb +17 -0
  286. data/sipper_test/test_smoke.rb +80 -0
  287. data/sipper_test/test_stray.rb +28 -0
  288. data/sipper_test/test_stray_inline.rb +89 -0
  289. data/sipper_test/test_stray_res_acked.rb +103 -0
  290. data/sipper_test/test_stray_respond.rb +104 -0
  291. data/sipper_test/test_stray_retry.rb +92 -0
  292. data/sipper_test/test_stray_retry_failure.rb +93 -0
  293. data/sipper_test/test_stray_retry_initial.rb +100 -0
  294. data/sipper_test/test_strict_router_with_angled.rb +84 -0
  295. data/sipper_test/test_string_record.rb +31 -0
  296. data/sipper_test/test_subscribe_notify.rb +141 -0
  297. data/sipper_test/test_subscribe_notify_client_timeout.rb +158 -0
  298. data/sipper_test/test_subscribe_notify_dialog.rb +146 -0
  299. data/sipper_test/test_subscribe_notify_expires.rb +155 -0
  300. data/sipper_test/test_subscribe_notify_multiple_subscription.rb +157 -0
  301. data/sipper_test/test_subscribe_notify_server_timeout.rb +144 -0
  302. data/sipper_test/test_subsequent_unsent.rb +88 -0
  303. data/sipper_test/test_target_refresh_proxy_detached.rb +128 -0
  304. data/sipper_test/test_target_refresh_proxy_udp.rb +130 -0
  305. data/sipper_test/test_target_refresh_rr_proxy_udp.rb +133 -0
  306. data/sipper_test/test_target_refresh_with_new_port.rb +158 -0
  307. data/sipper_test/test_target_refresh_with_proxy1.rb +113 -0
  308. data/sipper_test/test_target_refresh_with_rr_update_proxy.rb +145 -0
  309. data/sipper_test/test_target_refresh_with_update_proxy.rb +144 -0
  310. data/sipper_test/test_target_refresh_with_update_proxy2.rb +139 -0
  311. data/sipper_test/test_timer_manager.rb +71 -0
  312. data/sipper_test/test_timer_task.rb +60 -0
  313. data/sipper_test/test_transport_handler.rb +19 -0
  314. data/sipper_test/test_transport_multi_handler.rb +18 -0
  315. data/sipper_test/test_udp_transport.rb +119 -0
  316. data/sipper_test/test_unparsed.rb +70 -0
  317. data/sipper_test/test_validations.rb +69 -0
  318. data/sipper_test/test_with_rr_proxy.rb +111 -0
  319. data/sipper_test/testmediacontroller.rb +71 -0
  320. data/sipper_test/tracing.rb +23 -0
  321. data/sipper_test/transaction_test_helper.rb +176 -0
  322. data/sipper_test/transport_filters.rb +26 -0
  323. data/sipper_test/ts_sipper.rb +91 -0
  324. data/sipper_test/ts_smoke.rb +3 -0
  325. data/sipper_test/tt.cmd +20 -0
  326. metadata +455 -0
@@ -0,0 +1,139 @@
1
+
2
+
3
+ require 'driven_sip_test_case'
4
+
5
+ # UAC runs on 5066
6
+ # UAS runs on 5067
7
+ # Proxy runs on 5068
8
+
9
+ class TestTargetRefreshWithUpdateProxy2 < DrivenSipTestCase
10
+
11
+ # To run this test in windows, in a separate shell execute the proxy
12
+ # "srun -p 5068 -0 5067 -c nonrr_proxy.rb"
13
+ # and set an env var
14
+ # "set SIPPER_TEST_PROXY_EXTERNAL=true"
15
+ # You would do similar thing for rr_proxy with a higher port in a second shell
16
+ # "srun -p 5069 -0 5067 -c rr_proxy.rb"
17
+ # Let these two proxies run.
18
+ # Then run the test cases, after you are done make sure to unset the env var by
19
+ # "set SIPPER_TEST_PROXY_EXTERNAL="
20
+ # For one run you need only to execute the two proxies only once for all tests.
21
+ def setup
22
+ @sr = SipperConfigurator[:SessionRecord]
23
+ SipperConfigurator[:SessionRecord] = "msg-info"
24
+ @tp = SipperConfigurator[:LocalTestPort]
25
+ SipperConfigurator[:LocalTestPort] = [5066, 5067]
26
+
27
+ super
28
+ unless RUBY_PLATFORM =~ /mswin/
29
+ system("srun -p #{SipperConfigurator[:LocalTestPort][1]+1} -o #{SipperConfigurator[:LocalTestPort][1]} -rf 3 -c #{File.join(SipperConfigurator[:SipperBasePath],"sipper_test", "nonrr_proxy.rb")} &")
30
+ end
31
+
32
+ str2 = <<-EOF2
33
+
34
+ require 'sip_test_driver_controller'
35
+
36
+ module SipInline
37
+ class UasRt7Controller < SIP::SipTestDriverController
38
+
39
+ transaction_usage :use_transactions=>true
40
+
41
+ def specified_transport
42
+ [SipperConfigurator[:LocalSipperIP],
43
+ SipperConfigurator[:LocalTestPort][1]]
44
+ end
45
+
46
+ def on_invite(session)
47
+ if session.irequest[:via].length == 2
48
+ session.do_record("double_via")
49
+ end
50
+ session.respond_with(200)
51
+ logd("Received INVITE sent a 200 from "+name)
52
+ end
53
+
54
+
55
+
56
+
57
+
58
+ def on_update(session)
59
+ session.respond_with(200)
60
+ session.request_with("bye")
61
+ end
62
+
63
+
64
+ def on_success_res_for_bye(session)
65
+ session.invalidate(true)
66
+ session.flow_completed_for("TestTargetRefreshWithUpdateProxy2")
67
+ end
68
+
69
+ def order
70
+ 0
71
+ end
72
+
73
+ end
74
+
75
+ class UacRt7Controller < SIP::SipTestDriverController
76
+
77
+ transaction_usage :use_transactions=>true
78
+
79
+ #pre_existing_route_set ["sip:#{SipperConfigurator[:LocalSipperIP]}:#{SipperConfigurator[:LocalTestPort][1]+1};lr"]
80
+
81
+ def specified_transport
82
+ [SipperConfigurator[:LocalSipperIP],
83
+ SipperConfigurator[:LocalTestPort][0]]
84
+ end
85
+
86
+ def start
87
+ u = create_udp_session()
88
+ r = u.create_initial_request("invite",
89
+ "sip:nasir@#{SipperConfigurator[:LocalSipperIP]}:#{SipperConfigurator[:LocalTestPort][1]}")
90
+ r.route = "sip:#{SipperConfigurator[:LocalSipperIP]}:#{SipperConfigurator[:LocalTestPort][1]+1};lr"
91
+ u.send(r)
92
+ logd("Sent a new INVITE from "+name)
93
+ end
94
+
95
+
96
+ def on_success_res_for_invite(session)
97
+ session.request_with('ACK')
98
+ r = session.create_subsequent_request('update')
99
+ orig_contact_uri = r.contact.uri
100
+ orig_contact_uri.user = "nkhan"
101
+ r.contact.uri = orig_contact_uri
102
+ session.send(r)
103
+ end
104
+
105
+ def on_bye(session)
106
+ if session.irequest[:via].length == 1
107
+ session.do_record("single_via")
108
+ end
109
+ session.respond_with(200)
110
+ session.invalidate(true)
111
+ end
112
+
113
+ end
114
+ end
115
+ EOF2
116
+ define_controller_from(str2)
117
+ set_controller("SipInline::UacRt7Controller")
118
+ end
119
+
120
+
121
+ def test_rt1_controllers
122
+ if RUBY_PLATFORM =~ /mswin/ && !ENV['SIPPER_TEST_PROXY_EXTERNAL']
123
+ return
124
+ end
125
+ self.expected_flow = ["> INVITE {1,}", "< 100", "< 200", "> ACK", "> UPDATE", "< 200", "< BYE", "! single_via", "> 200"]
126
+ start_controller
127
+ sleep 3
128
+ verify_call_flow(:out)
129
+ self.expected_flow = ["< INVITE", "> 100", "! double_via", "> 200", "< ACK", "< UPDATE", "> 200", "> BYE", "< 200"]
130
+ verify_call_flow(:in)
131
+ end
132
+
133
+ def teardown
134
+ SipperConfigurator[:SessionRecord] = @sr
135
+ SipperConfigurator[:LocalTestPort] = @tp
136
+ super
137
+ end
138
+
139
+ end
@@ -0,0 +1,71 @@
1
+ require 'base_test_case'
2
+ require 'util/timer/timer_task'
3
+ require 'util/timer/timer_manager'
4
+ require 'ruby_ext/time'
5
+ require 'monitor'
6
+ require 'flexmock'
7
+
8
+ class TestTimerManager < BaseTestCase
9
+ include FlexMock::TestCase
10
+
11
+ def setup
12
+ @q = []
13
+ @tm = SIP::TimerManager.new(@q)
14
+ end
15
+
16
+ def test_running
17
+ assert_raise(RuntimeError) { @tm.schedule("something") }
18
+ end
19
+
20
+ def test_one_task
21
+ @tm.start
22
+ task = FlexMock.new
23
+ task.should_receive(:abs_msec).and_return(Time.ctm+100)
24
+ task.should_receive(:canceled?).and_return(false)
25
+ @tm.schedule(task)
26
+ assert(@q.empty?)
27
+ sleep(0.2)
28
+ assert_equal(task, @q.shift)
29
+ end
30
+
31
+ def test_many_tasks
32
+ @tm.start
33
+ total = 50
34
+ total.downto(1) do
35
+ time = rand*1000 + 500 #offset to ensure that all are scheduled before anyone fires
36
+ task = SIP::TimerTask.new(nil, nil, nil, nil, time)
37
+ @tm.schedule(task)
38
+ end
39
+ sleep 3
40
+ assert_equal(total, @q.size)
41
+ @q.each_with_index do |val, idx|
42
+ assert(@q[idx] < @q[idx+1], "idx=#{idx} #{@q[idx].abs_msec} and #{@q[idx+1].abs_msec}") if idx+1 < total
43
+ end
44
+ end
45
+
46
+ def test_zero_time_task
47
+ @tm.start
48
+ task = FlexMock.new
49
+ task.should_receive(:abs_msec).and_return(Time.ctm)
50
+ task.should_receive(:canceled?).and_return(false)
51
+ @tm.schedule(task)
52
+ sleep(0.2)
53
+ assert_equal(task, @q.shift)
54
+ end
55
+
56
+ def test_canceled_task
57
+ @tm.start
58
+ task = FlexMock.new
59
+ task.should_receive(:abs_msec).and_return(Time.ctm+100)
60
+ task.should_receive(:canceled?).and_return(true)
61
+ @tm.schedule(task)
62
+ assert(@q.empty?)
63
+ sleep(0.2)
64
+ assert(@q.empty?)
65
+ end
66
+
67
+ def teardown
68
+ @tm.stop
69
+ end
70
+
71
+ end
@@ -0,0 +1,60 @@
1
+ require 'base_test_case'
2
+ require 'util/timer/timer_task'
3
+ require 'ruby_ext/time'
4
+ require 'flexmock'
5
+
6
+ class MyTarget
7
+ attr_accessor :count
8
+ def initialize
9
+ @count = 0
10
+ end
11
+ def on_timer_expiration(timer)
12
+ @count += 1
13
+ end
14
+ end
15
+
16
+ class TestTimerTask < BaseTestCase
17
+ include FlexMock::TestCase
18
+
19
+ def test_init
20
+ t = SIP::TimerTask.new(nil)
21
+ assert_equal(:session, t.type)
22
+ assert_not_nil(t.abs_msec)
23
+
24
+ t = SIP::TimerTask.new(nil, lambda {return 99})
25
+ assert_equal(99, t.task.call)
26
+
27
+ t = SIP::TimerTask.new(nil) { next 99 }
28
+ assert_equal(99, t.task.call)
29
+
30
+ # past time
31
+ assert_raise(ArgumentError) { SIP::TimerTask.new(nil, nil, nil, nil, -100) }
32
+ assert_nothing_raised { SIP::TimerTask.new(nil, nil, nil, nil, 0) }
33
+ end
34
+
35
+ def test_comparison
36
+ t1 = SIP::TimerTask.new(nil, nil, nil, nil, 100)
37
+ t2 = SIP::TimerTask.new(nil, nil, nil, nil, 200)
38
+ assert(t1 < t2)
39
+ end
40
+
41
+ def test_invocation
42
+ tg = FlexMock.new
43
+ tg.should_receive(:on_timer_expiration).with(SIP::TimerTask).and_return("fine")
44
+ t = SIP::TimerTask.new(tg)
45
+ assert_equal("fine", t.invoke)
46
+ end
47
+
48
+ def test_cancellation
49
+ tg = MyTarget.new
50
+ t = SIP::TimerTask.new(tg)
51
+ t.invoke
52
+ assert_equal(1, tg.count)
53
+ t = SIP::TimerTask.new(tg)
54
+ t.cancel
55
+ assert(t.canceled?)
56
+ t.invoke
57
+ assert_equal(1, tg.count)
58
+ end
59
+
60
+ end
@@ -0,0 +1,19 @@
1
+ $:.unshift File.join(ENV['SIPPER_HOME'],'sipper_test')
2
+ require 'driven_sip_test_case'
3
+
4
+ class TestThTest < DrivenSipTestCase
5
+
6
+ def setup
7
+ SipperConfigurator[:ControllerPath] = File.join(SipperConfigurator[:SipperBasePath], "sipper_test", "test_controllers", "ctrl_trhandler")
8
+ SipperConfigurator[:SessionRecord]='msg-info'
9
+ super
10
+ end
11
+
12
+ def test_case_1
13
+ self.expected_flow = ["> INFO","< 200"]
14
+ start_named_controller("UacTrHandlerController")
15
+ verify_call_flow(:out)
16
+ self.expected_flow = ["< MESSAGE","> 200"]
17
+ verify_call_flow(:in)
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+
2
+ $:.unshift File.join(ENV['SIPPER_HOME'],'sipper_test')
3
+ require 'driven_sip_test_case'
4
+
5
+ class TestTransportMultiHandler < DrivenSipTestCase
6
+
7
+ def setup
8
+ SipperConfigurator[:ControllerPath] = File.join(SipperConfigurator[:SipperBasePath], "sipper_test", "test_controllers", "multi_trhandlers")
9
+ SipperConfigurator[:SessionRecord]='msg-info'
10
+ super
11
+ end
12
+
13
+ def test_case_1
14
+ start_named_controller("UacMultiTrHandlerController")
15
+ self.expected_flow = ["< INFO", "! Transform_OK", "> 200"]
16
+ verify_call_flow(:in)
17
+ end
18
+ end
@@ -0,0 +1,119 @@
1
+ $:.unshift File.join(File.dirname(__FILE__),"..","sipper")
2
+
3
+ require 'transport/udp_transport'
4
+ require 'test/unit'
5
+ require 'tracing'
6
+ class TestUdpTransport < Test::Unit::TestCase
7
+
8
+ #include Tracing
9
+ def setup
10
+ @ip = SipperConfigurator[:LocalSipperIP]
11
+ @port = 5062
12
+ @t1 = Transport::UdpTransport.instance(@ip, @port)
13
+ end
14
+
15
+ def test_instance
16
+ assert_raise(NoMethodError){Transport::UdpTransport.new}
17
+ t2 = Transport::UdpTransport.instance(@ip, @port)
18
+ _check_equal(t2)
19
+ @t1 = Transport::UdpTransport.instance(@ip, @port)
20
+ _check_equal(t2)
21
+ t3 = Transport::UdpTransport.instance(@ip, @port+1)
22
+ assert_not_equal(@t1, t3)
23
+ assert(!t2.equal?(t3))
24
+ end
25
+
26
+
27
+
28
+ def test_running
29
+ assert(!@t1.running)
30
+ @t1.start_transport
31
+ assert(@t1.running)
32
+ assert_raise(RuntimeError) {@t1.start_transport}
33
+ end
34
+
35
+ def test_stopping
36
+ test_running
37
+ @t1.stop_transport
38
+ assert(!@t1.running)
39
+ assert_raise(RuntimeError) {@t1.stop_transport}
40
+ end
41
+
42
+ def test_transport_thread
43
+ th = @t1.start_transport
44
+ assert(th.alive?)
45
+ @t1.stop_transport
46
+ assert(th.stop?)
47
+ end
48
+
49
+
50
+ def test_recv
51
+ th = @t1.start_transport
52
+ sleep(rand(1)) until @t1.running
53
+ s1 = UDPSocket.new
54
+ s1.connect(@ip, @port)
55
+ s1.send "hello_recv" , 0
56
+ data = @t1.get_next_message
57
+ assert_equal("hello_recv", data[0])
58
+ assert(th.alive?)
59
+ s1.send "poison dart" , 0
60
+ data = @t1.get_next_message
61
+ assert_equal("poison dart", data[0])
62
+ th.join
63
+ assert(th.stop?)
64
+ end
65
+
66
+
67
+ def _send s_msg, r_msg
68
+ th2 = Thread.new do
69
+ s = UDPSocket.new
70
+ s.bind(@ip, @port+1)
71
+ IO.select([s])
72
+ x = s.recvfrom_nonblock(100)[0]
73
+ assert_equal(x, r_msg)
74
+ s.close
75
+ end
76
+ @t1.send(s_msg, 0, @ip, @port+1)
77
+ th2.join
78
+ end
79
+
80
+ def test_send
81
+ test_running
82
+ _send "hello_nasir", "hello_nasir"
83
+ # todo: add these tests at session sending
84
+ #_send "nina@_PH_LIP_", "nina@#{@ip}"
85
+ #_send "nina@_PH_LIP_:_PH_LP_", "nina@#{@ip}:#{@port}"
86
+ #_send "neena@_PH_RIP_:_PH_RP_", "neena@#{@ip}:#{@port+1}"
87
+ end
88
+
89
+ def test_one_start
90
+ started = []
91
+ threads = []
92
+ 50.times do
93
+ threads << Thread.new do
94
+ sleep(rand(3))
95
+ begin
96
+ @t1.start_transport
97
+ started << 1
98
+ rescue RuntimeError
99
+ started << 0
100
+ end #exception
101
+ end #threads
102
+ end #50
103
+ threads.each {|t| t.join}
104
+ assert_equal(1, started.inject {|s,v| s = s+v} )
105
+ end
106
+
107
+ def teardown
108
+ @t1.stop_transport if @t1.running
109
+ end
110
+
111
+
112
+ def _check_equal(t2)
113
+ assert_equal(@t1, t2)
114
+ assert(@t1.equal?(t2))
115
+ end
116
+
117
+ private :_check_equal, :_send
118
+
119
+ end
@@ -0,0 +1,70 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+
5
+ class TestUnparsed < DrivenSipTestCase
6
+
7
+ def setup
8
+ super
9
+ str = <<-EOF
10
+
11
+ require 'sip_test_driver_controller'
12
+
13
+ module SipInline
14
+ class UasUpController < SIP::SipTestDriverController
15
+
16
+ transaction_usage :use_transactions=>true
17
+
18
+ def on_info(session)
19
+ session.do_record(session.irequest.mytest.to_s)
20
+ session.respond_with(200)
21
+ logd("Received INFO sent a 200 from "+name)
22
+ session.invalidate(true)
23
+ end
24
+
25
+
26
+
27
+
28
+ def order
29
+ 0
30
+ end
31
+
32
+ end
33
+
34
+ class UacUpController < SIP::SipTestDriverController
35
+
36
+ transaction_usage :use_transactions=>true
37
+
38
+ def start
39
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
40
+ r = u.create_initial_request("info", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
41
+ r.assign_unparsed(:mytest, " blah ")
42
+ m = u.send(r)
43
+ logd("Sent a new INVITE from "+name)
44
+ end
45
+
46
+
47
+ def on_success_res(session)
48
+ session.invalidate(true)
49
+ session.flow_completed_for("TestUnparsed")
50
+ end
51
+
52
+
53
+ end
54
+ end
55
+ EOF
56
+ define_controller_from(str)
57
+ set_controller("SipInline::UacUpController")
58
+ end
59
+
60
+
61
+ def test_up_controllers
62
+ self.expected_flow = ["> INFO", "< 200"]
63
+ start_controller
64
+ verify_call_flow(:out)
65
+ self.expected_flow = ["< INFO", "! blah ", "> 200"]
66
+ verify_call_flow(:in)
67
+ end
68
+
69
+
70
+ end