blob: 44b658cc2ae793d13cf1f8beef38f35e619d67e6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
#! /usr/bin/env ruby
require 'spec_helper'
require 'puppet/indirector/key/file'
describe Puppet::SSL::Key::File do
it "should have documentation" do
Puppet::SSL::Key::File.doc.should be_instance_of(String)
end
it "should use the :privatekeydir as the collection directory" do
Puppet[:privatekeydir] = File.expand_path("/key/dir")
Puppet::SSL::Key::File.collection_directory.should == Puppet[:privatekeydir]
end
it "should store the ca key at the :cakey location" do
Puppet.settings.stubs(:use)
Puppet[:cakey] = File.expand_path("/ca/key")
file = Puppet::SSL::Key::File.new
file.stubs(:ca?).returns true
file.path("whatever").should == Puppet[:cakey]
end
describe "when choosing the path for the public key" do
it "should use the :capub setting location if the key is for the certificate authority" do
Puppet[:capub] = File.expand_path("/ca/pubkey")
Puppet.settings.stubs(:use)
@searcher = Puppet::SSL::Key::File.new
@searcher.stubs(:ca?).returns true
@searcher.public_key_path("whatever").should == Puppet[:capub]
end
it "should use the host name plus '.pem' in :publickeydir for normal hosts" do
Puppet[:privatekeydir] = File.expand_path("/private/key/dir")
Puppet[:publickeydir] = File.expand_path("/public/key/dir")
Puppet.settings.stubs(:use)
@searcher = Puppet::SSL::Key::File.new
@searcher.stubs(:ca?).returns false
@searcher.public_key_path("whatever").should == File.expand_path("/public/key/dir/whatever.pem")
end
end
describe "when managing private keys" do
before do
@searcher = Puppet::SSL::Key::File.new
@private_key_path = File.join("/fake/key/path")
@public_key_path = File.join("/other/fake/key/path")
@searcher.stubs(:public_key_path).returns @public_key_path
@searcher.stubs(:path).returns @private_key_path
FileTest.stubs(:directory?).returns true
FileTest.stubs(:writable?).returns true
@public_key = stub 'public_key'
@real_key = stub 'sslkey', :public_key => @public_key
@key = stub 'key', :name => "myname", :content => @real_key
@request = stub 'request', :key => "myname", :instance => @key
end
it "should save the public key when saving the private key" do
fh = StringIO.new
Puppet.settings.setting(:publickeydir).expects(:open_file).with(@public_key_path, 'w').yields fh
Puppet.settings.setting(:privatekeydir).stubs(:open_file)
@public_key.expects(:to_pem).returns "my pem"
@searcher.save(@request)
expect(fh.string).to eq("my pem")
end
it "should destroy the public key when destroying the private key" do
Puppet::FileSystem.expects(:unlink).with(Puppet::FileSystem.pathname(@private_key_path))
Puppet::FileSystem.expects(:exist?).with(Puppet::FileSystem.pathname(@private_key_path)).returns true
Puppet::FileSystem.expects(:exist?).with(Puppet::FileSystem.pathname(@public_key_path)).returns true
Puppet::FileSystem.expects(:unlink).with(Puppet::FileSystem.pathname(@public_key_path))
@searcher.destroy(@request)
end
it "should not fail if the public key does not exist when deleting the private key" do
Puppet::FileSystem.stubs(:unlink).with(Puppet::FileSystem.pathname(@private_key_path))
Puppet::FileSystem.stubs(:exist?).with(Puppet::FileSystem.pathname(@private_key_path)).returns true
Puppet::FileSystem.expects(:exist?).with(Puppet::FileSystem.pathname(@public_key_path)).returns false
Puppet::FileSystem.expects(:unlink).with(Puppet::FileSystem.pathname(@public_key_path)).never
@searcher.destroy(@request)
end
end
end
|