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,106 @@
1
+ require 'base_test_case'
2
+
3
+ class TestRequest < BaseTestCase
4
+
5
+ def setup
6
+ @method = "invite"
7
+ @uri = "sip:nasir@sipper.com"
8
+ @r = Request.create_initial(@method, @uri, :p_asserted_identity => "sip:nina@home.com")
9
+ end
10
+
11
+ def test_empty_request
12
+ r = Request.create_initial(@method, @uri)
13
+ assert_equal(r.method, @method.upcase)
14
+ assert_equal(r.uri, @uri)
15
+ Request.sys_hdrs.each do |hdr|
16
+ assert_respond_to r, hdr
17
+ end
18
+ end
19
+
20
+ def test_with_header
21
+ assert_respond_to @r, :p_asserted_identity
22
+ end
23
+
24
+ def test_dynamic_methods
25
+ assert_not_nil @r.p_asserted_identity
26
+ @r.add_p_asserted_identity @uri
27
+ assert_equal "<"+@uri+">", @r.p_asserted_identitys[1].to_s
28
+ @r.p_asserted_identity = @uri
29
+ assert_equal "<"+@uri+">", @r.p_asserted_identity.to_s
30
+ end
31
+
32
+ def test_add_headers
33
+ h = {:a=>"1", :b=>"2"}
34
+ @r.define_from_hash h
35
+ assert_equal "1", @r.a.to_s
36
+ assert_equal "2", @r.b.to_s
37
+ test_dynamic_methods
38
+ end
39
+
40
+ def test_add_header
41
+ assert_raise(NoMethodError){ @r.a }
42
+ @r.a = "hello"
43
+ assert_equal("hello", @r.a.to_s)
44
+ @r.add_a "bye"
45
+ assert_equal("bye", @r.as[1].to_s)
46
+ end
47
+
48
+ def test_mv_header
49
+ @r.a = "hello,bye"
50
+ assert_equal("hello", @r.a.to_s)
51
+ @r.add_a "hello_again"
52
+ assert_equal("bye", @r.as[1].to_s)
53
+ assert_equal("hello_again", @r.as[2].to_s)
54
+ end
55
+
56
+ def test_mv_arr_header
57
+ @r.a = ["hello", "bye"]
58
+ assert_equal("hello", @r.as[0].to_s)
59
+ assert_equal("bye", @r.as[1].to_s)
60
+ end
61
+
62
+ def test_mv_formatting
63
+ @r.allow = arr = ["INVITE", "BYE", "ACK"]
64
+ msg_str = @r.to_s
65
+ assert(msg_str.index("Allow: INVITE, BYE, ACK"))
66
+ # now multiline
67
+ @r.format_as_separate_headers_for_mv(:allow)
68
+ msg_str = @r.to_s
69
+ arr.each do |m|
70
+ rx = Regexp.new("Allow: #{m}")
71
+ assert(msg_str =~ rx)
72
+ end
73
+ end
74
+
75
+ def test_compact_formatting1
76
+ @r.compact_headers = [:via, :to]
77
+ @r.via = "SIP/2.0/UDP 127.0.0.1:6061;branch=z9hG4bK-2352-1-0"
78
+ @r.from = "sipper <sip:sipper@127.0.0.1:6061>;tag=1"
79
+ @r.to = "sut <sip:service@127.0.0.1:5060>"
80
+ msg_str = @r.to_s
81
+ assert(msg_str.index("v: SIP/2.0/UDP 127.0.0.1:6061;branch=z9hG4bK-2352-1-0"))
82
+ assert(msg_str.index("From: sipper <sip:sipper@127.0.0.1:6061>;tag=1"))
83
+ assert(msg_str.index("t: sut <sip:service@127.0.0.1:5060>"))
84
+ end
85
+
86
+ def test_compact_formatting2
87
+ @r.compact_headers = [:all_headers]
88
+ @r.via = "SIP/2.0/UDP 127.0.0.1:6061;branch=z9hG4bK-2352-1-0"
89
+ @r.from = "sipper <sip:sipper@127.0.0.1:6061>;tag=1"
90
+ @r.to = "sut <sip:service@127.0.0.1:5060>"
91
+ @r.p_test = "Test"
92
+ msg_str = @r.to_s
93
+ assert(msg_str.index("v: SIP/2.0/UDP 127.0.0.1:6061;branch=z9hG4bK-2352-1-0"))
94
+ assert(msg_str.index("f: sipper <sip:sipper@127.0.0.1:6061>;tag=1"))
95
+ assert(msg_str.index("t: sut <sip:service@127.0.0.1:5060>"))
96
+ assert(msg_str.index("P-Test: Test"))
97
+ end
98
+
99
+ def test_content_len
100
+ assert_equal(0, @r.content_len)
101
+ @r.content = File.new(File.join(File.dirname(__FILE__), "c_134.txt")).readlines
102
+ assert_equal(141, @r.content_len)
103
+ end
104
+
105
+
106
+ end
@@ -0,0 +1,40 @@
1
+ require 'base_test_case'
2
+
3
+ class TestResponse < BaseTestCase
4
+
5
+ def setup
6
+ @code = 200
7
+ @status = "OK"
8
+ @r = Response.create(@code, @status, :from=>"sip:nasir@codepresso.com")
9
+ end
10
+
11
+ def test_empty
12
+ r = Response.create(@code, @status)
13
+ assert_equal(@code, r.code)
14
+ assert_equal(@status, r.status)
15
+ assert(!r.incoming)
16
+ end
17
+
18
+ def test_with_header
19
+ assert(@r.respond_to?(:from))
20
+ assert_equal("<sip:nasir@codepresso.com>", @r.from.to_s)
21
+ assert_equal(0, @r.content_len)
22
+ if @r.respond_to?(:content)
23
+ assert_nil(@r.content)
24
+ end
25
+ assert_nil(@r[:content])
26
+ end
27
+
28
+ def test_dynamic
29
+ @r.via = v = "SIP/2.0/UDP 127.0.0.1:6061;received=127.0.0.2;branch=z9hG4bK-2352-1-0"
30
+ assert_equal(v, @r.via.to_s)
31
+ pv = @r.via
32
+ assert_equal("127.0.0.1", pv.sent_by_ip)
33
+ assert_equal("6061", pv.sent_by_port)
34
+ assert_nil(pv.maddr)
35
+ pf = @r.from
36
+ assert_equal("<sip:nasir@codepresso.com>", pf.to_s)
37
+ assert_equal("<sip:nasir@codepresso.com>", pf.header_value)
38
+ assert_equal({}, pf.header_params)
39
+ end
40
+ end
@@ -0,0 +1,92 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ #
5
+ # A very simple inlined smoke test.
6
+ #
7
+ class TestResponseWithoutToTag < DrivenSipTestCase
8
+
9
+ def setup
10
+ super
11
+ @pc = SipperConfigurator[:ProtocolCompliance]
12
+ SipperConfigurator[:ProtocolCompliance] = 'lax'
13
+ str = <<-EOF
14
+
15
+ require 'sip_test_driver_controller'
16
+
17
+ module SipInline
18
+ class UasWttController < SIP::SipTestDriverController
19
+
20
+ transaction_usage :use_transactions=>true
21
+
22
+ def on_invite(session)
23
+ r = session.create_response(200)
24
+ r.to.tag = nil
25
+ r.to.bb = nil
26
+ session.send r
27
+ logd("Received INVITE sent a 200 from "+name)
28
+ end
29
+
30
+ def on_ack(session)
31
+ session.request_with("bye")
32
+ end
33
+
34
+ def on_success_res(session)
35
+ session.invalidate(true)
36
+ session.flow_completed_for("TestResponseWithoutToTag")
37
+ end
38
+
39
+ def order
40
+ 0
41
+ end
42
+
43
+ end
44
+
45
+ class UacWttController < SIP::SipTestDriverController
46
+
47
+ transaction_usage :use_transactions=>true
48
+
49
+ def start
50
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
51
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
52
+ r.to.bb = 'x'
53
+ u.send(r)
54
+ logd("Sent a new INVITE from "+name)
55
+ end
56
+
57
+
58
+ def on_success_res(session)
59
+ if session.iresponse.to
60
+ session.do_record('no_to_tag')
61
+ else
62
+ session.do_record('has_to_tag')
63
+ end
64
+ session.request_with('ACK')
65
+ end
66
+
67
+ def on_bye(session)
68
+ session.respond_with(200)
69
+ session.invalidate(true)
70
+ end
71
+
72
+ end
73
+ end
74
+ EOF
75
+ define_controller_from(str)
76
+ set_controller("SipInline::UacWttController")
77
+ end
78
+
79
+
80
+ def test_wtt_controllers
81
+ self.expected_flow = ["> INVITE", "< 100", "< 200", "! no_to_tag", "> ACK", "< BYE", "> 200"]
82
+ start_controller
83
+ verify_call_flow(:out)
84
+ self.expected_flow = ["< INVITE", "> 100", "> 200", "< ACK", "> BYE", "< 200"]
85
+ verify_call_flow(:in)
86
+ end
87
+
88
+ def teardown
89
+ SipperConfigurator[:ProtocolCompliance] = @pc
90
+ super
91
+ end
92
+ end
@@ -0,0 +1,88 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+
5
+ class TestRport < DrivenSipTestCase
6
+
7
+ def setup
8
+ @pc = SipperConfigurator[:ProtocolCompliance]
9
+ SipperConfigurator[:ProtocolCompliance] = 'lax'
10
+ super
11
+ str = <<-EOF
12
+
13
+ require 'sip_test_driver_controller'
14
+
15
+ module SipInline
16
+ class UasRp1Controller < SIP::SipTestDriverController
17
+
18
+ transaction_usage :use_transactions=>true
19
+
20
+
21
+ def on_invite(session)
22
+ session.name = "p1controller"
23
+ session.do_record(session.transport.port)
24
+ session.respond_with(200)
25
+ logd("Received INVITE sent a 200 from "+name)
26
+ end
27
+
28
+ def on_ack(session)
29
+ session.request_with("bye")
30
+ end
31
+
32
+ def on_success_res(session)
33
+ session.invalidate(true)
34
+ session.flow_completed_for("TestRport")
35
+ end
36
+
37
+ def order
38
+ 0
39
+ end
40
+
41
+ end
42
+
43
+
44
+ class UacRpMh1Controller < SIP::SipTestDriverController
45
+
46
+ transaction_usage :use_transactions=>true
47
+
48
+ def start
49
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], 5066)
50
+ r = u.create_initial_request("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
51
+ r.via.rport = ''
52
+ r.via.sent_by_port = "6066"
53
+ u.send(r)
54
+ end
55
+
56
+
57
+ def on_success_res(session)
58
+ session.do_record(session.iresponse.p_sipper_session.to_s)
59
+ session.request_with('ACK')
60
+ end
61
+
62
+ def on_bye(session)
63
+ session.respond_with(200)
64
+ session.invalidate(true)
65
+ end
66
+
67
+ end
68
+ end
69
+ EOF
70
+ define_controller_from(str)
71
+ set_controller("SipInline::UacRpMh1Controller")
72
+ end
73
+
74
+
75
+ def test_rp_controllers
76
+ self.expected_flow = ["> INVITE", "< 100", "< 200", "! p1controller", "> ACK", "< BYE", "> 200"]
77
+ start_controller
78
+ verify_call_flow(:out, 0)
79
+ self.expected_flow = ["< INVITE", "> 100", "! 5066", "> 200", "< ACK", "> BYE", "< 200"]
80
+ verify_call_flow(:in, 0)
81
+ end
82
+
83
+ def teardown
84
+ SipperConfigurator[:ProtocolCompliance] = @pc
85
+ super
86
+ end
87
+
88
+ end
@@ -0,0 +1,91 @@
1
+
2
+ require 'base_test_case'
3
+ require 'sdp/sdp_parser'
4
+ require 'message'
5
+
6
+ class TestSdp < BaseTestCase
7
+
8
+ def test_sdp
9
+ str = %q{INVITE sip:service@127.0.0.1:5060 SIP/2.0
10
+ Via: SIP/2.0/UDP 127.0.0.1:6061;branch=z9hG4bK-2352-1-0
11
+ From: sipp <sip:sipp@127.0.0.1:6061>;tag=1
12
+ To: sut <sip:service@127.0.0.1:5060>
13
+ Call-ID: 1-2352@127.0.0.1
14
+ CSeq: 1 INVITE
15
+ Contact: sip:sippp@127.0.0.1:6061
16
+ Max-Forwards: 70
17
+ Subject: Performance Test
18
+ Content-Type: application/sdp
19
+ Content-Length: 347
20
+
21
+ v=0
22
+ o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
23
+ s=SDP Seminar
24
+ i=A Seminar on the session description protocol
25
+ u=http://www.example.com/seminars/sdp.pdf
26
+ e=j.doe@example.com (Jane Doe)
27
+ c=IN IP4 224.2.17.12/127
28
+ t=2873397496 2873404696
29
+ a=recvonly
30
+ a=some_attr
31
+ m=audio 49170 RTP/AVP 0
32
+ m=video 51372 RTP/AVP 99
33
+ a=rtpmap:99 h263-1998/90000
34
+ }
35
+
36
+ sdp_only_str1 = %q{v=0
37
+ o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
38
+ s=SDP Seminar
39
+ i=A Seminar on the session description protocol
40
+ u=http://www.example.com/seminars/sdp.pdf
41
+ e=j.doe@example.com (Jane Doe)
42
+ c=IN IP4 224.2.17.12/127
43
+ t=2873397496 2873404696
44
+ a=recvonly
45
+ a=some_attr
46
+ m=audio 49170 RTP/AVP 0
47
+ m=video 51372 RTP/AVP 99
48
+ a=rtpmap:99 h263-1998/90000
49
+ }
50
+
51
+ sdp_only_str2 = %q{v=0
52
+ o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
53
+ s=SDP Seminar
54
+ i=A Seminar on the session description protocol
55
+ u=http://www.example.com/seminars/sdp.pdf
56
+ e=j.doe@example.com (Jane Doe)
57
+ c=IN IP4 224.2.17.12/127
58
+ t=2873397496 2873404696
59
+ a=recvonly
60
+ a=some_attr
61
+ m=audio 49170 RTP/AVP 0
62
+ }
63
+
64
+ sdp_only_str3 = %q{v=0
65
+ o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
66
+ s=SDP Seminar
67
+ i=A Seminar on the session description protocol
68
+ u=http://www.example.com/seminars/sdp.pdf
69
+ e=j.doe@example.com (Jane Doe)
70
+ c=IN IP4 224.2.17.12/127
71
+ t=2873397496 2873404696
72
+ a=recvonly
73
+ a=some_attr
74
+ m=audio 49170 RTP/AVP 0
75
+ a=recvonly
76
+ }
77
+
78
+ msg = [str, ["AF_INET", 33302, "localhost.localdomain", "127.0.0.1"]]
79
+ r = Message.parse msg
80
+ sdp = SDP::SdpParser.parse(r.contents)
81
+ assert_equal(sdp_only_str1, sdp.format_sdp("\n"))
82
+ sdp.remove_media_line_at(1)
83
+ assert_equal(sdp_only_str2, sdp.format_sdp("\n"))
84
+ sdp.add_media_attribute_at(0, "recvonly")
85
+ assert_equal(sdp_only_str3, sdp.format_sdp("\n"))
86
+ assert_equal(["recvonly"], sdp.get_media_attributes_at(0))
87
+ sdp.remove_media_attribute_at(0, "recvonly")
88
+ assert_equal(sdp_only_str2, sdp.format_sdp("\n"))
89
+ end
90
+
91
+ end
@@ -0,0 +1,145 @@
1
+ require 'base_test_case'
2
+ require 'sdp/sdp_parser'
3
+ require 'message'
4
+
5
+ class TestSdpParser < BaseTestCase
6
+
7
+ def test_simple_parse
8
+ str = %q{INVITE sip:service@127.0.0.1:5060 SIP/2.0
9
+ Via: SIP/2.0/UDP 127.0.0.1:6061;branch=z9hG4bK-2352-1-0
10
+ From: sipp <sip:sipp@127.0.0.1:6061>;tag=1
11
+ To: sut <sip:service@127.0.0.1:5060>
12
+ Call-ID: 1-2352@127.0.0.1
13
+ CSeq: 1 INVITE
14
+ Contact: sip:sippp@127.0.0.1:6061
15
+ Max-Forwards: 70
16
+ Subject: Performance Test
17
+ Content-Type: application/sdp
18
+ Content-Length: 129
19
+
20
+ v=0
21
+ o=user1 53655765 2353687637 IN IP4 127.0.0.1
22
+ s=-
23
+ c=IN IP4 127.0.0.1
24
+ t=0 0
25
+ m=audio 6000 RTP/AVP 0
26
+ a=rtpmap:0 PCMU/8000}
27
+ msg = [str, ["AF_INET", 33302, "localhost.localdomain", "127.0.0.1"]]
28
+ r = Message.parse msg
29
+ sdp = SDP::SdpParser.parse(r.contents)
30
+ assert(SDP::Sdp, sdp.class)
31
+ assert_equal("0", sdp.session_lines[:v])
32
+ assert_equal("user1 53655765 2353687637 IN IP4 127.0.0.1", sdp.session_lines[:o])
33
+ assert_equal("-", sdp.session_lines[:s])
34
+ assert_equal("IN IP4 127.0.0.1", sdp.session_lines[:c])
35
+ assert_equal("0 0", sdp.session_lines[:t])
36
+ assert_equal(5, sdp.session_lines.length)
37
+ assert_equal(1, sdp.media_lines.length)
38
+ assert_equal(2, sdp.media_lines[0].length)
39
+ ma = sdp.media_lines.shift
40
+ assert_equal("audio 6000 RTP/AVP 0", ma[:m])
41
+ assert_equal("rtpmap:0 PCMU/8000", ma[:a])
42
+ end
43
+
44
+
45
+ def test_response_parse
46
+ str = %q{SIP/2.0 180 Ringing
47
+ To: <sip:16504801001@10.17.131.250>;tag=ccb728-0-13d8-5a45cb-34600e79-5a45cb
48
+ From: 16504806767 <sip:16504806767@10.17.131.250:5072>;tag=3
49
+ Call-ID: 1-5192@10.17.205.135
50
+ Cseq: 1 INVITE
51
+ Contact: <sip:service@10.17.131.250:5080>
52
+ Content-Length: 216
53
+ Via: SIP/2.0/UDP 10.17.205.135:5066;branch=z9hG4bK-1-0-1
54
+ Content-Type: application/sdp
55
+
56
+
57
+ v=0
58
+ o=1234 53655765 2353687637 IN IP4 10.17.131.251
59
+ s=SnowShore Sdp
60
+ c=IN IP4 10.171.131.251
61
+ t=0 0
62
+ m=audio 6000 RTP/AVP 0 101
63
+ a=sendrecv
64
+ a=ptime:20
65
+ a=rtpmap:0 PCMU/8000
66
+ a=rtpmap:101 telephone-event/8000/1}
67
+ msg = [str, ["AF_INET", 33302, "localhost.localdomain", "127.0.0.1"]]
68
+ r = Message.parse msg
69
+ sdp = SDP::SdpParser.parse(r.contents)
70
+ assert(SDP::Sdp, sdp.class)
71
+ assert_equal("0", sdp.session_lines[:v])
72
+ assert_equal("1234 53655765 2353687637 IN IP4 10.17.131.251", sdp.session_lines[:o])
73
+ assert_equal("SnowShore Sdp", sdp.session_lines[:s])
74
+ assert_equal("IN IP4 10.171.131.251", sdp.session_lines[:c])
75
+ assert_equal("0 0", sdp.session_lines[:t])
76
+
77
+ assert_equal(1, sdp.media_lines.length)
78
+
79
+ assert_equal(2, sdp.media_lines[0].length)
80
+ ma = sdp.media_lines.shift
81
+ assert_equal("audio 6000 RTP/AVP 0 101", ma[:m])
82
+ end
83
+
84
+
85
+
86
+ def test_multi_m_parse
87
+ str = %q{INVITE sip:service@127.0.0.1:5060 SIP/2.0
88
+ Via: SIP/2.0/UDP 127.0.0.1:6061;branch=z9hG4bK-2352-1-0
89
+ From: sipp <sip:sipp@127.0.0.1:6061>;tag=1
90
+ To: sut <sip:service@127.0.0.1:5060>
91
+ Call-ID: 1-2352@127.0.0.1
92
+ CSeq: 1 INVITE
93
+ Contact: sip:sippp@127.0.0.1:6061
94
+ Max-Forwards: 70
95
+ Subject: Performance Test
96
+ Content-Type: application/sdp
97
+ Content-Length: 347
98
+
99
+ v=0
100
+ o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
101
+ s=SDP Seminar
102
+ i=A Seminar on the session description protocol
103
+ u=http://www.example.com/seminars/sdp.pdf
104
+ e=j.doe@example.com (Jane Doe)
105
+ c=IN IP4 224.2.17.12/127
106
+ t=2873397496 2873404696
107
+ a=recvonly
108
+ a=some_attr
109
+ m=audio 49170 RTP/AVP 0
110
+ m=video 51372 RTP/AVP 99
111
+ a=rtpmap:99 h263-1998/90000
112
+ }
113
+
114
+ sdp_only_str = %q{v=0
115
+ o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
116
+ s=SDP Seminar
117
+ i=A Seminar on the session description protocol
118
+ u=http://www.example.com/seminars/sdp.pdf
119
+ e=j.doe@example.com (Jane Doe)
120
+ c=IN IP4 224.2.17.12/127
121
+ t=2873397496 2873404696
122
+ a=recvonly
123
+ a=some_attr
124
+ m=audio 49170 RTP/AVP 0
125
+ m=video 51372 RTP/AVP 99
126
+ a=rtpmap:99 h263-1998/90000
127
+ }
128
+
129
+ msg = [str, ["AF_INET", 33302, "localhost.localdomain", "127.0.0.1"]]
130
+ r = Message.parse msg
131
+ sdp = SDP::SdpParser.parse(r.contents)
132
+ # sdp_only_str does not have \r
133
+ assert_equal(sdp_only_str, sdp.format_sdp("\n"))
134
+ assert_equal(9, sdp.session_lines.length)
135
+ assert_equal(2, sdp.media_lines.length)
136
+ assert_equal(1, sdp.media_lines[0].length)
137
+ assert_equal(2, sdp.media_lines[1].length)
138
+ ma = sdp.media_lines.shift
139
+ assert_equal("audio 49170 RTP/AVP 0", ma[:m])
140
+ ma = sdp.media_lines.shift
141
+ assert_equal("video 51372 RTP/AVP 99", ma[:m])
142
+ assert_equal("rtpmap:99 h263-1998/90000", ma[:a])
143
+
144
+ end
145
+ end