9
9
let ( :uri ) { URI . parse ( 'https://www.example.com' ) }
10
10
11
11
context 'when resolving using settings' do
12
- let ( :subject ) { Puppet ::HTTP ::Resolver ::Settings . new }
12
+ let ( :subject ) { Puppet ::HTTP ::Resolver ::Settings . new ( client ) }
13
13
14
- it 'yields a service based on the current ca_server and ca_port settings' do
14
+ it 'returns a service based on the current ca_server and ca_port settings' do
15
15
Puppet [ :ca_server ] = 'ca.example.com'
16
16
Puppet [ :ca_port ] = 8141
17
17
18
- subject . resolve ( session , :ca ) do |service |
19
- expect ( service ) . to be_an_instance_of ( Puppet ::HTTP ::Service ::Ca )
20
- expect ( service . url . to_s ) . to eq ( "https://ca.example.com:8141/puppet-ca/v1" )
21
- end
18
+ service = subject . resolve ( session , :ca )
19
+ expect ( service ) . to be_an_instance_of ( Puppet ::HTTP ::Service ::Ca )
20
+ expect ( service . url . to_s ) . to eq ( "https://ca.example.com:8141/puppet-ca/v1" )
21
+ end
22
+ end
23
+
24
+ context 'when resolving using server_list' do
25
+ let ( :server_list ) { [ [ "ca.example.com" , "8141" ] , [ "apple.example.com" ] ] }
26
+ let ( :default_port ) { '8142' }
27
+ let ( :subject ) { Puppet ::HTTP ::Resolver ::ServerList . new ( client , server_list : server_list , default_port : default_port ) }
28
+
29
+ it 'returns a service based on the current server_list setting' do
30
+ stub_request ( :get , "https://ca.example.com:8141/status/v1/simple/master" ) . to_return ( status : 200 )
31
+
32
+ service = subject . resolve ( session , :ca )
33
+ expect ( service ) . to be_an_instance_of ( Puppet ::HTTP ::Service ::Ca )
34
+ expect ( service . url . to_s ) . to eq ( "https://ca.example.com:8141/puppet-ca/v1" )
35
+ end
36
+
37
+ it 'returns a service based on the current server_list setting if the server returns any success codes' do
38
+ stub_request ( :get , "https://ca.example.com:8141/status/v1/simple/master" ) . to_return ( status : 202 )
39
+
40
+ service = subject . resolve ( session , :ca )
41
+ expect ( service ) . to be_an_instance_of ( Puppet ::HTTP ::Service ::Ca )
42
+ expect ( service . url . to_s ) . to eq ( "https://ca.example.com:8141/puppet-ca/v1" )
43
+ end
44
+
45
+ it 'falls fails if no servers in server_list are accessible' do
46
+ stub_request ( :get , "https://ca.example.com:8141/status/v1/simple/master" ) . to_return ( status : 503 )
47
+ stub_request ( :get , "https://apple.example.com:8142/status/v1/simple/master" ) . to_return ( status : 503 )
48
+
49
+ expect { subject . resolve ( session , :ca ) } . to raise_error ( Puppet ::Error , /^Could not select a functional puppet master from server_list:/ )
50
+ end
51
+
52
+ it 'cycles through server_list until a valid server is found' do
53
+ stub_request ( :get , "https://ca.example.com:8141/status/v1/simple/master" ) . to_return ( status : 503 )
54
+ stub_request ( :get , "https://apple.example.com:8142/status/v1/simple/master" ) . to_return ( status : 200 )
55
+
56
+ service = subject . resolve ( session , :ca )
57
+ expect ( service ) . to be_an_instance_of ( Puppet ::HTTP ::Service ::Ca )
58
+ expect ( service . url . to_s ) . to eq ( "https://apple.example.com:8142/puppet-ca/v1" )
22
59
end
23
60
end
24
61
25
62
context 'when resolving using SRV' do
26
63
let ( :dns ) { double ( 'dns' ) }
27
- let ( :subject ) { Puppet ::HTTP ::Resolver ::SRV . new ( domain : 'example.com' , dns : dns ) }
64
+ let ( :subject ) { Puppet ::HTTP ::Resolver ::SRV . new ( client , domain : 'example.com' , dns : dns ) }
28
65
29
66
def stub_srv ( host , port )
30
67
srv = Resolv ::DNS ::Resource ::IN ::SRV . new ( 0 , 0 , port , host )
@@ -33,13 +70,12 @@ def stub_srv(host, port)
33
70
allow ( dns ) . to receive ( :getresources ) . with ( "_x-puppet-ca._tcp.example.com" , Resolv ::DNS ::Resource ::IN ::SRV ) . and_return ( [ srv ] )
34
71
end
35
72
36
- it 'yields a service based on an SRV record' do
73
+ it 'returns a service based on an SRV record' do
37
74
stub_srv ( 'ca1.example.com' , 8142 )
38
75
39
- subject . resolve ( session , :ca ) do |service |
40
- expect ( service ) . to be_an_instance_of ( Puppet ::HTTP ::Service ::Ca )
41
- expect ( service . url . to_s ) . to eq ( "https://ca1.example.com:8142/puppet-ca/v1" )
42
- end
76
+ service = subject . resolve ( session , :ca )
77
+ expect ( service ) . to be_an_instance_of ( Puppet ::HTTP ::Service ::Ca )
78
+ expect ( service . url . to_s ) . to eq ( "https://ca1.example.com:8142/puppet-ca/v1" )
43
79
end
44
80
end
45
81
end
0 commit comments