jerbil 1.2.2

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 (86) hide show
  1. data/Bugs.rdoc +66 -0
  2. data/Gemfile +12 -0
  3. data/History.txt +359 -0
  4. data/Intro.txt +5 -0
  5. data/LICENCE.rdoc +159 -0
  6. data/README.md +335 -0
  7. data/README_SERVICES.md +410 -0
  8. data/README_TESTING.md +47 -0
  9. data/bin/jerbil +62 -0
  10. data/bin/jerbil-install +56 -0
  11. data/etc/conf.d/jerbild +15 -0
  12. data/etc/conf.d/jserviced +39 -0
  13. data/etc/init.d/jerbild +55 -0
  14. data/etc/init.d/jserviced +59 -0
  15. data/etc/jerbil/jerbil-client.rb +2 -0
  16. data/etc/jerbil/jerbil.rb +83 -0
  17. data/lib/jerbil.rb +636 -0
  18. data/lib/jerbil/config.md +49 -0
  19. data/lib/jerbil/config.rb +67 -0
  20. data/lib/jerbil/errors.rb +74 -0
  21. data/lib/jerbil/jerbil_service/base.rb +191 -0
  22. data/lib/jerbil/jerbil_service/client.rb +325 -0
  23. data/lib/jerbil/jerbil_service/config.md +119 -0
  24. data/lib/jerbil/jerbil_service/config.rb +72 -0
  25. data/lib/jerbil/jerbil_service/sclient.rb +343 -0
  26. data/lib/jerbil/jerbil_service/support.rb +58 -0
  27. data/lib/jerbil/jerbil_service/utils.rb +35 -0
  28. data/lib/jerbil/servers.rb +230 -0
  29. data/lib/jerbil/service.rb +216 -0
  30. data/lib/jerbil/support.rb +160 -0
  31. data/lib/jerbil/thor/server.rb +76 -0
  32. data/lib/jerbil/thor/service.rb +74 -0
  33. data/lib/jerbil/version.rb +13 -0
  34. data/sbin/jerbil-status +120 -0
  35. data/sbin/jerbil-stop +139 -0
  36. data/sbin/jerbild +186 -0
  37. data/sbin/jservice-status +107 -0
  38. data/sbin/jservice-stop +94 -0
  39. data/sbin/jserviced +111 -0
  40. data/spec/jerbil_2_jerbil_spec.rb +87 -0
  41. data/spec/jerbil_client1_spec.rb +80 -0
  42. data/spec/jerbil_client_spec.rb +114 -0
  43. data/spec/jerbil_client_stop_spec.rb +24 -0
  44. data/spec/jerbil_daemonised/jerbil_local_spec.rb +81 -0
  45. data/spec/jerbil_daemonised/jerbil_remote_spec.rb +116 -0
  46. data/spec/jerbil_load.rb +48 -0
  47. data/spec/jerbil_local_spec.rb +91 -0
  48. data/spec/jerbil_missing_spec.rb +98 -0
  49. data/spec/jerbil_remote_spec.rb +117 -0
  50. data/spec/jerbil_remote_spec_bup.rb +168 -0
  51. data/spec/jerbil_service_error_spec.rb +56 -0
  52. data/spec/jerbil_service_spec.rb +41 -0
  53. data/spec/jerbil_support_spec.rb +69 -0
  54. data/spec/jservice_utils_spec.rb +38 -0
  55. data/spec/server_spec.rb +69 -0
  56. data/spec/server_update_spec.rb +28 -0
  57. data/spec/service_spec.rb +72 -0
  58. data/spec/spec_helper.rb +12 -0
  59. data/spec/test_env_spec.rb +53 -0
  60. data/test/bad_test_service.rb +31 -0
  61. data/test/conf.d/jerbil +36 -0
  62. data/test/conf.d/jerbil.conf +39 -0
  63. data/test/conf.d/jerbil.rb +55 -0
  64. data/test/conf.d/jerbil_local.rb +33 -0
  65. data/test/conf.d/jerbil_no_local.conf +39 -0
  66. data/test/conf.d/jerbil_old.rb +47 -0
  67. data/test/conf.d/jerbil_test.rb +35 -0
  68. data/test/conf.d/malformed +1 -0
  69. data/test/conf.d/missing_services +39 -0
  70. data/test/conf.d/ruby_test.rb +8 -0
  71. data/test/init.d/jerbild +14 -0
  72. data/test/jerbil.rb +51 -0
  73. data/test/jerbil_config.rb +8 -0
  74. data/test/jstop.rb +36 -0
  75. data/test/key.asc +1 -0
  76. data/test/lib/ruby_test.rb +37 -0
  77. data/test/lib/ruby_test/config.rb +56 -0
  78. data/test/lib/ruby_test/version.rb +13 -0
  79. data/test/pids/jerbil-prod.asc +1 -0
  80. data/test/pids/jerbil-prod.pid +1 -0
  81. data/test/pids/jerbil.pid +1 -0
  82. data/test/private_key_file.asc +3 -0
  83. data/test/service-stop.rb +86 -0
  84. data/test/service_mock.rb +94 -0
  85. data/test/test_service_client.rb +25 -0
  86. metadata +265 -0
@@ -0,0 +1,48 @@
1
+ #
2
+ # Description
3
+ #
4
+ # Author:: Robert Sharp
5
+ # Copyright:: Copyright (c) 2010 Robert Sharp
6
+ # License:: Open Software Licence v3.0
7
+ #
8
+ # This software is licensed for use under the Open Software Licence v. 3.0
9
+ # The terms of this licence can be found at http://www.opensource.org/licenses/osl-3.0.php
10
+ # and in the file copyright.txt. Under the terms of this licence, all derivative works
11
+ # must themselves be licensed under the Open Software Licence v. 3.0
12
+ #
13
+ #
14
+
15
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
16
+ require 'jerbil/server'
17
+ require 'jerbil/service'
18
+ require 'jerbil/config'
19
+ require 'jerbil'
20
+ require 'jellog'
21
+ require 'socket'
22
+ require 'syslog'
23
+ require 'drb'
24
+
25
+
26
+ config = File.expand_path(File.dirname(__FILE__) + '/../test/conf.d/jerbil.conf')
27
+
28
+ describe "Jerbil to Jerbil tests" do
29
+
30
+ before(:all) do
31
+ @options = Jerbil::Config.new(config)
32
+ @servers = @options.delete(:servers)
33
+ @env = @options[:environment]
34
+ @local = Jerbil::ServerRecord.get_local_server(@servers, @env)
35
+
36
+ @a_service = Jerbil::ServiceRecord.new(:rubytest, :test)
37
+ @b_service = Jerbil::ServiceRecord.new(:rubytest, :prod)
38
+ @remote_jerbil = @local.connect
39
+ @remote_jerbil.register(@a_service)
40
+ @remote_jerbil.register(@b_service)
41
+ end
42
+
43
+ it "should be easy to configure a live server" do
44
+ @remote_jerbil.services.should == 2
45
+ end
46
+
47
+
48
+ end
@@ -0,0 +1,91 @@
1
+ #
2
+ # Description
3
+ #
4
+ # Author:: Robert Sharp
5
+ # Copyright:: Copyright (c) 2010 Robert Sharp
6
+ # License:: Open Software Licence v3.0
7
+ #
8
+ # This software is licensed for use under the Open Software Licence v. 3.0
9
+ # The terms of this licence can be found at http://www.opensource.org/licenses/osl-3.0.php
10
+ # and in the file copyright.txt. Under the terms of this licence, all derivative works
11
+ # must themselves be licensed under the Open Software Licence v. 3.0
12
+ #
13
+ # The purpose of these tests is to check the local interface to a Jerbil Broker only
14
+ #
15
+ require 'rubygems'
16
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
17
+ require 'jerbil/servers'
18
+ require 'jerbil/service'
19
+ require 'jerbil/config'
20
+ require 'jerbil'
21
+ require 'jellog'
22
+
23
+
24
+ conf_file = File.expand_path(File.dirname(__FILE__) + '/../test/conf.d/jerbil_local.rb')
25
+
26
+
27
+ describe "A local Jerbil Session" do
28
+
29
+ before(:all) do
30
+ Jellog::Logger.disable_syslog
31
+ @pkey = "ABCDEFG"
32
+ my_conf = Jerbil::Config.new(conf_file)
33
+ #puts my_conf.inspect
34
+ @my_session = Jerbil::Broker.new(my_conf, @pkey)
35
+ end
36
+
37
+ before(:each) do
38
+
39
+ @my_service = Jerbil::ServiceRecord.new(:rubytest, :dev)
40
+ @a_service = Jerbil::ServiceRecord.new(:rubytest, :test)
41
+ end
42
+
43
+ after(:all) do
44
+ @my_session.stop(@pkey)
45
+ end
46
+
47
+ it "should be easily created" do
48
+ @my_session.started.should be_true
49
+ @my_session.registrations.should == 0
50
+ @my_session.service_count.should == 0
51
+ @my_session.local_service_count.should == 0
52
+ @my_session.remote_service_count.should == 0
53
+ @my_session.get_all.should == []
54
+ end
55
+
56
+ it "should be easy to add a service" do
57
+ @my_session.register(@my_service)
58
+ @my_session.registrations.should == 1
59
+ @my_session.service_count.should == 1
60
+ @my_session.local_service_count.should == 1
61
+ @my_session.remote_service_count.should == 0
62
+ services = @my_session.get_all(:ignore_access => true)
63
+ services[0].should == @my_service
64
+ service = @my_session.get_local(:ignore_access => true)
65
+ service.should == @my_service
66
+ @my_session.find(:name=>'Another', :ignore_access => true).should == []
67
+ @my_session.remove(@my_service)
68
+ end
69
+
70
+ it "should not be possible to register the same service twice" do
71
+ @my_service.should_receive(:connect).and_return(true) # make it appear the service is live
72
+ @my_session.register(@my_service)
73
+ lambda{@my_session.register(@my_service)}.should raise_error{Jerbil::ServiceAlreadyRegistered}
74
+ @my_session.remove(@my_service)
75
+ end
76
+
77
+ it "should be easy to remove a service" do
78
+ @my_session.register(@my_service)
79
+ @my_session.remove(@my_service)
80
+ @my_session.service_count.should == 0
81
+ end
82
+
83
+ it "should do nothing if you remove an unregistered service" do
84
+ @my_session.register(@my_service)
85
+ @my_session.remove(@a_service)
86
+ @my_session.service_count.should == 1
87
+
88
+ end
89
+
90
+
91
+ end
@@ -0,0 +1,98 @@
1
+ #
2
+ # Description
3
+ #
4
+ # Author:: Robert Sharp
5
+ # Copyright:: Copyright (c) 2010 Robert Sharp
6
+ # License:: Open Software Licence v3.0
7
+ #
8
+ # This software is licensed for use under the Open Software Licence v. 3.0
9
+ # The terms of this licence can be found at http://www.opensource.org/licenses/osl-3.0.php
10
+ # and in the file copyright.txt. Under the terms of this licence, all derivative works
11
+ # must themselves be licensed under the Open Software Licence v. 3.0
12
+ #
13
+ #
14
+
15
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
16
+ require 'jerbil/servers'
17
+ require 'jerbil/service'
18
+ require 'jerbil/config'
19
+ require 'jerbil'
20
+
21
+ require 'socket'
22
+ require 'syslog'
23
+ require 'drb'
24
+ require 'jellog'
25
+ #require 'rspec/mocks/standalone'
26
+
27
+
28
+ config = File.expand_path(File.dirname(__FILE__) + '/../test/conf.d/jerbil_local.rb')
29
+
30
+ describe "Missing Services" do
31
+ before(:all) do
32
+ @config = Jerbil::Config.new(config)
33
+ @env = @config[:environment]
34
+ #@local = Jerbil::ServerRecord.get_local_server(@servers, @env)
35
+ @pkey = '123456'
36
+ @secret = @config[:secret]
37
+ @env = @config[:environment]
38
+ @calling_key = 'JKLMNOP'
39
+ @calling_server = Jerbil::Servers.new('germanicus.osburn-sharp.ath.cx', @calling_key, :dev, 49902)
40
+
41
+ #@mock_server = double('broker')
42
+
43
+ @jerbs = Jerbil::Broker.new(@config, @pkey)
44
+ @germs_fqdn = 'germanicus.osburn-sharp.ath.cx'
45
+ #@germs = Jerbil::Servers.get_server(@servers, @germs_fqdn, @env)
46
+ @ant_fqdn = 'antonia.osburn-sharp.ath.cx'
47
+ #@ant = Jerbil::Servers.get_server(@servers, @ant_fqdn, @env)
48
+ #@calling_key = @local.key
49
+
50
+ #Syslog.stub(:info).and_return(true)
51
+ Jellog::Logger.disable_syslog
52
+
53
+ end
54
+
55
+ before(:each) do
56
+
57
+ @my_service = Jerbil::ServiceRecord.new(:rubytest, :dev)
58
+ Socket.stub(:gethostname).and_return(@germs_fqdn)
59
+ @a_service = Jerbil::ServiceRecord.new(:rubytest, :test)
60
+ Socket.stub(:gethostname).and_return(@ant_fqdn)
61
+ @b_service = Jerbil::ServiceRecord.new(:rubytest, :prod)
62
+ Socket.unstub(:gethostname)
63
+
64
+ @jerbs.register(@my_service)
65
+ rkey = @jerbs.register_server(@calling_server, @secret, @env)
66
+ @jerbs.register_remote(rkey, @a_service)
67
+ @jerbs.register_remote(rkey, @b_service)
68
+ end
69
+
70
+ after(:all) do
71
+ @jerbs.stop(@pkey)
72
+ end
73
+
74
+
75
+ it "should be possible to remove a local missing service" do
76
+
77
+ @my_service.should_receive(:connect).once.and_raise(ArgumentError)
78
+ @jerbs.service_missing?(@my_service).should be_true
79
+ end
80
+
81
+ it "should be possible to remove a valid remote missing service" do
82
+ mock_server = double('broker')
83
+ DRbObject.stub(:new).and_return(mock_server)
84
+ mock_server.should_receive(:service_missing?).once.and_return(true)
85
+ @jerbs.service_missing?(@a_service).should be_true
86
+ end
87
+
88
+ # not sure what this is about? You can remove a missing service without
89
+ # the server.
90
+ it "should not possible to remove a missing service without the server" do
91
+ #@germs.should_receive(:connect).and_return(@mock_server)
92
+ #@ant.unstub(:connect)
93
+ #@ant.should_receive(:connect).and_return(false)
94
+ #@mock_server.should_receive(:remove_remote).once.and_return(true)
95
+ @jerbs.service_missing?(@b_service).should be_false
96
+ end
97
+
98
+ end
@@ -0,0 +1,117 @@
1
+ #
2
+ # Description
3
+ #
4
+ # Author:: Robert Sharp
5
+ # Copyright:: Copyright (c) 2010 Robert Sharp
6
+ # License:: Open Software Licence v3.0
7
+ #
8
+ # This software is licensed for use under the Open Software Licence v. 3.0
9
+ # The terms of this licence can be found at http://www.opensource.org/licenses/osl-3.0.php
10
+ # and in the file copyright.txt. Under the terms of this licence, all derivative works
11
+ # must themselves be licensed under the Open Software Licence v. 3.0
12
+ #
13
+ # The purpose of these tests is to check the remote interface to the Jerbil Server
14
+ #
15
+
16
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
17
+ require 'jerbil/servers'
18
+ require 'jerbil/service'
19
+ require 'jerbil/config'
20
+ require 'jerbil'
21
+ require 'socket'
22
+ require 'syslog'
23
+ require 'jellog'
24
+ require 'rspec/mocks/standalone'
25
+
26
+ conf_file = File.expand_path(File.dirname(__FILE__) + '/../test/conf.d/jerbil_local.rb')
27
+
28
+ log_dir = File.expand_path(File.dirname(__FILE__) + '/../log')
29
+ key_file = File.expand_path(File.dirname(__FILE__) + '/../test/private_key_file.asc')
30
+
31
+ describe "A Remote Jerbil Session" do
32
+
33
+ before(:all) do |variable|
34
+ @calling_key = 'JKLMNOP'
35
+ @third_key = 'GFHNBDUC'
36
+ @pkey = '123456'
37
+ @calling_server = Jerbil::Servers.new('germanicus.osburn-sharp.ath.cx', @calling_key, :dev, 49902)
38
+ @third_server = Jerbil::Servers.new('antonia.osburn-sharp.ath.cx', @third_key, :dev, 49902)
39
+ @my_service = Jerbil::ServiceRecord.new(:rubytest, :dev)
40
+ @another_service = Jerbil::ServiceRecord.new(:rubytest, :test)
41
+ @my_conf = Jerbil::Config.new(conf_file)
42
+ @secret = @my_conf[:secret]
43
+ @env = @my_conf[:environment]
44
+
45
+ @my_session = Jerbil::Broker.new(@my_conf, @pkey)
46
+
47
+ @remote_host = 'germanicus.osburn-sharp.ath.cx'
48
+ Socket.stub(:gethostname).and_return(@remote_host)
49
+ @a_service = Jerbil::ServiceRecord.new(:rubytest, :test)
50
+ Socket.stub(:gethostname).and_return('antonia.osburn-sharp.ath.cx')
51
+ @b_service = Jerbil::ServiceRecord.new(:rubytest, :prod)
52
+ Socket.unstub(:gethostname)
53
+ Jellog::Logger.disable_syslog
54
+ end
55
+
56
+ after(:all) do
57
+ @my_session.stop(@pkey)
58
+ end
59
+
60
+ it "should be easily created" do
61
+ @my_session.service_count.should == 0
62
+ end
63
+
64
+ it "should be easy to add a remote service" do
65
+ rkey = @my_session.register_server(@calling_server, @secret, @env)
66
+ @my_session.register_remote(rkey, @a_service)
67
+ @my_session.service_count.should == 1
68
+ @my_session.remote_service_count.should == 1
69
+ @my_session.detach_server(rkey, @calling_server)
70
+ @my_session.service_count.should == 0
71
+ end
72
+
73
+ it "should not be possible to register a remote server without a valid secret" do
74
+ #Syslog.should_not_receive(:info)
75
+ lambda{@my_session.register_server(@calling_server, 'INVALID', @env)}.should raise_error{Jerbil::JerbilAuthenticationError}
76
+ end
77
+
78
+ it "should not be possible to register a remote service without a valid key" do
79
+ rkey = @my_session.register_server(@calling_server, @secret, @env)
80
+ #lambda{@my_session.register_remote('INVALID', @a_service)}.should raise_error{Jerbil::InvalidServerKey}
81
+ @my_session.register_remote('INVALID', @a_service)
82
+ @my_session.service_count.should == 0
83
+ @my_session.detach_server(rkey, @calling_server)
84
+ end
85
+
86
+
87
+ it "should be easy to remove a remote service" do
88
+ rkey = @my_session.register_server(@calling_server, @secret, @env)
89
+ @my_session.register_remote(rkey, @a_service)
90
+ @my_session.service_count.should == 1
91
+ @my_session.remove_remote(rkey, @a_service)
92
+ @my_session.service_count.should == 0
93
+ @my_session.detach_server(rkey, @calling_server)
94
+ end
95
+
96
+ it "should do nothing if you remove an unregistered remote service" do
97
+ rkey = @my_session.register_server(@calling_server, @secret, @env)
98
+ @my_session.register(@my_service)
99
+ @my_session.remove_remote(rkey, @a_service)
100
+ @my_session.service_count.should == 1
101
+ @my_session.detach_server(rkey, @calling_server)
102
+ end
103
+
104
+ it "should return a locally registered service when asked" do
105
+ @my_session.register(@my_service)
106
+ rkey = @my_session.register_server(@calling_server, @secret, @env)
107
+ services = @my_session.get_local_services(rkey)
108
+ services[0].should == @my_service
109
+ @my_session.register(@another_service)
110
+ @my_session.local_service_count.should == 2
111
+ services.length.should == 1
112
+ @my_session.detach_server(rkey, @calling_server)
113
+
114
+ end
115
+
116
+
117
+ end
@@ -0,0 +1,168 @@
1
+ #
2
+ # Description
3
+ #
4
+ # Author:: Robert Sharp
5
+ # Copyright:: Copyright (c) 2010 Robert Sharp
6
+ # License:: Open Software Licence v3.0
7
+ #
8
+ # This software is licensed for use under the Open Software Licence v. 3.0
9
+ # The terms of this licence can be found at http://www.opensource.org/licenses/osl-3.0.php
10
+ # and in the file copyright.txt. Under the terms of this licence, all derivative works
11
+ # must themselves be licensed under the Open Software Licence v. 3.0
12
+ #
13
+ #
14
+
15
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
16
+ require 'jerbil/servers'
17
+ require 'jerbil/service'
18
+ require 'jerbil/config'
19
+ require 'jerbil'
20
+ require 'socket'
21
+ require 'syslog'
22
+ require 'jellog'
23
+ require 'rspec/mocks/standalone'
24
+
25
+ conf_file = File.expand_path(File.dirname(__FILE__) + '/../test/conf.d/jerbil_local.rb')
26
+
27
+ log_dir = File.expand_path(File.dirname(__FILE__) + '/../log')
28
+ key_file = File.expand_path(File.dirname(__FILE__) + '/../test/private_key_file.asc')
29
+
30
+ describe "A Jerbil Session" do
31
+
32
+ before(:all) do |variable|
33
+ @calling_key = 'JKLMNOP'
34
+ @third_key = 'GFHNBDUC'
35
+ @pkey = '123456'
36
+ @calling_server = Jerbil::Servers.new('germanicus.osburn-sharp.ath.cx', @calling_key, :dev, 49902)
37
+ @third_server = Jerbil::Servers.new('antonia.osburn-sharp.ath.cx', @third_key, :dev, 49902)
38
+ @my_service = Jerbil::ServiceRecord.new(:rubytest, :dev)
39
+ @my_conf = Jerbil::Config.new(conf_file)
40
+ @secret = @my_conf[:secret]
41
+ @env = @my_conf[:environment]
42
+
43
+ @my_session = Jerbil::Broker.new(@my_conf, @pkey)
44
+
45
+ @remote_host = 'germanicus.osburn-sharp.ath.cx'
46
+ Socket.stub(:gethostname).and_return(@remote_host)
47
+ @a_service = Jerbil::ServiceRecord.new(:rubytest, :test)
48
+ Socket.stub(:gethostname).and_return('antonia.osburn-sharp.ath.cx')
49
+ @b_service = Jerbil::ServiceRecord.new(:rubytest, :prod)
50
+ Socket.unstub(:gethostname)
51
+ Jellog::Logger.disable_syslog
52
+ end
53
+
54
+ after(:all) do
55
+ @my_session.stop(@pkey)
56
+ end
57
+
58
+ it "should be easily created" do
59
+ @my_session.service_count.should == 0
60
+ end
61
+
62
+ it "should be easy to add a remote service" do
63
+ rkey = @my_session.register_server(@calling_server, @secret, @env)
64
+ @my_session.register_remote(rkey, @a_service)
65
+ @my_session.service_count.should == 1
66
+ @my_session.remote_service_count.should == 1
67
+ @my_session.detach_server(rkey, @calling_server)
68
+ @my_session.service_count.should == 0
69
+ end
70
+
71
+ it "should not be possible to register a remote server without a valid secret" do
72
+ #Syslog.should_not_receive(:info)
73
+ lambda{@my_session.register_server(@calling_server, 'INVALID', @env)}.should raise_error{Jerbil::JerbilAuthenticationError}
74
+ end
75
+
76
+ it "should not be possible to register a remote service without a valid key" do
77
+ rkey = @my_session.register_server(@calling_server, @secret, @env)
78
+ lambda{@my_session.register_remote('INVALID', @a_service)}.should raise_error{Jerbil::InvalidServerKey}
79
+ @my_session.detach_server(rkey, @calling_server)
80
+ end
81
+
82
+
83
+ it "should be easy to remove a remote service" do
84
+ rkey = @my_session.register_server(@calling_server, @secret, @env)
85
+ @my_session.register_remote(rkey, @a_service)
86
+ @my_session.service_count.should == 1
87
+ @my_session.remove_remote(rkey, @a_service)
88
+ @my_session.service_count.should == 0
89
+ @my_session.detach_server(rkey, @calling_server)
90
+ end
91
+
92
+ it "should do nothing if you remove an unregistered remote service" do
93
+ rkey = @my_session.register_server(@calling_server, @secret, @env)
94
+ @my_session.register(@my_service)
95
+ @my_session.remove_remote(rkey, @a_service)
96
+ @my_session.service_count.should == 1
97
+ @my_session.detach_server(rkey, @calling_server)
98
+ end
99
+
100
+ describe "Services" do
101
+
102
+ before(:each) do
103
+ #Syslog.should_receive(:info).exactly(3).times.and_return(true)
104
+ @my_session.register(@my_service)
105
+ @my_session.register_remote(@calling_key, @a_service)
106
+ @my_session.register_remote(@calling_key, @b_service)
107
+ end
108
+
109
+ it "should be easy to add multiple services" do
110
+ @my_session.services.should == 3
111
+ end
112
+
113
+ it "should be possible to find a service by name" do
114
+ services = @my_session.find(:name=>:rubytest)
115
+ services.length.should == 3
116
+ services[0].should == @my_service
117
+ end
118
+
119
+ it "should be possible to find a service by env" do
120
+ services = @my_session.find(:env=>:prod)
121
+ services.length.should == 1
122
+ services[0].should == @b_service
123
+ services[0].host.should == 'antonia.osburn-sharp.ath.cx'
124
+ end
125
+
126
+ it "should be possible to find a service by env" do
127
+ services = @my_session.find(:env=>:test)
128
+ services.length.should == 1
129
+ services[0].should == @a_service
130
+ services[0].host.should == @remote_host
131
+ end
132
+
133
+ it "should not be possible to find a service not registered" do
134
+ services = @my_session.find(:name=>:Bilker)
135
+ services.length.should == 0
136
+ end
137
+
138
+ it "should be possible to get a service in one go" do
139
+ my_service = @my_session.get({:name=>:rubytest, :env=>:prod}, true)
140
+ my_service.should be_a_kind_of(Jerbil::ServiceRecord)
141
+ my_service.env.should == :prod
142
+
143
+ end
144
+ end
145
+
146
+
147
+ describe "remote server calls" do
148
+
149
+ before(:each) do
150
+ #Syslog.should_receive(:info).exactly(3).times.and_return(true)
151
+ @my_session.register(@my_service)
152
+ @my_session.register_remote(@calling_key, @a_service)
153
+ @my_session.register_remote(@calling_key, @b_service)
154
+ end
155
+
156
+ it "should return all locally registered services" do
157
+ local_services = @my_session.get_local_services(@calling_key)
158
+ local_services.length.should == 1
159
+ end
160
+
161
+ it "should not be possible to get local services without a valid server key" do
162
+ #Syslog.should_not_receive(:info)
163
+ lambda{@my_session.get_local_services('INVALID')}.should raise_error{Jerbil::InvalidServerKey}
164
+ end
165
+
166
+ end
167
+
168
+ end