adhearsion 1.2.6 → 2.0.0.alpha1

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 (236) hide show
  1. data/.gitignore +17 -10
  2. data/CHANGELOG.md +273 -0
  3. data/Gemfile +1 -1
  4. data/Guardfile +17 -0
  5. data/README.markdown +61 -9
  6. data/Rakefile +16 -48
  7. data/adhearsion.gemspec +21 -7
  8. data/bin/ahn +3 -1
  9. data/cucumber.yml +4 -0
  10. data/features/app_generator.feature +42 -0
  11. data/features/cli.feature +108 -0
  12. data/features/step_definitions/app_generator_steps.rb +6 -0
  13. data/features/step_definitions/cli_steps.rb +74 -0
  14. data/features/support/aruba_helper.rb +22 -0
  15. data/features/support/env.rb +37 -0
  16. data/features/support/utils.rb +8 -0
  17. data/lib/adhearsion.rb +85 -41
  18. data/lib/adhearsion/call.rb +176 -0
  19. data/lib/adhearsion/call_controller.rb +134 -0
  20. data/lib/adhearsion/call_controller/dial.rb +70 -0
  21. data/lib/adhearsion/call_controller/input.rb +173 -0
  22. data/lib/adhearsion/call_controller/menu.rb +124 -0
  23. data/lib/adhearsion/call_controller/output.rb +267 -0
  24. data/lib/adhearsion/call_controller/record.rb +42 -0
  25. data/lib/adhearsion/call_controller/utility.rb +60 -0
  26. data/lib/adhearsion/calls.rb +81 -0
  27. data/lib/adhearsion/cli.rb +1 -3
  28. data/lib/adhearsion/cli_commands.rb +142 -0
  29. data/lib/adhearsion/configuration.rb +149 -0
  30. data/lib/adhearsion/console.rb +19 -8
  31. data/lib/adhearsion/dialplan_controller.rb +9 -0
  32. data/lib/adhearsion/events.rb +84 -0
  33. data/lib/adhearsion/foundation/all.rb +0 -7
  34. data/lib/adhearsion/foundation/custom_daemonizer.rb +4 -6
  35. data/lib/adhearsion/foundation/exception_handler.rb +9 -0
  36. data/lib/adhearsion/foundation/object.rb +26 -8
  37. data/lib/adhearsion/foundation/synchronized_hash.rb +3 -6
  38. data/lib/adhearsion/foundation/thread_safety.rb +17 -1
  39. data/lib/adhearsion/generators/app/app_generator.rb +4 -13
  40. data/lib/adhearsion/generators/app/templates/Gemfile +10 -5
  41. data/lib/adhearsion/generators/app/templates/Procfile +1 -0
  42. data/lib/adhearsion/generators/app/templates/README.md +28 -0
  43. data/lib/adhearsion/generators/app/templates/config/adhearsion.rb +41 -0
  44. data/lib/adhearsion/generators/app/templates/{components/simon_game → lib}/simon_game.rb +6 -18
  45. data/lib/adhearsion/generators/app/templates/script/ahn +2 -2
  46. data/lib/adhearsion/initializer.rb +151 -293
  47. data/lib/adhearsion/initializer/logging.rb +33 -0
  48. data/lib/adhearsion/logging.rb +65 -69
  49. data/lib/adhearsion/menu_dsl.rb +15 -0
  50. data/lib/adhearsion/menu_dsl/calculated_match.rb +39 -0
  51. data/lib/adhearsion/menu_dsl/calculated_match_collection.rb +41 -0
  52. data/lib/adhearsion/menu_dsl/fixnum_match_calculator.rb +18 -0
  53. data/lib/adhearsion/menu_dsl/match_calculator.rb +36 -0
  54. data/lib/adhearsion/{voip/menu_state_machine/menu_class.rb → menu_dsl/menu.rb} +38 -40
  55. data/lib/adhearsion/menu_dsl/menu_builder.rb +69 -0
  56. data/lib/adhearsion/menu_dsl/range_match_calculator.rb +55 -0
  57. data/lib/adhearsion/menu_dsl/string_match_calculator.rb +21 -0
  58. data/lib/adhearsion/outbound_call.rb +64 -0
  59. data/lib/adhearsion/plugin.rb +319 -0
  60. data/lib/adhearsion/plugin/collection.rb +19 -0
  61. data/lib/adhearsion/plugin/initializer.rb +37 -0
  62. data/lib/adhearsion/plugin/methods_container.rb +6 -0
  63. data/lib/adhearsion/process.rb +94 -0
  64. data/lib/adhearsion/punchblock_plugin.rb +29 -0
  65. data/lib/adhearsion/punchblock_plugin/initializer.rb +137 -0
  66. data/lib/adhearsion/router.rb +30 -0
  67. data/lib/adhearsion/router/route.rb +42 -0
  68. data/lib/adhearsion/script_ahn_loader.rb +2 -2
  69. data/lib/adhearsion/tasks.rb +14 -9
  70. data/lib/adhearsion/tasks/configuration.rb +26 -0
  71. data/lib/adhearsion/tasks/plugins.rb +17 -0
  72. data/lib/adhearsion/version.rb +8 -14
  73. data/spec/adhearsion/call_controller/dial_spec.rb +138 -0
  74. data/spec/adhearsion/call_controller/input_spec.rb +278 -0
  75. data/spec/adhearsion/call_controller/menu_spec.rb +120 -0
  76. data/spec/adhearsion/call_controller/output_spec.rb +466 -0
  77. data/spec/adhearsion/call_controller/record_spec.rb +125 -0
  78. data/spec/adhearsion/call_controller_spec.rb +395 -0
  79. data/spec/adhearsion/call_spec.rb +438 -0
  80. data/spec/adhearsion/calls_spec.rb +47 -0
  81. data/spec/adhearsion/configuration_spec.rb +308 -0
  82. data/spec/adhearsion/dialplan_controller_spec.rb +26 -0
  83. data/spec/adhearsion/events_spec.rb +112 -0
  84. data/spec/adhearsion/initializer/logging_spec.rb +58 -0
  85. data/spec/adhearsion/initializer_spec.rb +209 -122
  86. data/spec/adhearsion/logging_spec.rb +58 -47
  87. data/spec/adhearsion/menu_dsl/calculated_match_collection_spec.rb +56 -0
  88. data/spec/adhearsion/menu_dsl/calculated_match_spec.rb +57 -0
  89. data/spec/adhearsion/menu_dsl/fixnum_match_calculator_spec.rb +33 -0
  90. data/spec/adhearsion/menu_dsl/match_calculator_spec.rb +13 -0
  91. data/spec/adhearsion/menu_dsl/menu_builder_spec.rb +118 -0
  92. data/spec/adhearsion/menu_dsl/menu_spec.rb +210 -0
  93. data/spec/adhearsion/menu_dsl/range_match_calculator_spec.rb +28 -0
  94. data/spec/adhearsion/menu_dsl/string_match_calculator_spec.rb +36 -0
  95. data/spec/adhearsion/menu_dsl_spec.rb +12 -0
  96. data/spec/adhearsion/outbound_call_spec.rb +174 -0
  97. data/spec/adhearsion/plugin_spec.rb +489 -0
  98. data/spec/adhearsion/process_spec.rb +34 -0
  99. data/spec/adhearsion/punchblock_plugin/initializer_spec.rb +294 -0
  100. data/spec/adhearsion/router/route_spec.rb +99 -0
  101. data/spec/adhearsion/router_spec.rb +106 -0
  102. data/spec/adhearsion_spec.rb +46 -0
  103. data/spec/spec_helper.rb +14 -14
  104. data/spec/support/call_controller_test_helpers.rb +48 -0
  105. data/spec/support/initializer_stubs.rb +8 -13
  106. data/spec/support/punchblock_mocks.rb +6 -0
  107. metadata +255 -253
  108. data/CHANGELOG +0 -174
  109. data/bin/ahnctl +0 -68
  110. data/bin/jahn +0 -43
  111. data/examples/asterisk_manager_interface/standalone.rb +0 -51
  112. data/lib/adhearsion/commands.rb +0 -302
  113. data/lib/adhearsion/component_manager.rb +0 -278
  114. data/lib/adhearsion/component_manager/component_tester.rb +0 -54
  115. data/lib/adhearsion/component_manager/spec_framework.rb +0 -18
  116. data/lib/adhearsion/events_support.rb +0 -65
  117. data/lib/adhearsion/foundation/blank_slate.rb +0 -3
  118. data/lib/adhearsion/foundation/event_socket.rb +0 -205
  119. data/lib/adhearsion/foundation/future_resource.rb +0 -36
  120. data/lib/adhearsion/foundation/metaprogramming.rb +0 -17
  121. data/lib/adhearsion/foundation/numeric.rb +0 -13
  122. data/lib/adhearsion/foundation/pseudo_guid.rb +0 -10
  123. data/lib/adhearsion/foundation/relationship_properties.rb +0 -42
  124. data/lib/adhearsion/foundation/string.rb +0 -26
  125. data/lib/adhearsion/generators/app/templates/.ahnrc +0 -34
  126. data/lib/adhearsion/generators/app/templates/README +0 -8
  127. data/lib/adhearsion/generators/app/templates/components/ami_remote/ami_remote.rb +0 -15
  128. data/lib/adhearsion/generators/app/templates/components/disabled/HOW_TO_ENABLE +0 -7
  129. data/lib/adhearsion/generators/app/templates/components/disabled/stomp_gateway/README.markdown +0 -47
  130. data/lib/adhearsion/generators/app/templates/components/disabled/stomp_gateway/stomp_gateway.rb +0 -34
  131. data/lib/adhearsion/generators/app/templates/components/disabled/stomp_gateway/stomp_gateway.yml +0 -12
  132. data/lib/adhearsion/generators/app/templates/components/disabled/xmpp_gateway/README.markdown +0 -3
  133. data/lib/adhearsion/generators/app/templates/components/disabled/xmpp_gateway/xmpp_gateway.rb +0 -11
  134. data/lib/adhearsion/generators/app/templates/components/disabled/xmpp_gateway/xmpp_gateway.yml +0 -0
  135. data/lib/adhearsion/generators/app/templates/config/startup.rb +0 -81
  136. data/lib/adhearsion/generators/app/templates/dialplan.rb +0 -3
  137. data/lib/adhearsion/generators/app/templates/events.rb +0 -33
  138. data/lib/adhearsion/host_definitions.rb +0 -67
  139. data/lib/adhearsion/initializer/asterisk.rb +0 -86
  140. data/lib/adhearsion/initializer/configuration.rb +0 -324
  141. data/lib/adhearsion/initializer/database.rb +0 -60
  142. data/lib/adhearsion/initializer/drb.rb +0 -31
  143. data/lib/adhearsion/initializer/freeswitch.rb +0 -22
  144. data/lib/adhearsion/initializer/ldap.rb +0 -57
  145. data/lib/adhearsion/initializer/rails.rb +0 -41
  146. data/lib/adhearsion/initializer/xmpp.rb +0 -42
  147. data/lib/adhearsion/tasks/components.rb +0 -32
  148. data/lib/adhearsion/tasks/database.rb +0 -5
  149. data/lib/adhearsion/tasks/deprecations.rb +0 -59
  150. data/lib/adhearsion/tasks/generating.rb +0 -20
  151. data/lib/adhearsion/tasks/lint.rb +0 -4
  152. data/lib/adhearsion/voip/asterisk.rb +0 -4
  153. data/lib/adhearsion/voip/asterisk/agi_server.rb +0 -121
  154. data/lib/adhearsion/voip/asterisk/commands.rb +0 -1966
  155. data/lib/adhearsion/voip/asterisk/config_generators/agents.conf.rb +0 -140
  156. data/lib/adhearsion/voip/asterisk/config_generators/config_generator.rb +0 -102
  157. data/lib/adhearsion/voip/asterisk/config_generators/queues.conf.rb +0 -250
  158. data/lib/adhearsion/voip/asterisk/config_generators/voicemail.conf.rb +0 -240
  159. data/lib/adhearsion/voip/asterisk/config_manager.rb +0 -64
  160. data/lib/adhearsion/voip/asterisk/manager_interface.rb +0 -697
  161. data/lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rb +0 -1681
  162. data/lib/adhearsion/voip/asterisk/manager_interface/ami_lexer.rl.rb +0 -341
  163. data/lib/adhearsion/voip/asterisk/manager_interface/ami_messages.rb +0 -78
  164. data/lib/adhearsion/voip/asterisk/manager_interface/ami_protocol_lexer_machine.rl +0 -87
  165. data/lib/adhearsion/voip/asterisk/special_dial_plan_managers.rb +0 -80
  166. data/lib/adhearsion/voip/call.rb +0 -521
  167. data/lib/adhearsion/voip/call_routing.rb +0 -64
  168. data/lib/adhearsion/voip/commands.rb +0 -17
  169. data/lib/adhearsion/voip/constants.rb +0 -39
  170. data/lib/adhearsion/voip/conveniences.rb +0 -18
  171. data/lib/adhearsion/voip/dial_plan.rb +0 -252
  172. data/lib/adhearsion/voip/dsl/dialing_dsl.rb +0 -151
  173. data/lib/adhearsion/voip/dsl/dialing_dsl/dialing_dsl_monkey_patches.rb +0 -37
  174. data/lib/adhearsion/voip/dsl/dialplan/control_passing_exception.rb +0 -27
  175. data/lib/adhearsion/voip/dsl/dialplan/dispatcher.rb +0 -124
  176. data/lib/adhearsion/voip/dsl/dialplan/parser.rb +0 -69
  177. data/lib/adhearsion/voip/dsl/dialplan/thread_mixin.rb +0 -16
  178. data/lib/adhearsion/voip/dsl/numerical_string.rb +0 -128
  179. data/lib/adhearsion/voip/freeswitch/basic_connection_manager.rb +0 -48
  180. data/lib/adhearsion/voip/freeswitch/event_handler.rb +0 -58
  181. data/lib/adhearsion/voip/freeswitch/freeswitch_dialplan_command_factory.rb +0 -129
  182. data/lib/adhearsion/voip/freeswitch/inbound_connection_manager.rb +0 -38
  183. data/lib/adhearsion/voip/freeswitch/oes_server.rb +0 -195
  184. data/lib/adhearsion/voip/menu_state_machine/calculated_match.rb +0 -80
  185. data/lib/adhearsion/voip/menu_state_machine/matchers.rb +0 -123
  186. data/lib/adhearsion/voip/menu_state_machine/menu_builder.rb +0 -57
  187. data/lib/adhearsion/xmpp/connection.rb +0 -61
  188. data/lib/theatre.rb +0 -147
  189. data/lib/theatre/README.markdown +0 -64
  190. data/lib/theatre/callback_definition_loader.rb +0 -86
  191. data/lib/theatre/guid.rb +0 -23
  192. data/lib/theatre/invocation.rb +0 -131
  193. data/lib/theatre/namespace_manager.rb +0 -153
  194. data/lib/theatre/version.rb +0 -2
  195. data/spec/adhearsion/cli_spec.rb +0 -306
  196. data/spec/adhearsion/component_manager_spec.rb +0 -292
  197. data/spec/adhearsion/constants_spec.rb +0 -8
  198. data/spec/adhearsion/drb_spec.rb +0 -65
  199. data/spec/adhearsion/fixtures/dialplan.rb +0 -3
  200. data/spec/adhearsion/foundation/event_socket_spec.rb +0 -168
  201. data/spec/adhearsion/host_definitions_spec.rb +0 -79
  202. data/spec/adhearsion/initializer/configuration_spec.rb +0 -291
  203. data/spec/adhearsion/initializer/loading_spec.rb +0 -154
  204. data/spec/adhearsion/initializer/paths_spec.rb +0 -74
  205. data/spec/adhearsion/relationship_properties_spec.rb +0 -54
  206. data/spec/adhearsion/voip/asterisk/agi_server_spec.rb +0 -473
  207. data/spec/adhearsion/voip/asterisk/ami/ami_spec.rb +0 -550
  208. data/spec/adhearsion/voip/asterisk/ami/lexer/ami_fixtures.yml +0 -30
  209. data/spec/adhearsion/voip/asterisk/ami/lexer/lexer_story +0 -291
  210. data/spec/adhearsion/voip/asterisk/ami/lexer/lexer_story.rb +0 -241
  211. data/spec/adhearsion/voip/asterisk/ami/lexer/story_helper.rb +0 -124
  212. data/spec/adhearsion/voip/asterisk/commands_spec.rb +0 -3241
  213. data/spec/adhearsion/voip/asterisk/config_file_generators/agents_spec.rb +0 -251
  214. data/spec/adhearsion/voip/asterisk/config_file_generators/queues_spec.rb +0 -323
  215. data/spec/adhearsion/voip/asterisk/config_file_generators/voicemail_spec.rb +0 -306
  216. data/spec/adhearsion/voip/asterisk/config_manager_spec.rb +0 -127
  217. data/spec/adhearsion/voip/asterisk/menu_command/calculated_match_spec.rb +0 -109
  218. data/spec/adhearsion/voip/asterisk/menu_command/matchers_spec.rb +0 -97
  219. data/spec/adhearsion/voip/call_routing_spec.rb +0 -125
  220. data/spec/adhearsion/voip/dialplan_manager_spec.rb +0 -468
  221. data/spec/adhearsion/voip/dsl/dialing_dsl_spec.rb +0 -270
  222. data/spec/adhearsion/voip/dsl/dispatcher_spec.rb +0 -82
  223. data/spec/adhearsion/voip/dsl/dispatcher_spec_helper.rb +0 -45
  224. data/spec/adhearsion/voip/dsl/parser_spec.rb +0 -69
  225. data/spec/adhearsion/voip/freeswitch/basic_connection_manager_spec.rb +0 -39
  226. data/spec/adhearsion/voip/freeswitch/inbound_connection_manager_spec.rb +0 -39
  227. data/spec/adhearsion/voip/freeswitch/oes_server_spec.rb +0 -9
  228. data/spec/adhearsion/voip/numerical_string_spec.rb +0 -61
  229. data/spec/adhearsion/voip/phone_number_spec.rb +0 -45
  230. data/spec/support/the_following_code.rb +0 -3
  231. data/spec/theatre/dsl_examples/simple_before_call.rb +0 -7
  232. data/spec/theatre/dsl_spec.rb +0 -69
  233. data/spec/theatre/invocation_spec.rb +0 -182
  234. data/spec/theatre/namespace_spec.rb +0 -125
  235. data/spec/theatre/spec_helper_spec.rb +0 -28
  236. data/spec/theatre/theatre_class_spec.rb +0 -148
@@ -1,79 +0,0 @@
1
- require 'spec_helper'
2
- require 'adhearsion/host_definitions'
3
-
4
- describe 'HostDefinition' do
5
-
6
- after :each do
7
- Adhearsion::HostDefinition.clear_definitions!
8
- end
9
-
10
- it 'when loading from a YAML array, it should pass each nested Hash to the constructor' do
11
- hosts = [
12
- {:host => "hostname1", :username => "user", :password => "password"},
13
- {:host => "hostname2", :username => "user", :password => "password"},
14
- {:host => "hostname3", :username => "user", :password => "password"}
15
- ]
16
- flexmock(Adhearsion::HostDefinition).should_receive(:new).once.with(hosts[0])
17
- flexmock(Adhearsion::HostDefinition).should_receive(:new).once.with(hosts[1])
18
- flexmock(Adhearsion::HostDefinition).should_receive(:new).once.with(hosts[2])
19
- Adhearsion::HostDefinition.import_from_yaml hosts.to_yaml
20
- end
21
-
22
- it 'should set the @name property to a new UUID when no name is given' do
23
- definition = {:host => "hostname", :username => "user", :password => "pass"}
24
- Adhearsion::HostDefinition.new(definition).name.should =~ /^[a-z0-9]{8}-([a-z0-9]{4}-){3}[a-z0-9]{12}$/i
25
- end
26
-
27
- it 'when loading from YAML keys, it should pass each nested Hash to the constructor with the key as :name' do
28
- definitions = { :pbx1 => {},
29
- :pbx2 => {},
30
- :pbx3 => {} }
31
- definitions.each_pair do |key,value|
32
- flexmock(Adhearsion::HostDefinition).should_receive(:new).once.with(value.merge(:name => key))
33
- end
34
- Adhearsion::HostDefinition.import_from_data_structure(definitions)
35
- end
36
-
37
- it 'should have an Array class variable named definitions' do
38
- Adhearsion::HostDefinition.definitions.should be_a_kind_of Array
39
- end
40
-
41
- it 'should add each HostDefinition to a class variable named @@definitions when instantiated' do
42
- Adhearsion::HostDefinition.definitions.size.should be 0
43
- Adhearsion::HostDefinition.new :name => "foobar", :host => "hostname", :username => "user", :password => "password"
44
- Adhearsion::HostDefinition.definitions.size.should be 1
45
- Adhearsion::HostDefinition.clear_definitions!
46
- Adhearsion::HostDefinition.definitions.size.should be 0
47
- end
48
-
49
- it 'should raise a HostDefinitionException when a password and a key are given' do
50
- the_following_code {
51
- Adhearsion::HostDefinition.new(:username => "user", :host => "foobar", :key => "doesntmatter", :password => "pass")
52
- }.should raise_error Adhearsion::HostDefinition::HostDefinitionException
53
- end
54
-
55
- it 'should raise a HostDefinitionException when no password or key is given' do
56
- the_following_code {
57
- Adhearsion::HostDefinition.new(:username => "user", :host => "foobar")
58
- }.should raise_error Adhearsion::HostDefinition::HostDefinitionException
59
- end
60
-
61
- it 'should raise a HostDefinitionException when no username is given' do
62
- the_following_code {
63
- Adhearsion::HostDefinition.new(:host => "host", :password => "password")
64
- }.should raise_error Adhearsion::HostDefinition::HostDefinitionException
65
- end
66
-
67
- it 'should raise a HostDefinitionException when no "host" key is given' do
68
- the_following_code {
69
- Adhearsion::HostDefinition.new(:username => "foobar", :password => "password")
70
- }.should raise_error Adhearsion::HostDefinition::HostDefinitionException
71
- end
72
-
73
- it 'should raise a HostDefinitionException when an unrecognized key is given' do
74
- the_following_code {
75
- Adhearsion::HostDefinition.new(:username => "foobar", :password => "password", :host => "blah", :thiskeyisnotrecognized => nil)
76
- }.should raise_error Adhearsion::HostDefinition::HostDefinitionException
77
- end
78
-
79
- end
@@ -1,291 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module ConfigurationTestHelper
4
- def default_config(&block)
5
- Adhearsion::Configuration.new do |config|
6
- config.enable_asterisk
7
- yield config if block_given?
8
- end
9
- end
10
- end
11
-
12
- describe "Configuration defaults" do
13
- include ConfigurationTestHelper
14
- attr_reader :config
15
-
16
- before(:each) do
17
- @config = default_config
18
- end
19
-
20
- it "incoming calls are answered by default" do
21
- config.automatically_answer_incoming_calls.should be true
22
- end
23
-
24
- it "calls are ended when hung up" do
25
- config.end_call_on_hangup.should be true
26
- end
27
-
28
- it "if an error occurs, a call is hungup" do
29
- config.end_call_on_error.should be true
30
- end
31
-
32
- it "asterisk is enabled by default" do
33
- config.asterisk_enabled?.should be true
34
- end
35
-
36
- it "default asterisk configuration is available" do
37
- config.asterisk.kind_of?(Adhearsion::Configuration::AsteriskConfiguration).should be true
38
- end
39
-
40
- it "database access is NOT enabled by default" do
41
- config.database_enabled?.should be false
42
- end
43
-
44
- it "ldap access is NOT enabled by default" do
45
- config.ldap_enabled?.should be false
46
- end
47
-
48
- it "freeswith is NOT enabled by default" do
49
- config.freeswitch_enabled?.should be false
50
- end
51
-
52
- it "AMI is NOT enabled by default" do
53
- config.asterisk.ami_enabled?.should be false
54
- end
55
-
56
- it "Drb is NOT enabled by default" do
57
- config.drb_enabled?.should be false
58
- end
59
-
60
- it "XMPP is NOT enabled by default" do
61
- config.xmpp_enabled?.should be false
62
- end
63
- end
64
-
65
- describe "Asterisk AGI configuration defaults" do
66
- attr_reader :config
67
-
68
- before(:each) do
69
- @config = Adhearsion::Configuration::AsteriskConfiguration.new
70
- end
71
-
72
- it "asterisk configuration sets default listening port" do
73
- config.listening_port.should be Adhearsion::Configuration::AsteriskConfiguration.default_listening_port
74
- end
75
-
76
- it "asterisk configuration sets default listening host" do
77
- config.listening_host.should == Adhearsion::Configuration::AsteriskConfiguration.default_listening_host
78
- end
79
- end
80
-
81
- describe 'Logging configuration' do
82
-
83
- attr_reader :config
84
- before :each do
85
- @config = Adhearsion::Configuration.new
86
- end
87
-
88
- after :each do
89
- Adhearsion::Logging.logging_level = :fatal
90
- Adhearsion::Logging::AdhearsionLogger.outputters = [Log4r::Outputter.stdout]
91
- Adhearsion::Logging::AdhearsionLogger.formatters = [Log4r::DefaultFormatter]
92
- end
93
-
94
- it 'the logging level should translate from symbols into Log4r constants' do
95
- Adhearsion::Logging.logging_level.should_not be Log4r::WARN
96
- config.logging :level => :warn
97
- Adhearsion::Logging.logging_level.should be Log4r::WARN
98
- end
99
-
100
- it 'outputters should be settable' do
101
- Adhearsion::Logging::AdhearsionLogger.outputters.should == [Log4r::Outputter.stdout]
102
- config.logging :outputters => Log4r::Outputter.stderr
103
- Adhearsion::Logging::AdhearsionLogger.outputters.should == [Log4r::Outputter.stderr]
104
- end
105
-
106
- it 'formatters should be settable' do
107
- Adhearsion::Logging::AdhearsionLogger.formatters.map(&:class).should == [Log4r::DefaultFormatter]
108
- config.logging :formatters => Log4r::ObjectFormatter
109
- Adhearsion::Logging::AdhearsionLogger.formatters.map(&:class).should == [Log4r::ObjectFormatter]
110
- end
111
-
112
- it 'a global formatter should be settable' do
113
- Adhearsion::Logging::AdhearsionLogger.outputters << Log4r::Outputter.stdout
114
- Adhearsion::Logging::AdhearsionLogger.formatters.map(&:class).should == [Log4r::DefaultFormatter, Log4r::DefaultFormatter]
115
- config.logging :formatter => Log4r::ObjectFormatter
116
- Adhearsion::Logging::AdhearsionLogger.formatters.map(&:class).should == [Log4r::ObjectFormatter, Log4r::ObjectFormatter]
117
- end
118
-
119
- end
120
-
121
- describe "AMI configuration defaults" do
122
- attr_reader :config
123
-
124
- before(:each) do
125
- @config = Adhearsion::Configuration::AsteriskConfiguration::AMIConfiguration.new
126
- end
127
-
128
- it "ami configuration sets default port" do
129
- config.port.should be Adhearsion::Configuration::AsteriskConfiguration::AMIConfiguration.default_port
130
- end
131
-
132
- it "ami allows you to configure a username and a password, both of which default to nil" do
133
- config.username.should be nil
134
- config.password.should be nil
135
- end
136
- end
137
-
138
- describe "Rails configuration defaults" do
139
- it "should require the path to the Rails app in the constructor" do
140
- config = Adhearsion::Configuration::RailsConfiguration.new :path => "path here doesn't matter right now", :env => :development
141
- config.rails_root.should_not be nil
142
- end
143
-
144
- it "should expand_path() the first constructor parameter" do
145
- rails_root = "gui"
146
- flexmock(File).should_receive(:expand_path).once.with(rails_root)
147
- config = Adhearsion::Configuration::RailsConfiguration.new :path => rails_root, :env => :development
148
- end
149
- end
150
-
151
- describe "Database configuration defaults" do
152
-
153
- before(:each) do
154
- Adhearsion.send(:remove_const, :AHN_CONFIG) if Adhearsion.const_defined?(:AHN_CONFIG)
155
- Adhearsion::Configuration.configure {}
156
- end
157
-
158
- it "should store the constructor's argument in connection_options()" do
159
- sample_options = { :adapter => "sqlite3", :dbfile => "foo.sqlite3" }
160
- config = Adhearsion::Configuration::DatabaseConfiguration.new(sample_options)
161
- config.connection_options.should be sample_options
162
- end
163
- it "should remove the :orm key from the connection options" do
164
- sample_options = { :orm => :active_record, :adapter => "mysql", :host => "::1",
165
- :user => "a", :pass => "b", :database => "ahn" }
166
- config = Adhearsion::Configuration::DatabaseConfiguration.new(sample_options.clone)
167
- config.orm.should be sample_options.delete(:orm)
168
- config.connection_options.should == sample_options
169
- end
170
- end
171
-
172
- describe "Freeswitch configuration defaults" do
173
- attr_reader :config
174
-
175
- before(:each) do
176
- @config = Adhearsion::Configuration::FreeswitchConfiguration.new
177
- end
178
-
179
- it "freeswitch configuration sets default listening port" do
180
- config.listening_port.should be Adhearsion::Configuration::FreeswitchConfiguration.default_listening_port
181
- end
182
-
183
- it "freeswitch configuration sets default listening host" do
184
- config.listening_host.should == Adhearsion::Configuration::FreeswitchConfiguration.default_listening_host
185
- end
186
- end
187
-
188
- describe "XMPP configuration defaults" do
189
- attr_reader :config
190
-
191
- it "xmpp configuration sets default port when server is set, but no port" do
192
- config = Adhearsion::Configuration::XMPPConfiguration.new :jid => "test@example.com", :password => "somepassword", :server => "example.com"
193
- config.port.should be Adhearsion::Configuration::XMPPConfiguration.default_port
194
- end
195
-
196
- it "should raise when port is specified, but no server" do
197
- begin
198
- config = Adhearsion::Configuration::XMPPConfiguration.new :jid => "test@example.com", :password => "somepassword", :port => "5223"
199
- rescue ArgumentError => e
200
- e.message.should == "Must supply a :server argument as well as :port to the XMPP initializer!"
201
- end
202
- end
203
- end
204
-
205
- describe "Configuration scenarios" do
206
- include ConfigurationTestHelper
207
-
208
- it "enabling AMI using all its defaults" do
209
- config = enable_ami
210
-
211
- config.asterisk.ami_enabled?.should be true
212
- config.asterisk.ami.should be_a_kind_of Adhearsion::Configuration::AsteriskConfiguration::AMIConfiguration
213
- end
214
-
215
- it "enabling AMI with custom configuration overrides the defaults" do
216
- overridden_port = 911
217
- config = enable_ami :port => overridden_port
218
- config.asterisk.ami.port.should be overridden_port
219
- end
220
-
221
- it "enabling Drb without any configuration" do
222
- config = enable_drb
223
- config.drb.should_not be nil
224
- config.drb.should be_a_kind_of Adhearsion::Configuration::DrbConfiguration
225
- end
226
-
227
- it "enabling Drb with a port specified sets the port" do
228
- target_port = 911
229
- config = enable_drb :port => target_port
230
- config.drb.port.should == target_port
231
- end
232
-
233
- private
234
- def enable_ami(*overrides)
235
- default_config do |config|
236
- config.asterisk.enable_ami(*overrides)
237
- end
238
- end
239
-
240
- def enable_drb(*overrides)
241
- default_config do |config|
242
- config.enable_drb *overrides
243
- end
244
- end
245
- end
246
-
247
- describe "AHN_CONFIG" do
248
- before(:each) do
249
- Adhearsion.send(:remove_const, :AHN_CONFIG) if Adhearsion.const_defined?(:AHN_CONFIG)
250
- end
251
-
252
- it "Running configure sets configuration to Adhearsion::AHN_CONFIG" do
253
- Adhearsion.const_defined?(:AHN_CONFIG).should be false
254
- Adhearsion::Configuration.configure do |config|
255
- # Nothing needs to happen here
256
- end
257
-
258
- Adhearsion.const_defined?(:AHN_CONFIG).should be true
259
- Adhearsion::AHN_CONFIG.should be_a_kind_of(Adhearsion::Configuration)
260
- end
261
- end
262
-
263
- describe "DRb configuration" do
264
- it "should not add any ACL rules when :raw_acl is passed in" do
265
- config = Adhearsion::Configuration::DrbConfiguration.new :raw_acl => :this_is_an_acl
266
- config.acl.should be :this_is_an_acl
267
- end
268
-
269
- it "should, by default, allow only localhost connections" do
270
- config = Adhearsion::Configuration::DrbConfiguration.new
271
- config.acl.should == %w[allow 127.0.0.1]
272
- end
273
-
274
- it "should add ACL 'deny' rules before 'allow' rules" do
275
- config = Adhearsion::Configuration::DrbConfiguration.new :allow => %w[1.1.1.1 2.2.2.2],
276
- :deny => %w[9.9.9.9]
277
- config.acl.should == %w[deny 9.9.9.9 allow 1.1.1.1 allow 2.2.2.2]
278
- end
279
-
280
- it "should allow both an Array and a String to be passed as an allow/deny ACL rule" do
281
- config = Adhearsion::Configuration::DrbConfiguration.new :allow => "1.1.1.1", :deny => "9.9.9.9"
282
- config.acl.should == %w[deny 9.9.9.9 allow 1.1.1.1]
283
- end
284
-
285
- it "should have a default host and port" do
286
- config = Adhearsion::Configuration::DrbConfiguration.new
287
- config.host.should_not be nil
288
- config.port.should_not be nil
289
- end
290
-
291
- end
@@ -1,154 +0,0 @@
1
- require 'spec_helper'
2
- require 'adhearsion/initializer/database'
3
- require 'adhearsion/initializer/asterisk'
4
- require 'adhearsion/initializer/rails'
5
- require 'adhearsion/initializer/xmpp'
6
- require 'active_record'
7
-
8
- module DatabaseInitializationTestHelper
9
-
10
- def start_database_initializer
11
- start_database_initializer_with_options :adapter => "sqlite3", :dbfile => "foobar.sqlite3"
12
- end
13
-
14
- def start_database_initializer_with_options(options)
15
- Adhearsion::Configuration.configure { |config| config.enable_database(options) }
16
- Adhearsion::Initializer::DatabaseInitializer.start
17
- end
18
-
19
- def expect_establish_connection
20
- flexmock(ActiveRecord::Base).should_receive :establish_connection
21
- end
22
-
23
- def tempfile_with_contents(contents)
24
- Tempfile.new("bogus_model").tap do |file|
25
- file.puts contents
26
- file.flush
27
- end
28
- end
29
-
30
- def sample_user_model
31
- <<-CODE
32
- class User < ActiveRecord::Base
33
- validates_uniqueness_of :name
34
- end
35
- CODE
36
- end
37
- end
38
-
39
- module AsteriskInitializerTestHelper
40
- def initialize_asterisk_with_defaults
41
- initialize_asterisk_with_options Hash.new
42
- end
43
- def initialize_asterisk_with_options(options)
44
- flexmock(Adhearsion::Initializer::AsteriskInitializer).should_receive(:join_server_thread_after_initialized)
45
- Adhearsion::Configuration.configure { |config| config.enable_asterisk(options) }
46
- Adhearsion::Initializer::AsteriskInitializer.start
47
- end
48
- end
49
-
50
- module RailsInitializerTestHelper
51
-
52
- def initialize_rails_with_options(options)
53
- rails_options = flexmock "Rails options mock", options
54
- flexstub(Adhearsion::AHN_CONFIG).should_receive(:rails).once.and_return(rails_options)
55
- Adhearsion::Initializer::RailsInitializer.start
56
- end
57
-
58
- def stub_file_checking_methods!
59
- flexstub(File).should_receive(:directory?).and_return true
60
- flexstub(File).should_receive(:exists?).and_return true
61
- end
62
-
63
- def stub_before_call_hook!
64
- flexstub(Adhearsion::Events.framework_theatre).should_receive(:register_namespace_name).with([:asterisk, :before_call]).and_return
65
- end
66
-
67
- end
68
-
69
- describe "The database initializer" do
70
-
71
- include DatabaseInitializationTestHelper
72
-
73
- after :each do
74
- Adhearsion.send(:remove_const, :AHN_CONFIG) if Adhearsion.const_defined? :AHN_CONFIG
75
- end
76
-
77
- it "starts a connection through ActiveRecord" do
78
- connection_options = { :adapter => "sqlite3",
79
- :dbfile => "foo.sqlite3" }
80
- flexmock(Adhearsion::Initializer::DatabaseInitializer).should_receive(:require_models).once
81
- expect_establish_connection.with(connection_options)
82
-
83
- start_database_initializer_with_options connection_options
84
- end
85
-
86
- it "should make any required models available in the main namespace" do
87
- bogus_model = tempfile_with_contents sample_user_model
88
- flexmock(Adhearsion::Configuration).new_instances.should_receive(:files_from_setting).once.
89
- with("paths", "models").and_return [bogus_model.path]
90
- expect_establish_connection
91
- start_database_initializer
92
- User.superclass.should be ActiveRecord::Base
93
- end
94
-
95
- end
96
-
97
- describe "The Asterisk initializer" do
98
-
99
- include AsteriskInitializerTestHelper
100
-
101
- it "starts the AGI server" do
102
- initialize_asterisk_with_defaults
103
- flexmock(Adhearsion::VoIP::Asterisk::AGI::Server).new_instances.should_receive(:start).once
104
- end
105
-
106
- it "starts the AGI server with any overridden settings" do
107
- overrides = {:host => "127.0.0.1", :port => 7788}
108
- config_overrides = {:listening_host => overrides[:host], :listening_port => overrides[:port]}
109
- initialize_asterisk_with_options config_overrides
110
- flexmock(Adhearsion::VoIP::Asterisk::AGI::Server).new_instances.should_receive(:start).once.with(overrides)
111
- end
112
-
113
- end
114
-
115
- describe "The Rails initializer" do
116
-
117
- include RailsInitializerTestHelper
118
-
119
- it "should load the config/environment.rb file within the rails_root path" do
120
- rails_root = "/path/to/rails/app"
121
- environment_rb = rails_root + '/config/environment.rb'
122
- flexmock(Adhearsion::Initializer::RailsInitializer).should_receive(:require).once.with environment_rb
123
- stub_file_checking_methods!
124
- stub_before_call_hook!
125
- initialize_rails_with_options :rails_root => rails_root, :environment => :development
126
- end
127
-
128
- it "should raise an exception if the database is initialized at the same time" do
129
- flexstub(Adhearsion::AHN_CONFIG).should_receive(:database_enabled?).and_return true
130
- flexmock(Adhearsion::Initializer::RailsInitializer).should_receive(:require).and_return
131
- stub_file_checking_methods!
132
- stub_before_call_hook!
133
- the_following_code {
134
- initialize_rails_with_options :rails_root => '/tmp', :environment => :development
135
- }.should raise_error
136
- end
137
-
138
- it "should set the RAILS_ENV to be the argument passed in" do
139
- flexmock(Adhearsion::Initializer::RailsInitializer).should_receive(:require).once.and_return
140
- stub_file_checking_methods!
141
- stub_before_call_hook!
142
- initialize_rails_with_options :rails_root => '/tmp', :environment => :development
143
- raise Test::Unit::AssertionFailed, 'ENV["RAILS_ENV"] should have been set but was not.' unless ENV['RAILS_ENV'] == "development"
144
- end
145
-
146
- it 'should create a BeforeCall hook (presumably to verify the active connections)' do
147
- flexstub(Adhearsion::Initializer::RailsInitializer).should_receive :require
148
- flexstub(Adhearsion::Initializer::RailsInitializer).should_receive :load_rails
149
- stub_file_checking_methods!
150
- flexmock(Adhearsion::Events).should_receive(:register_callback).once.with([:asterisk, :before_call], Proc)
151
- initialize_rails_with_options :rails_root => '/path/somewhere', :environment => :development
152
- end
153
-
154
- end