Repository navigation
Expand file tree
/
Copy pathcertificate_spec.rb
More file actions
124 lines (114 loc) · 5.16 KB
/
Copy pathcertificate_spec.rb
File metadata and controls
124 lines (114 loc) · 5.16 KB
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#
# Author:: Adam Jacob (<adam@opscode.com>)
# Copyright:: Copyright (c) 2009 Opscode, Inc.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
require File.expand_path(File.join(File.dirname(__FILE__), "..", "spec_helper"))
require 'chef/certificate'
require 'ostruct'
require 'tempfile'
class FakeFile
attr_accessor :data
def write(arg)
@data = arg
end
end
describe Chef::Certificate do
describe "generate_signing_ca" do
before(:each) do
Chef::Config[:signing_ca_user] = nil
Chef::Config[:signing_ca_group] = nil
FileUtils.stub!(:mkdir_p).and_return(true)
FileUtils.stub!(:chown).and_return(true)
File.stub!(:open).and_return(true)
File.stub!(:exists?).and_return(false)
@ca_cert = FakeFile.new
@ca_key = FakeFile.new
end
it "should generate a ca certificate" do
File.should_receive(:open).with(Chef::Config[:signing_ca_cert], "w").and_yield(@ca_cert)
Chef::Certificate.generate_signing_ca
@ca_cert.data.should =~ /BEGIN CERTIFICATE/
end
it "should generate an RSA private key" do
File.should_receive(:open).with(Chef::Config[:signing_ca_key], File::WRONLY|File::EXCL|File::CREAT, 0600).and_yield(@ca_key)
FileUtils.should_not_receive(:chown)
Chef::Certificate.generate_signing_ca
@ca_key.data.should =~ /BEGIN RSA PRIVATE KEY/
end
it "should generate an RSA private key with user and group" do
Chef::Config[:signing_ca_user] = "funky"
Chef::Config[:signing_ca_group] = "fresh"
File.should_receive(:open).with(Chef::Config[:signing_ca_key], File::WRONLY|File::EXCL|File::CREAT, 0600).and_yield(@ca_key)
FileUtils.should_receive(:chown).with(Chef::Config[:signing_ca_user], Chef::Config[:signing_ca_group], Chef::Config[:signing_ca_key])
Chef::Certificate.generate_signing_ca
@ca_key.data.should =~ /BEGIN RSA PRIVATE KEY/
end
end
describe "generate_keypair" do
before(:each) do
ca_cert = <<-EOH
-----BEGIN CERTIFICATE-----
MIID/jCCA2egAwIBAwIBATANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMx
EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxEjAQBgNVBAoM
CUNoZWYgVXNlcjEcMBoGA1UECwwTQ2VydGlmaWNhdGUgU2VydmljZTFIMEYGA1UE
Aww/b3BlbnNvdXJjZS5vcHNjb2RlLmNvbS9lbWFpbEFkZHJlc3M9b3BlbnNvdXJj
ZS1jZXJ0QG9wc2NvZGUuY29tMB4XDTA5MDkwNTAzNDAwNVoXDTE5MDkwMzAzNDAw
NVowgbAxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApXYXNoaW5ndG9uMRAwDgYDVQQH
DAdTZWF0dGxlMRIwEAYDVQQKDAlDaGVmIFVzZXIxHDAaBgNVBAsME0NlcnRpZmlj
YXRlIFNlcnZpY2UxSDBGBgNVBAMMP29wZW5zb3VyY2Uub3BzY29kZS5jb20vZW1h
aWxBZGRyZXNzPW9wZW5zb3VyY2UtY2VydEBvcHNjb2RlLmNvbTCBnzANBgkqhkiG
9w0BAQEFAAOBjQAwgYkCgYEAxrx/G4VqwFERbugpLefGJSdFE4rB+Xgr98V8joow
3wFWdxTMtj/DWa+2TCFjKdq5JZ6XLfDS/ddSvjLH5fBpR0TXRUfBE3vsGTujBcHm
g0Or9lXzaV9TcouxMCn2quPLhGCcWZ+ZllMH5M4GHjMWqV3xXtE3v0Kz2TFbe+Xt
ri8CAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOOd0lUe
6kc2nTAvQ75bkAcls4drMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0jBIHVMIHSgBTj
ndJVHupHNp0wL0O+W5AHJbOHa6GBtqSBszCBsDELMAkGA1UEBhMCVVMxEzARBgNV
BAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxEjAQBgNVBAoMCUNoZWYg
VXNlcjEcMBoGA1UECwwTQ2VydGlmaWNhdGUgU2VydmljZTFIMEYGA1UEAww/b3Bl
bnNvdXJjZS5vcHNjb2RlLmNvbS9lbWFpbEFkZHJlc3M9b3BlbnNvdXJjZS1jZXJ0
QG9wc2NvZGUuY29tggEBMA0GCSqGSIb3DQEBBQUAA4GBAE3wtfHrBva3XtDOHKD3
A4PH+Yk3q+pilNfxNlhNv4CleO7P/8M1rbEuVdA6bv9mfFmN+H9GvS+isOcrVqdu
K4G8Qjl33KE+O80o51cio7zBCDBVnsG6nOp4bm40No0HWrSG473lPT8miViNY+7r
pahRFuBFIJ7nZMFO7BDIEwPC
-----END CERTIFICATE-----
EOH
ca_key = <<-EOH
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDGvH8bhWrAURFu6Ckt58YlJ0UTisH5eCv3xXyOijDfAVZ3FMy2
P8NZr7ZMIWMp2rklnpct8NL911K+Msfl8GlHRNdFR8ETe+wZO6MFweaDQ6v2VfNp
X1Nyi7EwKfaq48uEYJxZn5mWUwfkzgYeMxapXfFe0Te/QrPZMVt75e2uLwIDAQAB
AoGARKqUcHnkrJZWI6/rqoTOnb+3ykzDQOMYrf96TfXJdQQNUA/Lu5zEbpSbtCpF
DQ0Zs7ncGm9/N13SpQz+rKAof27lQcDuPq+XPwPlSSyFySWY0fYDrpeJ5HcHwE4u
DQmhvjPzmxW95MSXbnpoGyuIbrlrmLTq+cYiZ88MBFWiiSECQQD34h7JkziOWNP9
Mw6WAaUPDF9TNJPfA8f6L9ZqjTUa98CrXY1JEK71IdM4Atku8R2VZS+//x0M80y+
nWwukCWzAkEAzT5m9ExWxP1Uw79c2scvBhFq+lxhJ5SsrvEw+ysbtNpeZGnnxblO
zlFMwqmfU/eqbDlQTKVoFmlW2BYR3kTPlQJAelQWyXdj06u2gh+uNQz+vdxnNpKd
3tLo32i4McEZ0gMuC+ORE9ut278jk2Kkd2v6I33aALAPUBLJbtAVUS1FzQJBALJ2
FR1NF5GX2VGPnlSZJzk2gfeJxeydqP1AuV9cH25FBhh3wdE6DNz28jC9Ps3LJwON
XlYW6Qe7toiTwButZ3UCQB8HMYfQIeXi20bm1qetNt27jDOAzTBpxXxl06IF7eGH
L/6ibP7K+s7XkaVsnPcJ9DieBTR8asUo8O1QFG1uydM=
-----END RSA PRIVATE KEY-----
EOH
File.stub!(:read).with(Chef::Config[:signing_ca_cert]).and_return(ca_cert)
File.stub!(:read).with(Chef::Config[:signing_ca_key]).and_return(ca_key)
end
it "should return a client certificate" do
cert, key = Chef::Certificate.gen_keypair("oasis")
cert.to_s.should =~ /BEGIN RSA PUBLIC KEY/
key.to_s.should =~ /BEGIN RSA PRIVATE KEY/
end
end
end