right_agent 0.5.1
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/LICENSE +20 -0
- data/README.rdoc +78 -0
- data/Rakefile +86 -0
- data/lib/right_agent.rb +66 -0
- data/lib/right_agent/actor.rb +163 -0
- data/lib/right_agent/actor_registry.rb +76 -0
- data/lib/right_agent/actors/agent_manager.rb +189 -0
- data/lib/right_agent/agent.rb +735 -0
- data/lib/right_agent/agent_config.rb +403 -0
- data/lib/right_agent/agent_identity.rb +209 -0
- data/lib/right_agent/agent_tags_manager.rb +213 -0
- data/lib/right_agent/audit_formatter.rb +107 -0
- data/lib/right_agent/broker_client.rb +683 -0
- data/lib/right_agent/command.rb +30 -0
- data/lib/right_agent/command/agent_manager_commands.rb +134 -0
- data/lib/right_agent/command/command_client.rb +136 -0
- data/lib/right_agent/command/command_constants.rb +42 -0
- data/lib/right_agent/command/command_io.rb +128 -0
- data/lib/right_agent/command/command_parser.rb +87 -0
- data/lib/right_agent/command/command_runner.rb +105 -0
- data/lib/right_agent/command/command_serializer.rb +63 -0
- data/lib/right_agent/console.rb +65 -0
- data/lib/right_agent/core_payload_types.rb +42 -0
- data/lib/right_agent/core_payload_types/cookbook.rb +61 -0
- data/lib/right_agent/core_payload_types/cookbook_position.rb +46 -0
- data/lib/right_agent/core_payload_types/cookbook_repository.rb +116 -0
- data/lib/right_agent/core_payload_types/cookbook_sequence.rb +70 -0
- data/lib/right_agent/core_payload_types/dev_repositories.rb +90 -0
- data/lib/right_agent/core_payload_types/event_categories.rb +38 -0
- data/lib/right_agent/core_payload_types/executable_bundle.rb +138 -0
- data/lib/right_agent/core_payload_types/login_policy.rb +72 -0
- data/lib/right_agent/core_payload_types/login_user.rb +62 -0
- data/lib/right_agent/core_payload_types/planned_volume.rb +94 -0
- data/lib/right_agent/core_payload_types/recipe_instantiation.rb +60 -0
- data/lib/right_agent/core_payload_types/repositories_bundle.rb +50 -0
- data/lib/right_agent/core_payload_types/right_script_attachment.rb +95 -0
- data/lib/right_agent/core_payload_types/right_script_instantiation.rb +73 -0
- data/lib/right_agent/core_payload_types/secure_document.rb +66 -0
- data/lib/right_agent/core_payload_types/secure_document_location.rb +63 -0
- data/lib/right_agent/core_payload_types/software_repository_instantiation.rb +61 -0
- data/lib/right_agent/daemonize.rb +35 -0
- data/lib/right_agent/dispatcher.rb +348 -0
- data/lib/right_agent/enrollment_result.rb +217 -0
- data/lib/right_agent/exceptions.rb +30 -0
- data/lib/right_agent/ha_broker_client.rb +1278 -0
- data/lib/right_agent/idempotent_request.rb +140 -0
- data/lib/right_agent/log.rb +418 -0
- data/lib/right_agent/monkey_patches.rb +29 -0
- data/lib/right_agent/monkey_patches/amqp_patch.rb +274 -0
- data/lib/right_agent/monkey_patches/ruby_patch.rb +49 -0
- data/lib/right_agent/monkey_patches/ruby_patch/array_patch.rb +29 -0
- data/lib/right_agent/monkey_patches/ruby_patch/darwin_patch.rb +24 -0
- data/lib/right_agent/monkey_patches/ruby_patch/linux_patch.rb +24 -0
- data/lib/right_agent/monkey_patches/ruby_patch/linux_patch/file_patch.rb +30 -0
- data/lib/right_agent/monkey_patches/ruby_patch/object_patch.rb +49 -0
- data/lib/right_agent/monkey_patches/ruby_patch/singleton_patch.rb +46 -0
- data/lib/right_agent/monkey_patches/ruby_patch/string_patch.rb +107 -0
- data/lib/right_agent/monkey_patches/ruby_patch/windows_patch.rb +32 -0
- data/lib/right_agent/monkey_patches/ruby_patch/windows_patch/file_patch.rb +90 -0
- data/lib/right_agent/monkey_patches/ruby_patch/windows_patch/process_patch.rb +63 -0
- data/lib/right_agent/monkey_patches/ruby_patch/windows_patch/stdio_patch.rb +27 -0
- data/lib/right_agent/monkey_patches/ruby_patch/windows_patch/time_patch.rb +55 -0
- data/lib/right_agent/monkey_patches/ruby_patch/windows_patch/win32ole_patch.rb +34 -0
- data/lib/right_agent/multiplexer.rb +91 -0
- data/lib/right_agent/operation_result.rb +270 -0
- data/lib/right_agent/packets.rb +637 -0
- data/lib/right_agent/payload_formatter.rb +104 -0
- data/lib/right_agent/pid_file.rb +159 -0
- data/lib/right_agent/platform.rb +319 -0
- data/lib/right_agent/platform/darwin.rb +227 -0
- data/lib/right_agent/platform/linux.rb +268 -0
- data/lib/right_agent/platform/windows.rb +1204 -0
- data/lib/right_agent/scripts/agent_controller.rb +522 -0
- data/lib/right_agent/scripts/agent_deployer.rb +379 -0
- data/lib/right_agent/scripts/common_parser.rb +153 -0
- data/lib/right_agent/scripts/log_level_manager.rb +193 -0
- data/lib/right_agent/scripts/stats_manager.rb +256 -0
- data/lib/right_agent/scripts/usage.rb +58 -0
- data/lib/right_agent/secure_identity.rb +92 -0
- data/lib/right_agent/security.rb +32 -0
- data/lib/right_agent/security/cached_certificate_store_proxy.rb +63 -0
- data/lib/right_agent/security/certificate.rb +102 -0
- data/lib/right_agent/security/certificate_cache.rb +89 -0
- data/lib/right_agent/security/distinguished_name.rb +56 -0
- data/lib/right_agent/security/encrypted_document.rb +84 -0
- data/lib/right_agent/security/rsa_key_pair.rb +76 -0
- data/lib/right_agent/security/signature.rb +86 -0
- data/lib/right_agent/security/static_certificate_store.rb +69 -0
- data/lib/right_agent/sender.rb +937 -0
- data/lib/right_agent/serialize.rb +29 -0
- data/lib/right_agent/serialize/message_pack.rb +102 -0
- data/lib/right_agent/serialize/secure_serializer.rb +131 -0
- data/lib/right_agent/serialize/secure_serializer_initializer.rb +47 -0
- data/lib/right_agent/serialize/serializable.rb +135 -0
- data/lib/right_agent/serialize/serializer.rb +149 -0
- data/lib/right_agent/stats_helper.rb +731 -0
- data/lib/right_agent/subprocess.rb +38 -0
- data/lib/right_agent/tracer.rb +124 -0
- data/right_agent.gemspec +60 -0
- data/spec/actor_registry_spec.rb +81 -0
- data/spec/actor_spec.rb +99 -0
- data/spec/agent_config_spec.rb +226 -0
- data/spec/agent_identity_spec.rb +75 -0
- data/spec/agent_spec.rb +571 -0
- data/spec/broker_client_spec.rb +961 -0
- data/spec/command/agent_manager_commands_spec.rb +51 -0
- data/spec/command/command_io_spec.rb +93 -0
- data/spec/command/command_parser_spec.rb +79 -0
- data/spec/command/command_runner_spec.rb +72 -0
- data/spec/command/command_serializer_spec.rb +51 -0
- data/spec/core_payload_types/dev_repositories_spec.rb +64 -0
- data/spec/core_payload_types/executable_bundle_spec.rb +59 -0
- data/spec/core_payload_types/login_user_spec.rb +98 -0
- data/spec/core_payload_types/right_script_attachment_spec.rb +65 -0
- data/spec/core_payload_types/spec_helper.rb +23 -0
- data/spec/dispatcher_spec.rb +372 -0
- data/spec/enrollment_result_spec.rb +53 -0
- data/spec/ha_broker_client_spec.rb +1673 -0
- data/spec/idempotent_request_spec.rb +136 -0
- data/spec/log_spec.rb +177 -0
- data/spec/monkey_patches/amqp_patch_spec.rb +100 -0
- data/spec/monkey_patches/eventmachine_spec.rb +62 -0
- data/spec/monkey_patches/string_patch_spec.rb +99 -0
- data/spec/multiplexer_spec.rb +48 -0
- data/spec/operation_result_spec.rb +171 -0
- data/spec/packets_spec.rb +418 -0
- data/spec/platform/platform_spec.rb +60 -0
- data/spec/results_mock.rb +45 -0
- data/spec/secure_identity_spec.rb +50 -0
- data/spec/security/cached_certificate_store_proxy_spec.rb +56 -0
- data/spec/security/certificate_cache_spec.rb +71 -0
- data/spec/security/certificate_spec.rb +49 -0
- data/spec/security/distinguished_name_spec.rb +46 -0
- data/spec/security/encrypted_document_spec.rb +55 -0
- data/spec/security/rsa_key_pair_spec.rb +55 -0
- data/spec/security/signature_spec.rb +66 -0
- data/spec/security/static_certificate_store_spec.rb +52 -0
- data/spec/sender_spec.rb +887 -0
- data/spec/serialize/message_pack_spec.rb +131 -0
- data/spec/serialize/secure_serializer_spec.rb +102 -0
- data/spec/serialize/serializable_spec.rb +90 -0
- data/spec/serialize/serializer_spec.rb +174 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +77 -0
- data/spec/stats_helper_spec.rb +681 -0
- data/spec/tracer_spec.rb +114 -0
- metadata +320 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2009-2011 RightScale Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
|
|
23
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
describe RightScale::Platform do
|
|
27
|
+
before(:all) do
|
|
28
|
+
@platform = RightScale::Platform
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context :shell do
|
|
32
|
+
context :uptime do
|
|
33
|
+
it 'should be positive' do
|
|
34
|
+
@platform.shell.uptime.should > 0
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'should be strictly increasing' do
|
|
38
|
+
u0 = @platform.shell.uptime
|
|
39
|
+
sleep(1)
|
|
40
|
+
u1 = @platform.shell.uptime
|
|
41
|
+
|
|
42
|
+
(u1 - u0).should >= 0
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
context :booted_at do
|
|
47
|
+
it 'should be some time in the past' do
|
|
48
|
+
Time.at(@platform.shell.booted_at).to_i.should < Time.now.to_i
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it 'should be constant' do
|
|
52
|
+
b0 = @platform.shell.booted_at
|
|
53
|
+
sleep(1)
|
|
54
|
+
b1 = @platform.shell.booted_at
|
|
55
|
+
|
|
56
|
+
b0.should == b1
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2009-2011 RightScale Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
|
|
23
|
+
# Mock for request results
|
|
24
|
+
module RightScale
|
|
25
|
+
|
|
26
|
+
class ResultsMock
|
|
27
|
+
|
|
28
|
+
def initialize
|
|
29
|
+
@agent_id = AgentIdentity.generate
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Build a valid request results with given content
|
|
33
|
+
def success_results(content = nil, reply_to = '*test*1')
|
|
34
|
+
Result.new(AgentIdentity.generate, reply_to,
|
|
35
|
+
{ @agent_id => OperationResult.success(content) }, @agent_id)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def error_results(content, reply_to = '*test*1')
|
|
39
|
+
Result.new(AgentIdentity.generate, reply_to,
|
|
40
|
+
{ @agent_id => OperationResult.error(content) }, @agent_id)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2009-2011 RightScale Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
|
|
23
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
|
24
|
+
|
|
25
|
+
describe RightScale::SecureIdentity do
|
|
26
|
+
|
|
27
|
+
it 'should obscure the secret token when generating the agent identity' do
|
|
28
|
+
id = 12345
|
|
29
|
+
secret = "mum's the word"
|
|
30
|
+
identity = RightScale::SecureIdentity.derive(id, secret)
|
|
31
|
+
identity.should_not =~ /#{secret}/
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'should detect tampering with verifiers' do
|
|
35
|
+
id = 12345
|
|
36
|
+
secret = "mum's the word"
|
|
37
|
+
ts = Time.now
|
|
38
|
+
|
|
39
|
+
identity = RightScale::SecureIdentity.derive(id, secret)
|
|
40
|
+
verifier = RightScale::SecureIdentity.create_verifier(id, secret, ts)
|
|
41
|
+
bad1 = RightScale::SecureIdentity.create_verifier(id+1, secret, ts)
|
|
42
|
+
bad2 = RightScale::SecureIdentity.create_verifier(id, secret, ts-1)
|
|
43
|
+
bad3 = RightScale::SecureIdentity.create_verifier(id, secret + "foom", ts)
|
|
44
|
+
|
|
45
|
+
verifier.should_not == bad1
|
|
46
|
+
verifier.should_not == bad2
|
|
47
|
+
verifier.should_not == bad3
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2009-2011 RightScale Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
|
|
23
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
24
|
+
|
|
25
|
+
describe RightScale::CachedCertificateStoreProxy do
|
|
26
|
+
|
|
27
|
+
include RightScale::SpecHelper
|
|
28
|
+
|
|
29
|
+
before(:all) do
|
|
30
|
+
@signer, key = issue_cert
|
|
31
|
+
@recipient, key = issue_cert
|
|
32
|
+
@store = flexmock("Store")
|
|
33
|
+
@proxy = RightScale::CachedCertificateStoreProxy.new(@store)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'should not raise and return nil for non existent certificates' do
|
|
37
|
+
res = nil
|
|
38
|
+
@store.should_receive(:get_recipients).with(nil).and_return(nil)
|
|
39
|
+
lambda { res = @proxy.get_recipients(nil) }.should_not raise_error
|
|
40
|
+
res.should == nil
|
|
41
|
+
@store.should_receive(:get_signer).with(nil).and_return(nil)
|
|
42
|
+
lambda { res = @proxy.get_signer(nil) }.should_not raise_error
|
|
43
|
+
res.should == nil
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'should return recipient certificates' do
|
|
47
|
+
@store.should_receive(:get_recipients).with('anything').and_return(@recipient)
|
|
48
|
+
@proxy.get_recipients('anything').should == @recipient
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it 'should return signer certificates' do
|
|
52
|
+
@store.should_receive(:get_signer).with('anything').and_return(@signer)
|
|
53
|
+
@proxy.get_signer('anything').should == @signer
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2009-2011 RightScale Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
|
|
23
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
24
|
+
|
|
25
|
+
describe RightScale::CertificateCache do
|
|
26
|
+
|
|
27
|
+
before(:each) do
|
|
28
|
+
@cache = RightScale::CertificateCache.new(2)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'should allow storing and retrieving objects' do
|
|
32
|
+
@cache['some_id'].should be_nil
|
|
33
|
+
@cache['some_id'] = 'some_value'
|
|
34
|
+
@cache['some_id'].should == 'some_value'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'should not store more than required' do
|
|
38
|
+
@cache[1] = 'oldest'
|
|
39
|
+
@cache[2] = 'older'
|
|
40
|
+
@cache[1].should == 'oldest'
|
|
41
|
+
@cache[2].should == 'older'
|
|
42
|
+
|
|
43
|
+
@cache[3] = 'new'
|
|
44
|
+
@cache[3].should == 'new'
|
|
45
|
+
|
|
46
|
+
@cache[1].should be_nil
|
|
47
|
+
@cache[2].should == 'older'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'should use LRU to remove entries' do
|
|
51
|
+
@cache[1] = 'oldest'
|
|
52
|
+
@cache[2] = 'older'
|
|
53
|
+
@cache[1].should == 'oldest'
|
|
54
|
+
@cache[2].should == 'older'
|
|
55
|
+
|
|
56
|
+
@cache[1] = 'new'
|
|
57
|
+
@cache[3] = 'newer'
|
|
58
|
+
@cache[1].should == 'new'
|
|
59
|
+
@cache[3].should == 'newer'
|
|
60
|
+
|
|
61
|
+
@cache[2].should be_nil
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'should store items returned by block' do
|
|
65
|
+
@cache[1].should be_nil
|
|
66
|
+
item = @cache.get(1) { 'item' }
|
|
67
|
+
item.should == 'item'
|
|
68
|
+
@cache[1].should == 'item'
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2009-2011 RightScale Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
|
|
23
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
24
|
+
|
|
25
|
+
describe RightScale::Certificate do
|
|
26
|
+
|
|
27
|
+
include RightScale::SpecHelper
|
|
28
|
+
|
|
29
|
+
before(:all) do
|
|
30
|
+
@certificate, key = issue_cert
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'should save' do
|
|
34
|
+
filename = File.join(File.dirname(__FILE__), "cert.pem")
|
|
35
|
+
@certificate.save(filename)
|
|
36
|
+
File.size(filename).should be > 0
|
|
37
|
+
File.delete(filename)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'should load' do
|
|
41
|
+
filename = File.join(File.dirname(__FILE__), "cert.pem")
|
|
42
|
+
@certificate.save(filename)
|
|
43
|
+
cert = RightScale::Certificate.load(filename)
|
|
44
|
+
File.delete(filename)
|
|
45
|
+
cert.should_not be_nil
|
|
46
|
+
cert.data.should == @certificate.data
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2009-2011 RightScale Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
|
|
23
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
24
|
+
|
|
25
|
+
describe RightScale::DistinguishedName do
|
|
26
|
+
|
|
27
|
+
before(:all) do
|
|
28
|
+
test_dn = { 'C' => 'US',
|
|
29
|
+
'ST' => 'California',
|
|
30
|
+
'L' => 'Santa Barbara',
|
|
31
|
+
'O' => 'RightScale',
|
|
32
|
+
'OU' => 'Certification Services',
|
|
33
|
+
'CN' => 'rightscale.com/emailAddress=cert@rightscale.com' }
|
|
34
|
+
@dn = RightScale::DistinguishedName.new(test_dn)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'should convert to string and X509 DN' do
|
|
38
|
+
@dn.to_s.should_not be_nil
|
|
39
|
+
@dn.to_x509.should_not be_nil
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'should correctly encode' do
|
|
43
|
+
@dn.to_s.should == @dn.to_x509.to_s
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2009-2011 RightScale Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
|
|
23
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
24
|
+
|
|
25
|
+
describe RightScale::EncryptedDocument do
|
|
26
|
+
|
|
27
|
+
include RightScale::SpecHelper
|
|
28
|
+
|
|
29
|
+
before(:all) do
|
|
30
|
+
@test_data = "Test Data to Sign"
|
|
31
|
+
@cert, @key = issue_cert
|
|
32
|
+
@doc = RightScale::EncryptedDocument.new(@test_data, @cert)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'should create encrypted data' do
|
|
36
|
+
@doc.encrypted_data.should_not be_nil
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'should create encrypted data using either PEM or DER format' do
|
|
40
|
+
@doc.encrypted_data(:pem).should_not be_nil
|
|
41
|
+
@doc.encrypted_data(:der).should_not be_nil
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'should decrypt correctly' do
|
|
45
|
+
@doc.decrypted_data(@key, @cert).should == @test_data
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'should load correctly with data in either PEM or DER format' do
|
|
49
|
+
@doc = RightScale::EncryptedDocument.from_data(@doc.encrypted_data(:pem))
|
|
50
|
+
@doc.decrypted_data(@key, @cert).should == @test_data
|
|
51
|
+
@doc = RightScale::EncryptedDocument.from_data(@doc.encrypted_data(:der))
|
|
52
|
+
@doc.decrypted_data(@key, @cert).should == @test_data
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2009-2011 RightScale Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
|
|
23
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
24
|
+
|
|
25
|
+
describe RightScale::RsaKeyPair do
|
|
26
|
+
|
|
27
|
+
before(:all) do
|
|
28
|
+
@pair = RightScale::RsaKeyPair.new
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'should create a private and a public keys' do
|
|
32
|
+
@pair.has_private?.should be_true
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'should strip out private key in to_public' do
|
|
36
|
+
@pair.to_public.has_private?.should be_false
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'should save' do
|
|
40
|
+
filename = File.join(File.dirname(__FILE__), "key.pem")
|
|
41
|
+
@pair.save(filename)
|
|
42
|
+
File.size(filename).should be > 0
|
|
43
|
+
File.delete(filename)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'should load' do
|
|
47
|
+
filename = File.join(File.dirname(__FILE__), "key.pem")
|
|
48
|
+
@pair.save(filename)
|
|
49
|
+
key = RightScale::RsaKeyPair.load(filename)
|
|
50
|
+
File.delete(filename)
|
|
51
|
+
key.should_not be_nil
|
|
52
|
+
key.data.should == @pair.data
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|