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,33 @@
1
+ require 'base_test_case'
2
+ require 'util/compact_converter'
3
+
4
+ class TestCompactConverter < BaseTestCase
5
+
6
+ def test_compact_present
7
+ assert(SipperUtil::CompactConverter.has_compact_form?("Via"))
8
+ assert(SipperUtil::CompactConverter.has_compact_form?("via"))
9
+ assert(SipperUtil::CompactConverter.has_compact_form?(:via))
10
+ assert(SipperUtil::CompactConverter.has_compact_form?("call-id"))
11
+ assert(SipperUtil::CompactConverter.has_compact_form?("Call-ID"))
12
+ assert(SipperUtil::CompactConverter.has_compact_form?("Call-Id"))
13
+ assert(!SipperUtil::CompactConverter.has_compact_form?("P-Non-Header"))
14
+ end
15
+
16
+ def test_expanded_present
17
+ assert(SipperUtil::CompactConverter.has_expanded_form?("i"))
18
+ assert(!SipperUtil::CompactConverter.has_expanded_form?("2"))
19
+ end
20
+
21
+ def test_expanded
22
+ assert_equal("Call-ID", SipperUtil::CompactConverter.get_expanded("i"))
23
+ assert_equal("From", SipperUtil::CompactConverter.get_expanded("f"))
24
+ assert_nil(SipperUtil::CompactConverter.get_expanded("2"))
25
+ end
26
+
27
+ def test_compact
28
+ assert_equal("i", SipperUtil::CompactConverter.get_compact("Call-ID"))
29
+ assert_equal("j", SipperUtil::CompactConverter.get_compact("Reject-Contact"))
30
+ assert_nil(SipperUtil::CompactConverter.get_compact("P-Non-Header"))
31
+ end
32
+
33
+ end
@@ -0,0 +1,37 @@
1
+
2
+ require 'base_test_case'
3
+
4
+
5
+ class TestControllerClassLoader < BaseTestCase
6
+ include SIP
7
+ def setup
8
+ @path = File.join(SipperConfigurator[:SipperBasePath], "sipper_test", "test_controllers", "class_loading")
9
+ end
10
+
11
+ def test_empty_clear
12
+ assert_nothing_raised {ControllerClassLoader.clear_all}
13
+ end
14
+
15
+ def test_empty_controllers
16
+ assert_equal([], ControllerClassLoader.controllers)
17
+ test_empty_clear
18
+ assert_equal([], ControllerClassLoader.controllers)
19
+ end
20
+
21
+ def test_load
22
+ file = File.join(@path,"ordered", "first_ordered_controller.rb")
23
+ ControllerClassLoader.load file
24
+ assert_equal("FirstOrderedController", ControllerClassLoader.controllers[0].to_s)
25
+ file = File.join(@path,"ordered", "second_ordered_controller.rb")
26
+ ControllerClassLoader.load file
27
+ assert_equal(2, ControllerClassLoader.controllers.size)
28
+ assert_not_nil(ControllerClassLoader.controllers.find {|x| x.to_s == "SecondOrderedModule::SecondOrderedController"} )
29
+ ControllerClassLoader.load file #load again
30
+ assert_equal(2, ControllerClassLoader.controllers.size)
31
+ end
32
+
33
+ def teardown
34
+ ControllerClassLoader.clear_all
35
+ end
36
+
37
+ end
@@ -0,0 +1,53 @@
1
+ require 'base_test_case'
2
+
3
+
4
+ class TestControllerSelector < BaseTestCase
5
+
6
+
7
+ def setup
8
+ @path = File.join(SipperConfigurator[:SipperBasePath], "sipper_test", "test_controllers", "class_loading")
9
+ end
10
+
11
+ def test_ordered_load_with_dir
12
+ p = File.join(@path, "ordered")
13
+ c = SIP::ControllerSelector.new( Dir.new(p) )
14
+ assert_equal("SecondOrderedModule::SecondOrderedController", c.get_controllers[0].name)
15
+ assert_equal("FirstOrderedController", c.get_controllers[1].name)
16
+ assert_equal("SecondOrderedModule::RecondOrderedController", c.get_controllers[2].name)
17
+ end
18
+
19
+ def test_ordered_load_with_path
20
+ p = File.join(@path, "ordered")
21
+ c = SIP::ControllerSelector.new( p )
22
+ assert_equal("SecondOrderedModule::SecondOrderedController", c.get_controllers[0].name)
23
+ assert_equal("FirstOrderedController", c.get_controllers[1].name)
24
+ assert_equal("SecondOrderedModule::RecondOrderedController", c.get_controllers[2].name)
25
+ assert_equal("FirstOrderedController", c.get_controller("FirstOrderedController").name)
26
+ end
27
+
28
+
29
+ def test_unordered_load
30
+ p = File.join(@path, "unordered")
31
+ c = SIP::ControllerSelector.new( Dir.new(p) )
32
+ assert_not_nil(c.get_controllers.find {|x| x.name == "SecondUnorderedModule::SecondUnorderedController"})
33
+ assert_not_nil(c.get_controllers.find {|x| x.name == "FirstUnorderedController"})
34
+ end
35
+
36
+ def test_clear
37
+ p = File.join(@path, "ordered")
38
+ c = SIP::ControllerSelector.new( p )
39
+ assert_equal(3, c.get_controllers.size)
40
+ c.clear_all
41
+ assert_equal(0, c.get_controllers.size)
42
+ end
43
+
44
+
45
+ def teardown
46
+ if @cs
47
+ @cs.clear_all
48
+ else
49
+ SIP::ControllerClassLoader.clear_all
50
+ end
51
+ end
52
+
53
+ end
@@ -0,0 +1,74 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ class TestControllerUsingCompactHeaders < DrivenSipTestCase
5
+
6
+ def setup
7
+ super
8
+ str = <<-EOF
9
+
10
+ require 'sip_test_driver_controller'
11
+
12
+ module SipInline
13
+ class UasChController < SIP::SipTestDriverController
14
+ transaction_usage :use_transactions=>false
15
+ def on_info(session)
16
+ logd("Received INFO in "+name)
17
+ r = session.create_response(200, "OK")
18
+ session.set_compact_headers([:from, :to, :call_id])
19
+ session.send(r)
20
+ session.invalidate
21
+ end
22
+
23
+ def order
24
+ 0
25
+ end
26
+ end
27
+
28
+ class UacChController < SIP::SipTestDriverController
29
+ transaction_usage :use_transactions=>false
30
+ use_compact_headers [:to, :from, :call_id, :via]
31
+ def start
32
+ r = Request.create_initial("info", "sip:nasir@sipper.com", :p_session_record=>"msg-debug")
33
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
34
+ u.send(r)
35
+ logd("Sent a new INFO from "+name)
36
+ end
37
+
38
+ def on_success_res(session)
39
+ logd("Received response in "+name)
40
+ session.invalidate
41
+ session.flow_completed_for("TestControllerUsingCompactHeaders")
42
+ end
43
+
44
+ end
45
+ end
46
+ EOF
47
+ define_controller_from(str)
48
+ set_controller("SipInline::UacChController")
49
+ end
50
+
51
+
52
+ def test_header_order
53
+ self.expected_flow = ["> INFO","< 200"]
54
+ start_controller
55
+ verify_call_flow(:out)
56
+ self.expected_flow = ["< INFO", "> 200"]
57
+ verify_call_flow(:in)
58
+
59
+ msg = get_out_recording.get_recording[0] # first SIP message from UAC
60
+ ["t", "i", "v", "f"].each do |h|
61
+ assert(msg.index(h+": "))
62
+ end
63
+
64
+ msg = get_in_recording.get_recording[1] # second msg, i.e response from UAS
65
+ ["t", "i", "f"].each do |h|
66
+ assert(msg.index(h+": "))
67
+ end
68
+ end
69
+
70
+ end
71
+
72
+
73
+
74
+
@@ -0,0 +1,85 @@
1
+
2
+ require 'driven_sip_test_case'
3
+
4
+ class TestControllerUsingHeaderOrder < DrivenSipTestCase
5
+
6
+ def setup
7
+ super
8
+ str = <<-EOF
9
+
10
+ require 'sip_test_driver_controller'
11
+
12
+ module SipInline
13
+ class UasHoController < SIP::SipTestDriverController
14
+
15
+ transaction_usage :use_transactions=>false
16
+ def on_info(session)
17
+ logd("Received INFO in #{name}")
18
+ session.local_tag = 6 #todo differentiate automatically on the same container somehow
19
+ r = session.create_response(200, "OK")
20
+ session.set_header_order([:from, :to, :via, :cseq, :call_id])
21
+ session.send(r)
22
+ session.invalidate
23
+ end
24
+
25
+ def order
26
+ 0
27
+ end
28
+ end
29
+
30
+ class UacHoController < SIP::SipTestDriverController
31
+ transaction_usage :use_transactions=>false
32
+ header_order [:to, :from, :call_id, :via, :cseq]
33
+ def start
34
+ r = Request.create_initial("info", "sip:nasir@sipper.com", :p_session_record=>"msg-debug")
35
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
36
+ u.send(r)
37
+ logd("Sent a new INFO from #{name}")
38
+ end
39
+
40
+ def on_success_res(session)
41
+ logd("Received response in #{name}")
42
+ session.invalidate
43
+ session.flow_completed_for("TestControllerUsingHeaderOrder")
44
+ end
45
+
46
+ end
47
+ end
48
+ EOF
49
+ define_controller_from(str)
50
+ set_controller("SipInline::UacHoController")
51
+ end
52
+
53
+
54
+ def test_header_order
55
+ self.expected_flow = ["> INFO","< 200"]
56
+ start_controller
57
+ verify_call_flow(:out)
58
+ self.expected_flow = ["< INFO", "> 200"]
59
+ verify_call_flow(:in)
60
+ msg = get_out_recording.get_recording[0] # first SIP message from UAC
61
+ idx = 0
62
+ [:to, :from, :call_id, :via, :cseq].each do |h|
63
+ new_idx = msg.index(SipperUtil.headerize(h.to_s)+": ")
64
+ if new_idx
65
+ assert(new_idx > idx)
66
+ idx = new_idx
67
+ end
68
+ end
69
+
70
+ msg = get_in_recording.get_recording[1] # second msg, i.e response from UAS
71
+ idx = 0
72
+ [:from, :to, :via, :cseq, :call_id].each do |h|
73
+ new_idx = msg.index(SipperUtil.headerize(h.to_s)+": ")
74
+ if new_idx
75
+ assert(new_idx > idx)
76
+ idx = new_idx
77
+ end
78
+ end
79
+
80
+ end
81
+
82
+ end
83
+
84
+
85
+
@@ -0,0 +1,64 @@
1
+ require 'driven_sip_test_case'
2
+
3
+ class TestControllerUsingIct < DrivenSipTestCase
4
+
5
+ def setup
6
+ super
7
+ str = <<-EOF
8
+ require 'sip_test_driver_controller'
9
+ module SipInline
10
+ class UasIctController < SIP::SipTestDriverController
11
+ transaction_usage :use_transactions=>false
12
+ def on_invite(session)
13
+ logd("Received INVITE in #{name}")
14
+ session.local_tag = 5 #todo differentiate automatically on the same container somehow
15
+ if session['ignored']
16
+ r = session.create_response(200, "OK")
17
+ session.send(r)
18
+ session.invalidate(true)
19
+ else
20
+ session['ignored'] = true
21
+ end
22
+ end
23
+
24
+ def order
25
+ 0
26
+ end
27
+ end
28
+
29
+ class UacIctController < SIP::SipTestDriverController
30
+
31
+ transaction_usage :use_transactions=>false, :use_ict=>true
32
+ transaction_timers :t1=>#{@grty*2} # just want at least one retransmit
33
+
34
+ def start
35
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
36
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
37
+ u.send(r)
38
+ logd("Sent a new INVITE from #{name}")
39
+ end
40
+
41
+ def on_success_res(session)
42
+ logd("Received response in #{name}")
43
+ session.invalidate(true)
44
+ session.flow_completed_for("TestControllerUsingIct")
45
+ end
46
+
47
+ end
48
+ end
49
+ EOF
50
+ define_controller_from(str)
51
+ set_controller("SipInline::UacIctController")
52
+ end
53
+
54
+
55
+ def test_ict_controllers
56
+ self.expected_flow = ["> INVITE {1,}", "< 200 {1,}"]
57
+ start_controller
58
+ verify_call_flow(:out)
59
+ self.expected_flow = ["< INVITE {2,2}", "> 200"] # at least one retrans
60
+ verify_call_flow(:in)
61
+ end
62
+
63
+ end
64
+
@@ -0,0 +1,72 @@
1
+ require 'driven_sip_test_case'
2
+
3
+ class TestControllerUsingIctWithNonSuccess < DrivenSipTestCase
4
+
5
+ def setup
6
+ super
7
+ str = <<-EOF
8
+ require 'sip_test_driver_controller'
9
+
10
+ module SipInline
11
+
12
+ class UasIctControllerFailure < SIP::SipTestDriverController
13
+
14
+ def on_invite(session)
15
+ logd("Received INVITE in #{name}")
16
+ session.local_tag = 5 #todo differentiate automatically on the same container somehow
17
+ r = session.create_response(404, "Not Found")
18
+ session.send(r)
19
+ end
20
+
21
+ def on_ack(session)
22
+ logd("Received ACK in #{name}")
23
+ session.invalidate
24
+ session.flow_completed_for("TestControllerUsingIctWithNonSuccess")
25
+ end
26
+
27
+ def order
28
+ 0
29
+ end
30
+ end
31
+
32
+ class UacIctControllerFailure < SIP::SipTestDriverController
33
+
34
+ transaction_usage :use_transactions=>false, :use_ict=>true
35
+
36
+ def start
37
+ r = Request.create_initial("invite", "sip:nasir@sipper.com", :p_session_record=>"msg-info")
38
+ u = create_udp_session(SipperConfigurator[:LocalSipperIP], SipperConfigurator[:LocalTestPort])
39
+ u.send(r)
40
+ logd("Sent a new INVITE from #{name}")
41
+ end
42
+
43
+ def on_failure_res(session)
44
+ logd("Received response in #{name}")
45
+ begin
46
+ session.create_and_send_ack
47
+ rescue RuntimeError
48
+ session.do_record("Exception in sending ACK to non 2xx from controller")
49
+ end
50
+ session.invalidate
51
+ end
52
+
53
+ end
54
+ end
55
+ EOF
56
+ define_controller_from(str)
57
+ set_controller("SipInline::UacIctControllerFailure")
58
+ end
59
+
60
+
61
+ def test_ict_controllers
62
+ orig = SipperConfigurator[:ProtocolCompliance]
63
+ SipperConfigurator[:ProtocolCompliance] = 'strict'
64
+ self.expected_flow = ["> INVITE", "< 404", "> ACK", "! Exception_in_sending_ACK_to_non_2xx_from_controller"] # as ACK is sent by Txn
65
+ start_controller
66
+ verify_call_flow(:out)
67
+ self.expected_flow = ["< INVITE", "> 404", "< ACK"]
68
+ verify_call_flow(:in)
69
+ SipperConfigurator[:ProtocolCompliance] = orig
70
+ end
71
+
72
+ end
@@ -0,0 +1,24 @@
1
+ require 'driven_sip_test_case'
2
+
3
+ class TestControllerUsingIctWithTcbh < DrivenSipTestCase
4
+
5
+ def setup
6
+ SipperConfigurator[:ControllerPath] = File.join(SipperConfigurator[:SipperBasePath], "sipper_test", "test_controllers", "ict_tcbh")
7
+ super
8
+ end
9
+
10
+
11
+ def test_ict_controllers
12
+ self.expected_flow = ["> INVITE", "< 200", "> INFO"]
13
+ start_named_controller("SipIct::UacIctTcbhController")
14
+ verify_call_flow(:out)
15
+ self.expected_flow = ["< INVITE", "> 200", "< INFO"]
16
+ verify_call_flow(:in)
17
+
18
+ record_in = get_in_recording(0)
19
+ assert_header_value_in_recording_equals(record_in.get_recording[0], :test_header, "Sipper")
20
+ end
21
+
22
+ end
23
+
24
+