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,69 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ class TestValidations < DrivenSipTestCase
5
+
6
+ def setup
7
+ super
8
+ str = <<-EOF
9
+ require 'sip_test_driver_controller'
10
+ module SipInline
11
+ class UasValidationsController < SIP::SipTestDriverController
12
+
13
+ transaction_usage :use_transactions=>true
14
+
15
+ def on_invite(session)
16
+ logd("Received INVITE in "+name)
17
+ r = session.create_response(200, "OK")
18
+ r.test_header = "hello"
19
+ r.test_header.mytag = "123"
20
+ session.send(r)
21
+ end
22
+
23
+ def on_ack(session)
24
+ session.invalidate(true)
25
+ session.flow_completed_for("TestValidations")
26
+ end
27
+
28
+ def order
29
+ 0
30
+ end
31
+ end
32
+
33
+ class UacValidationsController < SIP::SipTestDriverController
34
+
35
+ transaction_usage :use_transactions=>true
36
+
37
+ def start
38
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
39
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
40
+ u.send(r)
41
+ logd("Sent a new INVITE from "+name)
42
+ end
43
+
44
+ def on_success_res(session)
45
+ logd("Received response in #{name}")
46
+ session.validate_presence_of_headers :test_header
47
+ session.validate_presence_of_header_params :test_header, :mytag
48
+ session.validate_header_values :test_header=>'hello;mytag=123'
49
+ session.request_with('ack')
50
+ session.invalidate(true)
51
+ end
52
+
53
+ end
54
+ end
55
+ EOF
56
+ define_controller_from(str)
57
+ set_controller("SipInline::UacValidationsController")
58
+ end
59
+
60
+
61
+ def test_header_params
62
+ self.expected_flow = ["> INVITE", "< 100", "< 200", "! true {3,3}", "> ACK"]
63
+ start_controller
64
+ verify_call_flow(:out)
65
+ self.expected_flow = ["< INVITE", "> 100", "> 200", "< ACK"]
66
+ verify_call_flow(:in)
67
+ end
68
+
69
+ end
@@ -0,0 +1,111 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+
5
+ class TestWithRRProxy < DrivenSipTestCase
6
+
7
+ # To run this test in windows, in a separate shell execute the proxy
8
+ # "srun -p 5068 -0 5067 -c nonrr_proxy.rb"
9
+ # and set an env var
10
+ # "set SIPPER_TEST_PROXY_EXTERNAL=true"
11
+ # You would do similar thing for rr_proxy with a higher port in a second shell
12
+ # "srun -p 5069 -0 5067 -c rr_proxy.rb"
13
+ # Let these two proxies run.
14
+ # Then run the test cases, after you are done make sure to unset the env var by
15
+ # "set SIPPER_TEST_PROXY_EXTERNAL="
16
+ # For one run you need only to execute the two proxies only once for all tests.
17
+ def setup
18
+ @sr = SipperConfigurator[:SessionRecord]
19
+ SipperConfigurator[:SessionRecord] = "msg-info"
20
+ @tp = SipperConfigurator[:LocalTestPort]
21
+ SipperConfigurator[:LocalTestPort] = 5067
22
+ SipperConfigurator[:SessionRecord] = "msg-info"
23
+ super
24
+ unless RUBY_PLATFORM =~ /mswin/
25
+ system("srun -p #{SipperConfigurator[:LocalTestPort]+2} -o #{SipperConfigurator[:LocalTestPort]} -rf 3 -c #{File.join(SipperConfigurator[:SipperBasePath],"sipper_test", "rr_proxy.rb")} &")
26
+ end
27
+
28
+ str2 = <<-EOF2
29
+
30
+ require 'sip_test_driver_controller'
31
+
32
+ module SipInline
33
+ class UasRt2Controller < SIP::SipTestDriverController
34
+
35
+ transaction_usage :use_transactions=>true
36
+
37
+ def on_invite(session)
38
+ if session.irequest[:via].length == 2
39
+ session.do_record("double_via")
40
+ end
41
+ session.respond_with(200)
42
+ logd("Received INVITE sent a 200 from "+name)
43
+ end
44
+
45
+ def on_ack(session)
46
+ session.request_with("bye")
47
+ end
48
+
49
+ def on_success_res(session)
50
+ session.invalidate(true)
51
+ session.flow_completed_for("TestWithRRProxy")
52
+ end
53
+
54
+ def order
55
+ 0
56
+ end
57
+
58
+ end
59
+
60
+ class UacRt2Controller < SIP::SipTestDriverController
61
+
62
+ transaction_usage :use_transactions=>true
63
+
64
+ def start
65
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort]+2)
66
+ r = u.create_initial_request("invite", "sip:nasir@sipper.com")
67
+ u.send(r)
68
+ logd("Sent a new INVITE from "+name)
69
+ end
70
+
71
+
72
+ def on_success_res(session)
73
+ session.request_with('ACK')
74
+ end
75
+
76
+ def on_bye(session)
77
+ if session.irequest[:via].length == 2
78
+ session.do_record("double_via")
79
+ end
80
+ session.respond_with(200)
81
+ session.invalidate(true)
82
+ end
83
+
84
+ end
85
+ end
86
+ EOF2
87
+ define_controller_from(str2)
88
+ set_controller("SipInline::UacRt2Controller")
89
+ end
90
+
91
+
92
+ def test_rt1_controllers
93
+ if RUBY_PLATFORM =~ /mswin/ && !ENV['SIPPER_TEST_PROXY_EXTERNAL']
94
+ return
95
+ end
96
+ self.expected_flow = ["> INVITE {1,}", "< 100", "< 200", "> ACK", "< BYE", "! double_via", "> 200"]
97
+ start_controller
98
+ sleep 3
99
+ verify_call_flow(:out)
100
+ self.expected_flow = ["< INVITE", "> 100", "! double_via", "> 200", "< ACK", "> BYE", "< 200"]
101
+ verify_call_flow(:in)
102
+ end
103
+
104
+ def teardown
105
+ SipperConfigurator[:SessionRecord] = @sr
106
+ SipperConfigurator[:LocalTestPort] = @tp
107
+ super
108
+ end
109
+
110
+ end
111
+
@@ -0,0 +1,71 @@
1
+ require 'driven_sip_test_case'
2
+
3
+ class Testmediacontroller < DrivenSipTestCase
4
+
5
+ def setup
6
+ @sm = SipperConfigurator[:SipperMedia]
7
+ SipperConfigurator[:SipperMedia] = true
8
+ super
9
+ SipperConfigurator[:SessionRecord]='msg-info'
10
+ SipperConfigurator[:WaitSecondsForTestCompletion] = 40
11
+ str = <<-EOF
12
+ # FLOW : > INVITE, < 200, > ACK
13
+ #
14
+ require 'base_controller'
15
+
16
+ class TestmediacontrollerController < SIP::SipTestDriverController
17
+
18
+ # change the directive below to true to enable transaction usage.
19
+ # If you do that then make sure that your controller is also
20
+ # transaction aware. i.e does not try send ACK to non-2xx responses,
21
+ # does not send 100 Trying response etc.
22
+
23
+ transaction_usage :use_transactions=>false
24
+
25
+ def initialize
26
+ logd('Controller created')
27
+ end
28
+
29
+
30
+ def on_register(session)
31
+ session.respond_with(200)
32
+
33
+ registration_store.put(:bob, session.irequest.contact.uri.to_s)
34
+
35
+ session.invalidate(true)
36
+
37
+ s = create_session
38
+ s.set_media_attributes(:codec=>['G711U'], :type=>'SENDRECV',
39
+ :play=>{:file=>'hello_sipper.au', :repeat=>false},
40
+ :record_file=>'in_sipper.au',
41
+ :remote_m_line=>['any'])
42
+
43
+ r = s.create_initial_request('INVITE', registration_store.get(:bob))
44
+ r.to = "<sip:nkhan@sipper.com>"
45
+ s.send r
46
+ end
47
+
48
+ def on_subscribe(session)
49
+ session.respond_with(200)
50
+ end
51
+
52
+
53
+ def on_success_res(session)
54
+ session.request_with('ACK')
55
+ sleep 15
56
+ session.invalidate
57
+ session.flow_completed_for('Testmediacontroller')
58
+ end
59
+
60
+ end
61
+ EOF
62
+ define_controller_from(str)
63
+ set_controller('TestmediacontrollerController')
64
+ end
65
+
66
+ def test_case_1
67
+ self.expected_flow = ['> INVITE','< 200','> ACK']
68
+ start_controller
69
+ verify_call_flow(:out)
70
+ end
71
+ end
@@ -0,0 +1,23 @@
1
+ module Tracing
2
+ def Tracing.included(into)
3
+ into.instance_methods(false).each { |m|
4
+ Tracing.hook_method(into, m) }
5
+ def into.method_added(meth)
6
+ unless @adding
7
+ @adding = true
8
+ Tracing.hook_method(self, meth)
9
+ @adding = false
10
+ end
11
+ end
12
+ end
13
+ def Tracing.hook_method(klass, meth)
14
+ klass.class_eval do
15
+ alias_method "old_#{meth}", "#{meth}"
16
+ define_method(meth) do |*args|
17
+ puts "#{meth} start"
18
+ self.send("old_#{meth}",*args)
19
+ puts "#{meth} end"
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,176 @@
1
+ module SipMockTester
2
+
3
+ class MockTimeTransport
4
+ include SIP::Transport::UnreliableTransport
5
+ attr_accessor :msg
6
+ def initialize
7
+ @msg = []
8
+ end
9
+ def send(m, *remaining)
10
+ @msg << Time.ctm
11
+ end
12
+ end
13
+
14
+ class MockMsgTransport
15
+ include SIP::Transport::UnreliableTransport
16
+ attr_accessor :msg
17
+ def initialize
18
+ @msg = []
19
+ end
20
+ def send(m, *remaining)
21
+ @msg << m.to_s
22
+ end
23
+ end
24
+
25
+ class ExceptionalTransportOnNthAttempt
26
+ include SIP::Transport::UnreliableTransport
27
+ def initialize(n)
28
+ @count = 1
29
+ @fail_on = n
30
+ end
31
+ def send *a
32
+ raise if @count == @fail_on
33
+ @count += 1
34
+ end
35
+ end
36
+
37
+ class Tu
38
+ attr_accessor :txn
39
+
40
+ def transaction_transport_err(txn)
41
+ @txn = txn
42
+ end
43
+
44
+ def get_request_destination
45
+ [nil, nil, nil]
46
+ end
47
+
48
+ def get_response_destination(res)
49
+ [nil, nil, nil]
50
+ end
51
+
52
+ def transaction_cleanup(txn)
53
+ @txn = txn
54
+ end
55
+
56
+ def transaction_timeout(txn)
57
+ @txn = txn
58
+ end
59
+
60
+ def transaction_wrong_state(txn)
61
+ @txn = txn
62
+ end
63
+
64
+ def transaction_record(direction, msg)
65
+ end
66
+
67
+ def create_non_2xx_ack(invite, response)
68
+ h = {
69
+ :to => response.to.to_s,
70
+ :cseq => sprintf("%s %s", SipperUtil.cseq_number(invite.cseq),"ACK")
71
+ }
72
+ ack = Request.create_subsequent("ACK", invite.uri, h)
73
+ ack.copy_from(invite, :call_id, :from, :via, :route, :contact, :max_forwards)
74
+ ack
75
+ end
76
+
77
+ def create_response(code, phrase, request=nil)
78
+ res = Response.create code, phrase # not using request
79
+ end
80
+
81
+ def rollback_to_before_request_received_state(request)
82
+ # no op
83
+ end
84
+
85
+ def rejection_response_with(code, request)
86
+ r = create_response(code, "SELECT", request)
87
+ rollback_to_before_request_received_state(request)
88
+ return r
89
+ end
90
+
91
+ end
92
+
93
+ # Plain
94
+ class Tcbh1
95
+ attr_accessor :states
96
+ # for ICT
97
+ def before_invite(txn)
98
+ (@states ||= []) << txn.state
99
+ end
100
+ def after_invite(txn)
101
+ (@states ||= []) << txn.state
102
+ end
103
+ # for NICT
104
+ def before_request(txn)
105
+ (@states ||= []) << txn.state
106
+ end
107
+ def after_request(txn)
108
+ (@states ||= []) << txn.state
109
+ end
110
+ end
111
+
112
+ # Masker
113
+ class Tcbh2
114
+ def before_invite(txn)
115
+ SIP::Transaction::SM_PROCEED_NO_ACTION
116
+ end
117
+ # NICT
118
+ def before_request(txn)
119
+ SIP::Transaction::SM_PROCEED_NO_ACTION
120
+ end
121
+ end
122
+
123
+ class Tcbh3
124
+ attr_accessor :txn
125
+ def before_invite(txn)
126
+ @txn = txn
127
+ SIP::Transaction::SM_DO_NOT_PROCEED
128
+ end
129
+ # NICT
130
+ def before_request(txn)
131
+ @txn = txn
132
+ SIP::Transaction::SM_DO_NOT_PROCEED
133
+ end
134
+ end
135
+
136
+ class Tcbh4
137
+ attr_accessor :txn
138
+ def wrong_state(txn)
139
+ @txn = txn
140
+ end
141
+ end
142
+
143
+ class MockRequest
144
+ def initialize(m)
145
+ @method = m
146
+ end
147
+ def is_request?
148
+ true
149
+ end
150
+ def method
151
+ @method
152
+ end
153
+ end
154
+
155
+ class MockResponse
156
+ attr_accessor :code
157
+ def initialize(code)
158
+ self.code = code
159
+ end
160
+ def is_response?
161
+ true
162
+ end
163
+ def to_s
164
+ @code
165
+ end
166
+ def set_request(inRequest)
167
+ @request = inRequest
168
+ end
169
+ def get_reqeust()
170
+ raise "No associated request." unless @request
171
+ return @request
172
+ end
173
+ end
174
+
175
+ end
176
+