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,83 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ # Client sends a CANCEL after getting 1xx/INVITE but in the meantime server also sends a 2xx
5
+ # thereby clearing the transaction on the server. The CANCEL does not find a Stx and thus
6
+ # should be responded to by a 481.
7
+
8
+ class TestCancelWith481 < DrivenSipTestCase
9
+
10
+ def setup
11
+ super
12
+ str = <<-EOF
13
+
14
+ require 'sip_test_driver_controller'
15
+
16
+ module TestCancelWith481_SipInline
17
+ class UasCancel4Controller < SIP::SipTestDriverController
18
+
19
+ transaction_usage :use_transactions=>true
20
+ transaction_timers :tz=>0 # terminate immediately
21
+ session_timer #{@grty*6}
22
+
23
+ def on_invite(session)
24
+ session.respond_with(200)
25
+ session.invalidate
26
+ logd("Received INVITE in #{name} sent a 200")
27
+ end
28
+
29
+
30
+ def order
31
+ 0
32
+ end
33
+
34
+ end
35
+
36
+ class UacCancel4Controller < SIP::SipTestDriverController
37
+
38
+ transaction_usage :use_transactions=>true
39
+ session_timer #{@grty*6}
40
+
41
+ def start
42
+ SipperConfigurator[:ProtocolCompliance] = 'lax'
43
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
44
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
45
+ u.send(r)
46
+ logd("Sent a new INVITE from #{name}")
47
+ end
48
+
49
+
50
+ def on_failure_res(session)
51
+ logd("Received failure response in #{name}")
52
+ session.invalidate
53
+ session.flow_completed_for("TestCancelWith481")
54
+ end
55
+
56
+ def on_success_res(session)
57
+ logd("Received success response in #{name}")
58
+ if session.iresponse.get_request_method == "INVITE"
59
+ sleep #{@grty}/1000.0 # make sure IST terminates
60
+ session.send(session.create_cancel) unless session['cancel_sent']
61
+ session['cancel_sent'] = true
62
+ end
63
+ end
64
+
65
+ end
66
+ end
67
+ EOF
68
+ define_controller_from(str)
69
+ set_controller("TestCancelWith481_SipInline::UacCancel4Controller")
70
+ end
71
+
72
+
73
+ def test_cancel3_controllers
74
+ self.expected_flow = ["> INVITE", "< 100", "< 200", "> CANCEL", "< 481"]
75
+ start_controller
76
+ verify_call_flow(:out)
77
+ self.expected_flow = ["< INVITE", "> 100", "> 200", "< CANCEL", "> 481"]
78
+ verify_call_flow(:in)
79
+ end
80
+
81
+ end
82
+
83
+
@@ -0,0 +1,70 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ class TestCancelWith487 < DrivenSipTestCase
5
+
6
+ def setup
7
+ super
8
+ str = <<-EOF
9
+
10
+ require 'sip_test_driver_controller'
11
+
12
+ module SipInline
13
+ class UasCancel1Controller < SIP::SipTestDriverController
14
+
15
+ transaction_usage :use_transactions=>true
16
+
17
+ def on_invite(session)
18
+ logd("Received INVITE in #{name} not doing anything")
19
+ end
20
+
21
+ def on_cancel(session)
22
+ session.invalidate(true)
23
+ end
24
+
25
+ def order
26
+ 0
27
+ end
28
+
29
+ end
30
+
31
+ class UacCancel1Controller < SIP::SipTestDriverController
32
+ transaction_usage :use_transactions=>true
33
+ session_timer 100
34
+ def start
35
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
36
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
37
+ u.send(r)
38
+ logd("Sent a new INVITE from #{name}")
39
+ u.create_and_send_cancel_when_ready
40
+ end
41
+
42
+ def on_failure_res(session)
43
+ logd("Received failure response in #{name}")
44
+ session.invalidate
45
+ session.flow_completed_for("TestCancelWith487")
46
+ end
47
+
48
+ def on_success_res(session)
49
+ logd("Received success response in #{name}")
50
+ end
51
+
52
+ end
53
+ end
54
+ EOF
55
+ define_controller_from(str)
56
+ set_controller("SipInline::UacCancel1Controller")
57
+ end
58
+
59
+
60
+ def test_cancel1_controllers
61
+ self.expected_flow = ["> INVITE", "< 100", "> CANCEL", "< 200", "< 487", "> ACK"]
62
+ start_controller
63
+ verify_call_flow(:out)
64
+ self.expected_flow = ["< INVITE", "> 100", "< CANCEL", "> 200", "> 487", "< ACK {0,}"]
65
+ verify_call_flow(:in)
66
+ end
67
+
68
+ end
69
+
70
+
@@ -0,0 +1,99 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ # The Client sends a CANCEL to INVITE, the server is using IST but not using NIST.
5
+
6
+ class TestCancelWithIstWithoutNist < DrivenSipTestCase
7
+
8
+ def setup
9
+ super
10
+ str = <<-EOF
11
+
12
+ #----- Txn Handler--------
13
+ require 'transaction/state_machine_wrapper'
14
+
15
+ class IstTxnHandler
16
+
17
+ def after_ack(txn)
18
+ txn.__consume_msg(true)
19
+ SIP::Transaction::SM_PROCEED
20
+ end
21
+
22
+ end
23
+ #------------------------
24
+
25
+
26
+ #------ Controllers -----
27
+
28
+ require 'sip_test_driver_controller'
29
+
30
+ module SipInline
31
+ class UasCancel5Controller < SIP::SipTestDriverController
32
+
33
+ transaction_usage :use_transactions=>false, :use_ist=>true
34
+ transaction_handlers :Ist=>IstTxnHandler
35
+
36
+ def on_cancel(session)
37
+ session.respond_with(200)
38
+ end
39
+
40
+ def on_invite(session)
41
+ end
42
+
43
+ # Usually the controller will not see ACK for 4xx response
44
+ # we use the transcation handler to change the consume flag
45
+ # in this case.
46
+ def on_ack(session)
47
+ session.invalidate(true)
48
+ session.flow_completed_for("TestCancelWithIstWithoutNist")
49
+ end
50
+
51
+ def order
52
+ 0
53
+ end
54
+
55
+ end
56
+
57
+
58
+ class UacCancel5Controller < SIP::SipTestDriverController
59
+
60
+ transaction_usage :use_transactions=>true
61
+
62
+ def start
63
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
64
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
65
+ u.send(r)
66
+ logd("Sent a new INVITE from #{name}")
67
+ u.create_and_send_cancel_when_ready
68
+ end
69
+
70
+ def on_failure_res(session)
71
+ logd("Received failure response in #{name}")
72
+ if session.iresponse.get_request_method == "INVITE"
73
+ session.invalidate(true)
74
+ end
75
+ end
76
+
77
+ def on_success_res(session)
78
+ logd("Received success response in #{name}")
79
+ end
80
+
81
+ end
82
+ end
83
+ EOF
84
+ define_controller_from(str)
85
+ set_controller("SipInline::UacCancel5Controller")
86
+ end
87
+
88
+
89
+ def test_cancel5_controllers
90
+ self.expected_flow = ["> INVITE", "< 100", "> CANCEL", "< 200", "< 487", "> ACK"]
91
+ start_controller
92
+ verify_call_flow(:out)
93
+ self.expected_flow = ["< INVITE", "> 100", "< CANCEL", "> 200", "> 487", "< ACK"]
94
+ verify_call_flow(:in)
95
+ end
96
+
97
+ end
98
+
99
+
@@ -0,0 +1,84 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ # The client sends an INFO and after 183 gets a CANCEL and it gets responded to with a 200.
5
+ # Later the INFO also gets a 200. So CANCEL has not impact on INFO transaction.
6
+
7
+ class TestCancelWithNist < DrivenSipTestCase
8
+
9
+ def setup
10
+ super
11
+ str = <<-EOF
12
+
13
+ require 'sip_test_driver_controller'
14
+
15
+ module TestCancelWithNist_SipInline
16
+ class UasCancel4Controller < SIP::SipTestDriverController
17
+
18
+ transaction_usage :use_transactions=>true
19
+
20
+ def on_info(session)
21
+ session.respond_with(183)
22
+ logd("Received INFO in #{name} sent a 183")
23
+ session['info_request'] = session.irequest
24
+ end
25
+
26
+ def on_cancel(session)
27
+ r = session.create_response(200, "OK", session['info_request'])
28
+ session.send(r)
29
+ session.invalidate(true)
30
+ end
31
+
32
+ def order
33
+ 0
34
+ end
35
+
36
+ end
37
+
38
+ class UacCancel4Controller < SIP::SipTestDriverController
39
+
40
+ transaction_usage :use_transactions=>true
41
+
42
+ session_timer 300
43
+
44
+ def start
45
+ r = Request.create_initial("info", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
46
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
47
+ u.send(r)
48
+ logd("Sent a new INFO from #{name}")
49
+ u.create_and_send_cancel_when_ready
50
+ end
51
+
52
+
53
+
54
+ def on_success_res(session)
55
+ logd("Received success response in #{name}")
56
+ if session.iresponse.get_request_method == "CANCEL"
57
+ session.do_record("200_CANCEL")
58
+ else
59
+ session.do_record("200_INFO")
60
+ session.invalidate(true)
61
+ session.flow_completed_for("TestCancelWithNist")
62
+ end
63
+ end
64
+
65
+ end
66
+ end
67
+ EOF
68
+ define_controller_from(str)
69
+ set_controller("TestCancelWithNist_SipInline::UacCancel4Controller")
70
+ end
71
+
72
+
73
+ def test_cancel4_controllers
74
+ self.expected_flow = ["> INFO", "< 183", "> CANCEL", "< 200", "! 200_CANCEL", "< 200", "! 200_INFO"]
75
+ start_controller
76
+ verify_call_flow(:out)
77
+ self.expected_flow = ["< INFO", "> 183", "< CANCEL", "> 200 {2,2}"]
78
+ verify_call_flow(:in)
79
+ end
80
+
81
+
82
+ end
83
+
84
+
@@ -0,0 +1,77 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ # The Client sends a CANCEL to INVITE but never gets the 487/INVITE, but it should still timeout
5
+ # according to timer Y.
6
+ # Note that there is no ACK here because the408 response is locally generated on transaction timeout
7
+ # and ICT transaction is terminated.
8
+
9
+ class TestCancelWithout487 < DrivenSipTestCase
10
+
11
+ def setup
12
+ super
13
+ str = <<-EOF
14
+
15
+ require 'sip_test_driver_controller'
16
+
17
+ module SipInline
18
+ class UasCancel2Controller < SIP::SipTestDriverController
19
+
20
+ transaction_usage :use_transactions=>false
21
+
22
+ def on_invite(session)
23
+ session.respond_with(100)
24
+ logd("Received INVITE in #{name} not doing anything")
25
+ end
26
+
27
+ def on_cancel(session)
28
+ session.respond_with(200)
29
+ session.invalidate(true)
30
+ end
31
+
32
+ def order
33
+ 0
34
+ end
35
+
36
+ end
37
+
38
+ class UacCancel2Controller < SIP::SipTestDriverController
39
+
40
+ transaction_usage :use_transactions=>true
41
+ transaction_timers :ty=>#{@grty*4}
42
+
43
+ def start
44
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
45
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
46
+ u.send(r)
47
+ logd("Sent a new INVITE from #{name}")
48
+ u.create_and_send_cancel_when_ready
49
+ end
50
+
51
+ def on_failure_res(session)
52
+ logd("Received failure response in #{name}")
53
+ session.invalidate(true)
54
+ session.flow_completed_for("TestCancelWithout487")
55
+ end
56
+
57
+ def on_success_res(session)
58
+ logd("Received success response in #{name}")
59
+ end
60
+
61
+ end
62
+ end
63
+ EOF
64
+ define_controller_from(str)
65
+ set_controller("SipInline::UacCancel2Controller")
66
+ end
67
+
68
+
69
+ def test_cancel1_controllers
70
+ self.expected_flow = ["> INVITE", "< 100", "> CANCEL", "< 200", "< 408"]
71
+ start_controller
72
+ verify_call_flow(:out)
73
+ self.expected_flow = ["< INVITE", "> 100", "< CANCEL", "> 200"]
74
+ verify_call_flow(:in)
75
+ end
76
+
77
+ end
@@ -0,0 +1,38 @@
1
+
2
+ require 'base_test_case'
3
+ require 'util/command_element'
4
+ require 'benchmark'
5
+
6
+ class TestCommandElement < BaseTestCase
7
+
8
+ def setup
9
+ super
10
+ end
11
+
12
+ def test_sleep
13
+ c = SipperUtil::CommandElement.new("@sleep_ms 33")
14
+ assert_equal("@", c.direction)
15
+ assert_equal("sleep 0.033", c.command_str) # this is actual Ruby command
16
+ end
17
+
18
+ def test_bad1
19
+ assert_raise(ArgumentError) { SipperUtil::CommandElement.new("<sleep_ms 33") }
20
+ end
21
+
22
+ def test_bad2
23
+ assert_raise(ArgumentError) { SipperUtil::CommandElement.new("@") }
24
+ end
25
+
26
+ def test_bad3
27
+ assert_raise(ArgumentError) { SipperUtil::CommandElement.new("@sleep_ms -33") }
28
+ end
29
+
30
+ def test_actual_sleep_execution
31
+ c = SipperUtil::CommandElement.new("@sleep_ms 500")
32
+ elapsed_time = Benchmark.realtime do
33
+ eval c.command_str
34
+ end
35
+ assert_in_delta(0.5, elapsed_time, 0.1)
36
+ end
37
+
38
+ end