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.
- data/Bugs.rdoc +66 -0
- data/Gemfile +12 -0
- data/History.txt +359 -0
- data/Intro.txt +5 -0
- data/LICENCE.rdoc +159 -0
- data/README.md +335 -0
- data/README_SERVICES.md +410 -0
- data/README_TESTING.md +47 -0
- data/bin/jerbil +62 -0
- data/bin/jerbil-install +56 -0
- data/etc/conf.d/jerbild +15 -0
- data/etc/conf.d/jserviced +39 -0
- data/etc/init.d/jerbild +55 -0
- data/etc/init.d/jserviced +59 -0
- data/etc/jerbil/jerbil-client.rb +2 -0
- data/etc/jerbil/jerbil.rb +83 -0
- data/lib/jerbil.rb +636 -0
- data/lib/jerbil/config.md +49 -0
- data/lib/jerbil/config.rb +67 -0
- data/lib/jerbil/errors.rb +74 -0
- data/lib/jerbil/jerbil_service/base.rb +191 -0
- data/lib/jerbil/jerbil_service/client.rb +325 -0
- data/lib/jerbil/jerbil_service/config.md +119 -0
- data/lib/jerbil/jerbil_service/config.rb +72 -0
- data/lib/jerbil/jerbil_service/sclient.rb +343 -0
- data/lib/jerbil/jerbil_service/support.rb +58 -0
- data/lib/jerbil/jerbil_service/utils.rb +35 -0
- data/lib/jerbil/servers.rb +230 -0
- data/lib/jerbil/service.rb +216 -0
- data/lib/jerbil/support.rb +160 -0
- data/lib/jerbil/thor/server.rb +76 -0
- data/lib/jerbil/thor/service.rb +74 -0
- data/lib/jerbil/version.rb +13 -0
- data/sbin/jerbil-status +120 -0
- data/sbin/jerbil-stop +139 -0
- data/sbin/jerbild +186 -0
- data/sbin/jservice-status +107 -0
- data/sbin/jservice-stop +94 -0
- data/sbin/jserviced +111 -0
- data/spec/jerbil_2_jerbil_spec.rb +87 -0
- data/spec/jerbil_client1_spec.rb +80 -0
- data/spec/jerbil_client_spec.rb +114 -0
- data/spec/jerbil_client_stop_spec.rb +24 -0
- data/spec/jerbil_daemonised/jerbil_local_spec.rb +81 -0
- data/spec/jerbil_daemonised/jerbil_remote_spec.rb +116 -0
- data/spec/jerbil_load.rb +48 -0
- data/spec/jerbil_local_spec.rb +91 -0
- data/spec/jerbil_missing_spec.rb +98 -0
- data/spec/jerbil_remote_spec.rb +117 -0
- data/spec/jerbil_remote_spec_bup.rb +168 -0
- data/spec/jerbil_service_error_spec.rb +56 -0
- data/spec/jerbil_service_spec.rb +41 -0
- data/spec/jerbil_support_spec.rb +69 -0
- data/spec/jservice_utils_spec.rb +38 -0
- data/spec/server_spec.rb +69 -0
- data/spec/server_update_spec.rb +28 -0
- data/spec/service_spec.rb +72 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/test_env_spec.rb +53 -0
- data/test/bad_test_service.rb +31 -0
- data/test/conf.d/jerbil +36 -0
- data/test/conf.d/jerbil.conf +39 -0
- data/test/conf.d/jerbil.rb +55 -0
- data/test/conf.d/jerbil_local.rb +33 -0
- data/test/conf.d/jerbil_no_local.conf +39 -0
- data/test/conf.d/jerbil_old.rb +47 -0
- data/test/conf.d/jerbil_test.rb +35 -0
- data/test/conf.d/malformed +1 -0
- data/test/conf.d/missing_services +39 -0
- data/test/conf.d/ruby_test.rb +8 -0
- data/test/init.d/jerbild +14 -0
- data/test/jerbil.rb +51 -0
- data/test/jerbil_config.rb +8 -0
- data/test/jstop.rb +36 -0
- data/test/key.asc +1 -0
- data/test/lib/ruby_test.rb +37 -0
- data/test/lib/ruby_test/config.rb +56 -0
- data/test/lib/ruby_test/version.rb +13 -0
- data/test/pids/jerbil-prod.asc +1 -0
- data/test/pids/jerbil-prod.pid +1 -0
- data/test/pids/jerbil.pid +1 -0
- data/test/private_key_file.asc +3 -0
- data/test/service-stop.rb +86 -0
- data/test/service_mock.rb +94 -0
- data/test/test_service_client.rb +25 -0
- metadata +265 -0
data/spec/jerbil_load.rb
ADDED
@@ -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
|