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,202 @@
1
+
2
+ require 'sip_test_case'
3
+ require 'transaction/non_invite_server_transaction'
4
+ require 'request'
5
+ require 'response'
6
+ require 'sipper_configurator'
7
+ require 'util/locator'
8
+ require 'transport/rel_unrel'
9
+ require 'transaction_test_helper'
10
+
11
+
12
+ class TestNonInviteServerTransaction < SipTestCase
13
+
14
+ def setup
15
+ super
16
+ @t = SipMockTester::MockTimeTransport.new
17
+ @tu = SipMockTester::Tu.new
18
+ end
19
+
20
+ def test_initial_state
21
+ nist = SIP::Transaction::NonInviteServerTransaction.new(@tu, nil, nil, @t, nil)
22
+ assert_equal("NistMap.Initial", nist.state)
23
+ end
24
+
25
+ # info in initial state
26
+ def test_info_initial
27
+ tu = SipMockTester::Tu.new
28
+ nist = SIP::Transaction::NonInviteServerTransaction.new(tu, nil, nil, @t, nil)
29
+ nist.txn_received SipMockTester::MockRequest.new("INFO")
30
+ assert_equal("NistMap.Trying", nist.state)
31
+ assert(nist.consume?)
32
+ end
33
+
34
+ def test_info_in_trying
35
+ tu = SipMockTester::Tu.new
36
+ nist = SIP::Transaction::NonInviteServerTransaction.new(tu, nil, nil, @t, nil)
37
+ r = SipMockTester::MockRequest.new("INFO")
38
+ nist.txn_received r
39
+ assert_equal("NistMap.Trying", nist.state)
40
+ assert(nist.consume?)
41
+ nist.txn_received r
42
+ assert_equal("NistMap.Trying", nist.state)
43
+ assert(!nist.consume?)
44
+ end
45
+
46
+ # sending provisional in trying
47
+ def test_trying_provisional
48
+ tu = SipMockTester::Tu.new
49
+ nist = SIP::Transaction::NonInviteServerTransaction.new(tu, nil, nil, @t, nil)
50
+ nist.txn_received SipMockTester::MockRequest.new("INFO") # now in trying
51
+ r = SipMockTester::MockResponse.new(180) # now in proceeding
52
+ nist.txn_send r
53
+ assert_equal("NistMap.Proceeding", nist.state)
54
+ assert_equal(1, @t.msg.length)
55
+ end
56
+
57
+ def test_trying_final
58
+ tu = SipMockTester::Tu.new
59
+ nist = SIP::Transaction::NonInviteServerTransaction.new(tu, nil, nil, @t, nil)
60
+ nist.txn_received SipMockTester::MockRequest.new("INFO") # now in trying
61
+ r = SipMockTester::MockResponse.new(200) # now in completed
62
+ nist.txn_send r
63
+ assert_equal("NistMap.Completed", nist.state)
64
+ assert_equal(1, @t.msg.length)
65
+ end
66
+
67
+ def test_proceeding_provisional
68
+ tu = SipMockTester::Tu.new
69
+ nist = SIP::Transaction::NonInviteServerTransaction.new(tu, nil, nil, @t, nil)
70
+ nist.txn_received SipMockTester::MockRequest.new("INFO") # now in trying
71
+ r = SipMockTester::MockResponse.new(180) # now in proceeding
72
+ nist.txn_send r
73
+ assert_equal("NistMap.Proceeding", nist.state)
74
+ assert_equal(1, @t.msg.length)
75
+ nist.txn_send r
76
+ assert_equal("NistMap.Proceeding", nist.state)
77
+ assert_equal(2, @t.msg.length)
78
+ end
79
+
80
+ def test_proceeding_request
81
+ tu = SipMockTester::Tu.new
82
+ nist = SIP::Transaction::NonInviteServerTransaction.new(tu, nil, nil, @t, nil)
83
+ rq = SipMockTester::MockRequest.new("INFO") # now in trying
84
+ nist.txn_received rq
85
+ r = SipMockTester::MockResponse.new(180) # now in proceeding
86
+ nist.txn_send r
87
+ assert_equal("NistMap.Proceeding", nist.state)
88
+ assert_equal(1, @t.msg.length)
89
+ nist.txn_received rq
90
+ assert_equal("NistMap.Proceeding", nist.state)
91
+ assert_equal(2, @t.msg.length)
92
+ assert(!nist.consume?)
93
+ end
94
+
95
+ def test_proceeding_final
96
+ tu = SipMockTester::Tu.new
97
+ nist = SIP::Transaction::NonInviteServerTransaction.new(tu, nil, nil, @t, nil)
98
+ nist.txn_received SipMockTester::MockRequest.new("INFO") # now in trying
99
+ nist.txn_send SipMockTester::MockResponse.new(180) # now in proceeding
100
+ assert_equal("NistMap.Proceeding", nist.state)
101
+ assert_equal(1, @t.msg.length)
102
+ nist.txn_send SipMockTester::MockResponse.new(200) # now in completed
103
+ assert_equal("NistMap.Completed", nist.state)
104
+ assert_equal(2, @t.msg.length)
105
+ end
106
+
107
+
108
+ def test_completed_request
109
+ tu = SipMockTester::Tu.new
110
+ nist = SIP::Transaction::NonInviteServerTransaction.new(tu, nil, nil, @t, nil)
111
+ rq = SipMockTester::MockRequest.new("INFO") # now in trying
112
+ nist.txn_received rq
113
+ r = SipMockTester::MockResponse.new(200) # now in completed
114
+ nist.txn_send r
115
+ assert_equal("NistMap.Completed", nist.state)
116
+ assert_equal(1, @t.msg.length)
117
+ nist.txn_received rq
118
+ assert_equal("NistMap.Completed", nist.state)
119
+ assert_equal(2, @t.msg.length)
120
+ assert(!nist.consume?)
121
+ end
122
+
123
+
124
+ def test_completed_final
125
+ tu = SipMockTester::Tu.new
126
+ nist = SIP::Transaction::NonInviteServerTransaction.new(tu, nil, nil, @t, nil)
127
+ rq = SipMockTester::MockRequest.new("INFO") # now in trying
128
+ nist.txn_received rq
129
+ r = SipMockTester::MockResponse.new(200) # now in completed
130
+ nist.txn_send r
131
+ assert_equal("NistMap.Completed", nist.state)
132
+ assert_equal(1, @t.msg.length)
133
+ nist.txn_send r
134
+ assert_equal("NistMap.Completed", nist.state)
135
+ assert_equal(1, @t.msg.length)
136
+ end
137
+
138
+ def test_completed_with_timerJ
139
+ tu = SipMockTester::Tu.new
140
+ nist = SIP::Transaction::NonInviteServerTransaction.new(tu, nil, nil, @t, nil)
141
+ nist.tj = @grty*5
142
+ rq = SipMockTester::MockRequest.new("INFO") # now in trying
143
+ nist.txn_received rq
144
+ r = SipMockTester::MockResponse.new(200) # now in completed
145
+ nist.txn_send r
146
+ assert_equal("NistMap.Completed", nist.state)
147
+ assert_equal(1, @t.msg.length)
148
+ sleep((@grty*10.0)/1000.0)
149
+ assert_equal("NistMap.Terminated", nist.state)
150
+ end
151
+
152
+ def test_transport_err_trying
153
+ t = SipMockTester::ExceptionalTransportOnNthAttempt.new(1)
154
+ tu = SipMockTester::Tu.new
155
+ nist = SIP::Transaction::NonInviteServerTransaction.new(tu, nil, nil, t, nil)
156
+ nist.txn_received SipMockTester::MockRequest.new("INFO") # now in trying
157
+ r = SipMockTester::MockResponse.new(180)
158
+ nist.txn_send r
159
+ assert_equal("NistMap.Terminated", nist.state)
160
+ assert_equal(nist, tu.txn)
161
+ end
162
+
163
+ def test_transport_err_trying
164
+ t = SipMockTester::ExceptionalTransportOnNthAttempt.new(1)
165
+ tu = SipMockTester::Tu.new
166
+ nist = SIP::Transaction::NonInviteServerTransaction.new(tu, nil, nil, t, nil)
167
+ nist.txn_received SipMockTester::MockRequest.new("INFO") # now in trying
168
+ r = SipMockTester::MockResponse.new(180)
169
+ nist.txn_send r
170
+ assert_equal("NistMap.Terminated", nist.state)
171
+ assert_equal(nist, tu.txn)
172
+ end
173
+
174
+ def test_transport_err_proceeding
175
+ t = SipMockTester::ExceptionalTransportOnNthAttempt.new(2)
176
+ tu = SipMockTester::Tu.new
177
+ nist = SIP::Transaction::NonInviteServerTransaction.new(tu, nil, nil, t, nil)
178
+ nist.txn_received SipMockTester::MockRequest.new("INFO") # now in trying
179
+ r = SipMockTester::MockResponse.new(180)
180
+ nist.txn_send r
181
+ assert_equal("NistMap.Proceeding", nist.state)
182
+ nist.txn_send r
183
+ assert_equal("NistMap.Terminated", nist.state)
184
+ assert_equal(nist, tu.txn)
185
+ end
186
+
187
+ def test_transport_err_completed
188
+ t = SipMockTester::ExceptionalTransportOnNthAttempt.new(2)
189
+ tu = SipMockTester::Tu.new
190
+ nist = SIP::Transaction::NonInviteServerTransaction.new(tu, nil, nil, t, nil)
191
+ rq = SipMockTester::MockRequest.new("INFO") # now in trying
192
+ nist.txn_received rq
193
+ r = SipMockTester::MockResponse.new(200)
194
+ nist.txn_send r
195
+ assert_equal("NistMap.Completed", nist.state)
196
+ nist.txn_received rq
197
+ assert_equal("NistMap.Terminated", nist.state)
198
+ assert_equal(nist, tu.txn)
199
+ end
200
+
201
+ end
202
+
@@ -0,0 +1,103 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ class TestOfferAnswerPrack < DrivenSipTestCase
5
+
6
+ def setup
7
+ super
8
+ str = <<-EOF
9
+
10
+ require 'sip_test_driver_controller'
11
+
12
+ module TestOfferAnswerPrack_SipInline
13
+ class Uas2xxController2 < SIP::SipTestDriverController
14
+
15
+ transaction_usage :use_transactions=>false
16
+
17
+ session_timer 500
18
+
19
+ def on_invite(session)
20
+ logd("Received INVITE in #{name}")
21
+ session[:inviteReq] = session.irequest
22
+ session.respond_with(100)
23
+ session.respond_reliably_with(183, session[:inviteReq])
24
+ session['prackState'] = '183'
25
+ end
26
+
27
+ def on_prack(session)
28
+ session.respond_with(200)
29
+ if (session['prackState'] == '183')
30
+ session.respond_reliably_with(180, session[:inviteReq])
31
+ session['prackState'] = '180'
32
+ else
33
+ session.respond_with(200, session[:inviteReq])
34
+ end
35
+ end
36
+
37
+ def on_ack(session)
38
+ session.invalidate(true)
39
+ session.flow_completed_for("TestOfferAnswerPrack")
40
+ end
41
+
42
+ def order
43
+ 0
44
+ end
45
+ end
46
+
47
+ class Uac2xxController2 < SIP::SipTestDriverController
48
+ transaction_usage :use_transactions=>false
49
+ session_timer 500
50
+
51
+ def start
52
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
53
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
54
+ u.offer_answer.make_new_offer(nil, "sendonly")
55
+ u.send(r)
56
+ logd("Sent a new INVITE from #{name}")
57
+ end
58
+
59
+ def on_trying_res(session)
60
+ end
61
+
62
+ def on_provisional_res(session)
63
+ logd("Received provisional response ")
64
+ response = session.iresponse
65
+ if (response.rseq )
66
+ logd("Sending prack")
67
+ session.offer_answer.make_new_offer("G711A", "sendrecv")
68
+ session.create_and_send_prack
69
+ end
70
+ end
71
+
72
+ def on_success_res(session)
73
+ logd("Received response in #{name}")
74
+ response = session.iresponse
75
+
76
+ if session.iresponse.get_request_method == 'PRACK'
77
+ logd("Received prack response")
78
+ else
79
+ session.create_and_send_ack
80
+ session.invalidate(true)
81
+ end
82
+ end
83
+
84
+ end
85
+ end
86
+ EOF
87
+ define_controller_from(str)
88
+ set_controller("TestOfferAnswerPrack_SipInline::Uac2xxController2")
89
+ end
90
+
91
+
92
+ def test_prack
93
+ self.expected_flow = ["> INVITE","< 100", "< 183", "> PRACK", "< 200", "< 180", "> PRACK", "< 200 {2,2}", "> ACK"]
94
+ start_controller
95
+ verify_call_flow(:out)
96
+ self.expected_flow = ["< INVITE","> 100", "> 183", "< PRACK", "> 200", "> 180", "< PRACK", "> 200 {2,2}", "< ACK"]
97
+
98
+ verify_call_flow(:in)
99
+ end
100
+
101
+ end
102
+
103
+
@@ -0,0 +1,258 @@
1
+ # http://www.tools.ietf.org/html/draft-ietf-sipping-service-examples-14#section-2.16
2
+ # Alice Bob Bill
3
+ # | | |
4
+ # | INVITE F1 | |
5
+ # |------------->| |
6
+ # |180 Ringing F2| |
7
+ # |<-------------| |
8
+ # | | SUBSCRIBE F3 |
9
+ # | |<------------------|
10
+ # | | 200 OK F4 |
11
+ # | |------------------>|
12
+ # | | NOTIFY F5 |
13
+ # | |------------------>|
14
+ # | | 200 OK F6 |
15
+ # | |<------------------|
16
+ # | INVITE Replaces:Bob F7 |
17
+ # |<---------------------------------|
18
+ # | | 200 OK F8 |
19
+ # |--------------------------------->|
20
+ # | CANCEL F9 | |
21
+ # |------------->| |
22
+ # | 200 OK F10 | |
23
+ # |<-------------| |
24
+ # | 487 F11 | |
25
+ # |<-------------| |
26
+ # | ACK F12 | |
27
+ # |------------->| |
28
+ # | ACK F13 |
29
+ # |<---------------------------------|
30
+ # | |
31
+ # | Two way RTP Established |
32
+ # |<================================>|
33
+ # | BYE F14 |
34
+ # |--------------------------------->|
35
+ # | 200 OK F15 |
36
+ # |<---------------------------------|
37
+ # | |
38
+
39
+ require 'driven_sip_test_case'
40
+
41
+
42
+ class TestPickup < DrivenSipTestCase
43
+
44
+ def setup
45
+ SipperConfigurator[:ControllerPath] = nil
46
+ super
47
+ str = <<-EOF
48
+
49
+ require 'sip_test_driver_controller'
50
+
51
+ module TestPickup_SipInline
52
+
53
+ class BillController < SIP::SipTestDriverController
54
+
55
+ def interested?(req)
56
+ false
57
+ end
58
+
59
+ def start
60
+ bill_sub_session = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
61
+ bill_sub_session.name = "bill_sub_session"
62
+ r = Request.create_initial("subscribe", "sip:bob@sipper.com", :p_session_record=>"msg-info")
63
+ subscription = bill_sub_session.create_subscription("dialog")
64
+ bill_sub_session.add_subscription_to_request(r, subscription)
65
+ r.expires = "0"
66
+ bill_sub_session.send(r)
67
+ logd("Sent a new Subscribe from #{name}")
68
+ end
69
+
70
+
71
+ def on_notify(bill_sub_session)
72
+ content = bill_sub_session.irequest.content
73
+ tag_ary = {}
74
+ content.split("::").each {|val|
75
+ nv=val.split("=")
76
+ tag_ary[nv[0]] = nv[1] if nv && nv[0] && nv[1]
77
+ }
78
+
79
+ logd("Received notify Content: " + content.to_s)
80
+ logd("parsed notify Content: " + tag_ary.to_s)
81
+ bill_sub_session.respond_with(200)
82
+ bill_sub_session.invalidate(true)
83
+
84
+ bill_session = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
85
+ bill_session.name = "bill_session"
86
+
87
+ r = bill_session.create_initial_request("invite", "sip:alice@sipper.com", :p_session_record=>"msg-info")
88
+ r.replaces = tag_ary["call_id"]
89
+ r.replaces["from-tag"] = tag_ary["local_tag"]
90
+ r.replaces["to-tag"] = tag_ary["remote_tag"]
91
+ r.replaces["early-only"] = ''
92
+ bill_session.send(r)
93
+ logd("Sent a new Invite with replaces from " + name)
94
+ end
95
+
96
+ def on_success_res(bill_session)
97
+ logd("Received response in "+name)
98
+ bill_session.create_and_send_ack
99
+ end
100
+
101
+ def on_bye(bill_session)
102
+ bill_session.respond_with(200)
103
+ bill_session.invalidate(true)
104
+ end
105
+ end
106
+
107
+ class BobController < SIP::SipTestDriverController
108
+
109
+ transaction_usage :use_transactions=>true
110
+
111
+ session_timer 1500
112
+
113
+ def interested?(req)
114
+ (req.method == "INVITE" && !req[:replaces]) ||
115
+ (req.method == "SUBSCRIBE")
116
+ end
117
+
118
+ def on_invite(bob_session1)
119
+ bob_session1.name = "bob_session1"
120
+ bob_session1.respond_with(180)
121
+
122
+ dialog_info = "local_tag=" + bob_session1.local_tag +
123
+ "::remote_tag=" + bob_session1.remote_tag +
124
+ "::call_id=" + bob_session1.call_id
125
+ dialog_store.put(bob_session1.irequest.uri.to_s, dialog_info)
126
+ end
127
+
128
+ def on_cancel(bob_session1)
129
+ logd("Received cancel request in #{name}")
130
+ # Here we use the To header because the Contact in 180 changes
131
+ # remote target.
132
+ dialog_store.delete(bob_session1.irequest.to.uri.to_s)
133
+ bob_session1.invalidate(true)
134
+ end
135
+
136
+ def on_subscribe(session)
137
+ subscription = session.get_subscription(session.irequest)
138
+ session.name = "bob_session2"
139
+ if subscription == nil
140
+ logd("New subscription received.")
141
+ subscription = session.create_subscription_from_request(session.irequest)
142
+ else
143
+ logd("Subscription refresh received.")
144
+ subscription = session.update_subscription(session.irequest)
145
+ end
146
+
147
+ response = session.create_response(202)
148
+ session.send_response(response)
149
+
150
+ subscription.state = "terminated"
151
+
152
+ dialog_info = dialog_store.get(session.irequest.uri.to_s)
153
+
154
+ notifyReq = session.create_subsequent_request("NOTIFY")
155
+ session.add_subscription_to_request(notifyReq, subscription)
156
+ notifyReq.content = dialog_info
157
+ notifyReq.content_type = "application/dialog-info+xml"
158
+
159
+ session.send_request(notifyReq)
160
+ end
161
+
162
+ def on_success_res_for_notify(session)
163
+ session.invalidate(true)
164
+ end
165
+ end
166
+
167
+
168
+ class AliceController < SIP::SipTestDriverController
169
+ transaction_usage :use_transactions=>true
170
+ session_timer 500
171
+
172
+ def interested?(req)
173
+ req[:replaces]
174
+ end
175
+
176
+ def start
177
+ logd("Alice controller Started. Suriya")
178
+ alice_session1 = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
179
+ alice_session1.name = "alice_session1"
180
+ alice_session1.request_with('INVITE', 'sip:bob@sipper.com', :to=>'sip:bob@sipper.com', :p_session_record=>"msg-info" )
181
+ logd("Sent a new Invite from " +name)
182
+ end
183
+
184
+ def on_invite(alice_session2)
185
+ alice_session2.name = "alice_session2"
186
+ if alice_session2.irequest[:replaces] != nil
187
+ r = alice_session2.irequest
188
+ callid = r.replaces.header_value
189
+ localtag = r.replaces["to-tag"]
190
+ remotetag = r.replaces["from-tag"]
191
+ alice_session1 = SessionManager.find_session(callid, localtag, remotetag)
192
+ alice_session1.post_custom_message(CustomMessage.new)
193
+ end
194
+ alice_session2.respond_with(200)
195
+ end
196
+
197
+ def on_custom_msg(alice_session1, msg)
198
+ logd("Received Custom message in "+ name)
199
+ alice_session1.create_and_send_cancel_when_ready
200
+ end
201
+
202
+ def on_failure_res(alice_session1)
203
+ logd("Received failure response in "+ name)
204
+ alice_session1.invalidate(true)
205
+ end
206
+
207
+ def on_ack(alice_session2)
208
+ logd("Received ACK in "+ name)
209
+ alice_session2.schedule_timer_for(:endCall, 100)
210
+ end
211
+
212
+ def on_timer(alice_session2, timertask)
213
+ req = alice_session2.create_subsequent_request('BYE')
214
+ alice_session2.send(req)
215
+ end
216
+
217
+ def on_success_res(session)
218
+ if session.iresponse.get_request_method == "BYE"
219
+ logd("End of call flow reached.")
220
+ alice_session2 = session
221
+ alice_session2.invalidate
222
+ alice_session2.flow_completed_for("TestPickup")
223
+ end
224
+ end
225
+ end
226
+ end
227
+ EOF
228
+ define_controller_from(str)
229
+ end
230
+
231
+
232
+ def test_pickup
233
+ start_named_controller_non_blocking("TestPickup_SipInline::AliceController")
234
+ start_named_controller_non_blocking("TestPickup_SipInline::BillController")
235
+ wait_for_signaling
236
+ # alice_session1
237
+ self.expected_flow = ["> INVITE","< 100", "< 180", "> CANCEL", "< 200", "< 487", "> ACK"]
238
+ verify_call_flow(:out, 0)
239
+
240
+ self.expected_flow = ["< INVITE","> 100", "> 180", "< CANCEL", "> 200", "> 487", "< ACK"]
241
+ verify_call_flow(:in, 0)
242
+
243
+ self.expected_flow = ["< SUBSCRIBE", "> 202", "> NOTIFY", "< 200"]
244
+ verify_call_flow(:in, 1)
245
+
246
+ self.expected_flow = ["> SUBSCRIBE", "< 202", "< NOTIFY", "> 200"]
247
+ verify_call_flow(:out, 1)
248
+
249
+ self.expected_flow = ["> INVITE", "< 100", "< 200", "> ACK", "< BYE", "> 200"]
250
+ verify_call_flow(:out, 2)
251
+
252
+ self.expected_flow = ["< INVITE", "> 100", "> 200", "< ACK", "> BYE", "< 200"]
253
+ verify_call_flow(:in, 2)
254
+ end
255
+
256
+ end
257
+
258
+