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,130 @@
1
+
2
+ require 'driven_sip_test_case'
3
+ require 'sdp/sdp_generator'
4
+
5
+ class TestB2bua4 < DrivenSipTestCase
6
+
7
+ def setup
8
+ super
9
+ str = <<-EOF
10
+
11
+ require 'sip_test_driver_controller'
12
+ require 'b2bua_controller'
13
+
14
+ module SipInline
15
+ class UasB2bua4Controller < SIP::SipTestDriverController
16
+
17
+ transaction_usage :use_transactions=>true
18
+
19
+ def on_invite(session)
20
+ session.name = "uas"
21
+ r = session.create_response(200)
22
+ r.sdp = SDP::SdpGenerator.make_no_media_sdp
23
+ session.send(r)
24
+ logd("Received INVITE sent a 200 from "+name)
25
+ end
26
+
27
+ def on_ack(session)
28
+ end
29
+
30
+ def on_bye(session)
31
+ session.respond_with(200)
32
+ session.invalidate(true)
33
+ end
34
+
35
+
36
+ def order
37
+ 1
38
+ end
39
+
40
+ def interested?(req)
41
+ req.p_controller == "uas"
42
+ end
43
+
44
+ end
45
+
46
+
47
+ class TestB2bua4Controller < SIP::B2buaController
48
+
49
+ transaction_usage :use_transactions=>true
50
+
51
+ def on_invite(session)
52
+ session.name = "b2buas"
53
+ peer = get_or_create_peer_session(session, SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
54
+ peer.name = "b2buac"
55
+ r = create_b2bua_request(session)
56
+ r.p_controller = "uas"
57
+ r.p_session_record = nil
58
+ peer.send r
59
+ end
60
+
61
+
62
+ def on_success_res(session)
63
+ relay_response(session)
64
+ if session.iresponse.get_request_method == "BYE"
65
+ invalidate_sessions(session, true)
66
+ end
67
+ end
68
+
69
+ def on_ack(session)
70
+ relay_request(session)
71
+ end
72
+
73
+ def on_bye(session)
74
+ relay_request(session)
75
+ end
76
+
77
+ def interested?(req)
78
+ req.p_controller == "b2bua"
79
+ end
80
+
81
+ def order
82
+ 0
83
+ end
84
+
85
+ end
86
+
87
+
88
+ class UacB2bua4Controller < SIP::SipTestDriverController
89
+
90
+ transaction_usage :use_transactions=>true
91
+
92
+ def start
93
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
94
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
95
+ u.name = "uac"
96
+ r.p_controller = "b2bua"
97
+ u.send(r)
98
+ logd("Sent a new INVITE from "+name)
99
+ end
100
+
101
+
102
+ def on_success_res_for_invite(session)
103
+ session.request_with('ACK')
104
+ session.request_with('BYE')
105
+ end
106
+
107
+ def on_success_res_for_bye(session)
108
+ session.invalidate(true)
109
+ session.flow_completed_for("TestB2bua4")
110
+ end
111
+
112
+
113
+ end
114
+ end
115
+ EOF
116
+ define_controller_from(str)
117
+ set_controller("SipInline::UacB2bua4Controller")
118
+ end
119
+
120
+
121
+ def test_b2bua4
122
+ self.expected_flow = ["> INVITE", "< 100", "< 200", "> ACK", "> BYE", "< 200"]
123
+ start_controller
124
+ verify_call_flow(:out)
125
+ self.expected_flow = ["< INVITE", "> 100", "> 200", "< ACK", "< BYE", "> 200"]
126
+ verify_call_flow(:in)
127
+ end
128
+
129
+
130
+ end
@@ -0,0 +1,110 @@
1
+ require 'sip_test_case'
2
+ require 'base_controller'
3
+ require 'test_controllers/test_controller'
4
+ require 'flexmock'
5
+
6
+ class TestBaseController < SipTestCase
7
+ include FlexMock::TestCase
8
+ def setup
9
+ @bc = SIP::BaseController.new
10
+ @tc = TestController.new
11
+ super
12
+ end
13
+
14
+
15
+ def test_sol
16
+ assert( !SIP::BaseController.start_on_load? )
17
+ assert( TestController.start_on_load? )
18
+ end
19
+
20
+ def test_name
21
+ assert_equal("SIP::BaseController", @bc.name)
22
+ assert_equal("TestController", @tc.name)
23
+ end
24
+
25
+ def test_log
26
+ assert_nothing_raised {
27
+ @bc.logd("Print logs")
28
+ @bc.logi("Print logs")
29
+ @bc.logw("Print logs")
30
+ @bc.loge("Print logs")
31
+ @bc.logf("Print logs")
32
+ }
33
+ assert_nothing_raised {
34
+ @tc.logd("Print logs")
35
+ @tc.logi("Print logs")
36
+ @tc.logw("Print logs")
37
+ @tc.loge("Print logs")
38
+ @tc.logf("Print logs")
39
+ }
40
+ end
41
+
42
+ def test_start
43
+ assert !@bc.start
44
+ ret = @tc.start
45
+ assert(ret.nil? || ret)
46
+ end
47
+
48
+ def test_response
49
+ r = FlexMock.new
50
+ r.should_receive(:code).and_return(100)
51
+ s = FlexMock.new
52
+ s.should_receive(:iresponse).and_return(r)
53
+ r.should_receive(:get_request_method).and_return("invite")
54
+ @bc.extend(SipperUtil::WrapExtender)
55
+ assert_equal("SIP::BaseController", SipperUtil::WrapExtender.last_class( @bc.on_response(s) ))
56
+ @tc.extend(SipperUtil::WrapExtender)
57
+ assert_equal("SIP::BaseController", SipperUtil::WrapExtender.last_class( @tc.on_response(s) ))
58
+ # reset mocks to return 200
59
+ r = FlexMock.new
60
+ r.should_receive(:code).and_return(200)
61
+ s = FlexMock.new
62
+ s.should_receive(:iresponse).and_return(r)
63
+ assert_equal("TestController", SipperUtil::WrapExtender.last_class( @tc.on_response(s) ))
64
+ end
65
+
66
+ def test_request
67
+ r = FlexMock.new
68
+ r.should_receive(:method).and_return("INFO")
69
+ s = FlexMock.new
70
+ s.should_receive(:irequest).and_return(r)
71
+ s.should_receive(:call_id).and_return("my_call_id")
72
+ assert(!@tc.on_request(s))
73
+ r = FlexMock.new
74
+ r.should_receive(:method).and_return("INVITE")
75
+ s = FlexMock.new
76
+ s.should_receive(:irequest).and_return(r)
77
+ s.should_receive(:call_id).and_return("my_call_id")
78
+ ret = @tc.on_request(s)
79
+ assert(ret.nil? || ret)
80
+ end
81
+
82
+ def test_interested
83
+ r = FlexMock.new
84
+ r.should_receive(:method).and_return("INFO")
85
+ assert(! @bc.interested?(r) )
86
+ assert(! @tc.interested?(r) )
87
+ r = FlexMock.new
88
+ r.should_receive(:method).and_return("INVITE")
89
+ assert(! @bc.interested?(r) )
90
+ assert( @tc.interested?(r) )
91
+ end
92
+
93
+ def test_transaction_settings
94
+ s = @tc.get_test_session
95
+ assert(!s.use_ict)
96
+ assert(s.use_nict)
97
+ assert(!s.use_ist)
98
+ assert(s.use_nist)
99
+ s.set_transaction_timers(:Ict, :tb=>32000, :t2=>300)
100
+ end
101
+
102
+ def teardown
103
+ super
104
+ load 'base_controller.rb'
105
+ load File.join('test_controllers', 'test_controller.rb')
106
+ end
107
+
108
+ end
109
+
110
+
@@ -0,0 +1,37 @@
1
+ require 'base_test_case'
2
+ require 'transport/base_transport'
3
+
4
+ class TestBaseTransport < BaseTestCase
5
+
6
+ def setup
7
+ super
8
+ require 'transport_filters'
9
+ end
10
+
11
+ def test_filters
12
+ in_filters = Transport::BaseTransport.in_filters
13
+ assert_equal(2, in_filters.length)
14
+ out_filters = Transport::BaseTransport.out_filters
15
+ assert_equal(2, out_filters.length)
16
+ Transport::BaseTransport.in_order = ["InTransportHandler1", "InTransportHandler2"]
17
+ in_filters = Transport::BaseTransport.in_filters
18
+ msg = "_a__b_"
19
+ msg = in_filters[0].do_filter(msg)
20
+ assert_equal("1_b_", msg)
21
+ msg = in_filters[1].do_filter(msg)
22
+ assert_equal("12", msg)
23
+
24
+ Transport::BaseTransport.out_order = ["OutTransportHandler1", "OutTransportHandler2"]
25
+ out_filters = Transport::BaseTransport.out_filters
26
+ msg = "_a__b_"
27
+ msg = out_filters[0].do_filter(msg)
28
+ assert_equal("1_b_", msg)
29
+ msg = out_filters[1].do_filter(msg)
30
+ assert_equal("12", msg)
31
+ end
32
+
33
+ def cleanup
34
+ Transport::BaseTransport.clear_all_filters
35
+ end
36
+
37
+ end
@@ -0,0 +1,21 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ class TestCancel < DrivenSipTestCase
5
+
6
+ def setup
7
+ SipperConfigurator[:ControllerPath] = File.join(SipperConfigurator[:SipperBasePath], "sipper_test", "test_controllers", "cancel")
8
+ super
9
+ end
10
+
11
+ def test_cancel
12
+ #set_controller("CancelCase::UacCancelController")
13
+ self.expected_flow = ["> INVITE {1,}", "! Exception_while_sending_CANCEL", "> INVITE {0,}", "< 100", "> CANCEL", "< 200"]
14
+ start_named_controller("CancelCase::UacCancelController")
15
+ verify_call_flow(:out)
16
+ self.expected_flow = ["< INVITE {1,}", "> 100", "< CANCEL", "> 200"]
17
+ verify_call_flow(:in)
18
+ end
19
+
20
+ end
21
+
@@ -0,0 +1,81 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ # The Client sends a CANCEL to INVITE after a 2xx response. lax setting required for this.
5
+ # The UAS does not use transactions so no 481 response will be sent.
6
+
7
+ class TestCancelAfter2xx < DrivenSipTestCase
8
+
9
+ def setup
10
+ super
11
+ str = <<-EOF
12
+
13
+ require 'sip_test_driver_controller'
14
+
15
+ module SipInline
16
+ class UasCancel3Controller < SIP::SipTestDriverController
17
+
18
+ transaction_usage :use_transactions=>false
19
+
20
+ def on_invite(session)
21
+ session.respond_with(200)
22
+ logd("Received INVITE in #{name} sent a 200")
23
+ end
24
+
25
+ def on_cancel(session)
26
+ session.respond_with(200)
27
+ session.invalidate(true)
28
+ end
29
+
30
+ def order
31
+ 0
32
+ end
33
+
34
+ end
35
+
36
+ class UacCancel3Controller < SIP::SipTestDriverController
37
+
38
+ transaction_usage :use_transactions=>true
39
+ transaction_timers :ty=>150
40
+ session_timer 300
41
+
42
+ def start
43
+ SipperConfigurator[:ProtocolCompliance] = 'lax'
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.do_record("FAILURE 408 is not expected here")
54
+ end
55
+
56
+ def on_success_res(session)
57
+ logd("Received success response in #{name}")
58
+ if session.iresponse.get_request_method == "CANCEL"
59
+ session.invalidate(true)
60
+ session.flow_completed_for("TestCancelAfter2xx")
61
+ end
62
+ end
63
+
64
+ end
65
+ end
66
+ EOF
67
+ define_controller_from(str)
68
+ set_controller("SipInline::UacCancel3Controller")
69
+ end
70
+
71
+
72
+ def test_cancel3_controllers
73
+ self.expected_flow = ["> INVITE", "< 200", "> CANCEL", "< 200"]
74
+ start_controller
75
+ verify_call_flow(:out)
76
+ self.expected_flow = ["< INVITE", "> 200", "< CANCEL", "> 200"]
77
+ verify_call_flow(:in)
78
+ end
79
+
80
+ end
81
+
@@ -0,0 +1,105 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ # The Client sends a CANCEL to INVITE, the server is using both IST and NIST and though sends
5
+ # a 487/INVITE, does not sent a 200/CANCEL forcing retransmissions for CANCEL alone.
6
+
7
+ class TestCancelRetransmission < DrivenSipTestCase
8
+
9
+ def setup
10
+ super
11
+ str = <<-EOF
12
+
13
+ #----- Txn Handler--------
14
+ require 'transaction/state_machine_wrapper'
15
+
16
+
17
+ class NistTxnHandler
18
+
19
+ def before_cancel_with_st(txn)
20
+ txn.__consume_msg(true)
21
+ SIP::Transaction::SM_PROCEED_NO_ACTION
22
+ end
23
+
24
+ end
25
+ #------------------------
26
+
27
+
28
+ #------ Controllers -----
29
+
30
+ require 'sip_test_driver_controller'
31
+
32
+ module SipInline
33
+ class UasCancel6Controller < SIP::SipTestDriverController
34
+
35
+ transaction_usage :use_transactions=>true
36
+ transaction_handlers :Nist=>NistTxnHandler
37
+
38
+ def on_cancel(session)
39
+ tid = nil
40
+ if tid = session['cancel_txn_id']
41
+ if tid == session.irequest.transaction.object_id
42
+ logd("Received CANCEL in #{name} sending 200 with txn")
43
+ session.respond_with(200)
44
+ else
45
+ session.do_record("Error")
46
+ logd("Received CANCEL in #{name} txn is not correct")
47
+ end
48
+ session.invalidate(true)
49
+ else
50
+ session['cancel_txn_id'] = session.irequest.transaction.object_id
51
+ logd("Received CANCEL in #{name} saving txn_id")
52
+ end
53
+ end
54
+
55
+
56
+ def on_invite(session)
57
+ end
58
+
59
+
60
+
61
+ def order
62
+ 0
63
+ end
64
+
65
+ end
66
+
67
+
68
+ class UacCancel6Controller < SIP::SipTestDriverController
69
+
70
+ transaction_usage :use_transactions=>true
71
+
72
+ def start
73
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
74
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
75
+ u.send(r)
76
+ logd("Sent a new INVITE from #{name}")
77
+ u.create_and_send_cancel_when_ready
78
+ end
79
+
80
+
81
+ def on_success_res(session)
82
+ logd("Received success response in #{name}")
83
+ session.invalidate
84
+ session.flow_completed_for("TestCancelRetransmission")
85
+ end
86
+
87
+ end
88
+ end
89
+ EOF
90
+ define_controller_from(str)
91
+ set_controller("SipInline::UacCancel6Controller")
92
+ end
93
+
94
+
95
+ def test_cancel6_controllers
96
+ self.expected_flow = ["> INVITE", "< 100", "> CANCEL", "< 487", "> ACK", "> CANCEL", "< 200"]
97
+ start_controller
98
+ verify_call_flow(:out)
99
+ self.expected_flow = ["< INVITE", "> 100", "< CANCEL", "> 487", "< CANCEL {0,}", "> 200 {0,}","< ACK", "< CANCEL {0,}", "> 200"]
100
+ verify_call_flow(:in)
101
+ end
102
+
103
+ end
104
+
105
+