@@ -25,6 +25,24 @@ def ssl_test(server_opts, opts = {})
25
25
test_server.stop
26
26
end
27
27
28
+ def basic_auth_test(server_opts, opts = {})
29
+ server_opts[:rsa_key] ||= File.read(OctocatalogDiff::Spec.fixture_path('ssl/generated/server.key'))
30
+ server_opts[:cert] ||= File.read(OctocatalogDiff::Spec.fixture_path('ssl/generated/server.crt'))
31
+ server_opts[:require_header] ||= {}
32
+ server_opts[:require_header]['Authorization'] = 'Basic dXNlcm5hbWU6cGFzc3dvcmQ=' # username:password
33
+ test_server = nil
34
+ 3.times do
35
+ test_server = SSLTestServer.new(server_opts)
36
+ test_server.start
37
+ break if test_server.port > 0
38
+ end
39
+ raise OctocatalogDiff::Spec::FixtureError, 'Unable to instantiate SSLTestServer' unless test_server.port > 0
40
+ testobj = OctocatalogDiff::PuppetDB.new(opts.merge(puppetdb_url: "https://username:password@localhost:#{test_server.port}"))
41
+ return testobj.get('/foo')
42
+ ensure
43
+ test_server.stop
44
+ end
45
+
28
46
describe OctocatalogDiff::PuppetDB do
29
47
# Test constructor's ability to create @connections
30
48
describe '#initialize' do
@@ -272,6 +290,53 @@ def ssl_test(server_opts, opts = {})
272
290
expect { testobj.send(:parse_url, test_url) }.to raise_error(URI::InvalidURIError)
273
291
end
274
292
end
293
+
294
+ context 'basic auth' do
295
+ it 'should detect a username:password combination' do
296
+ test_url = 'https://username:
[email protected] :8090'
297
+ testobj = OctocatalogDiff::PuppetDB.new
298
+ result = testobj.send(:parse_url, test_url)
299
+ expect(result[:username]).to eq('username')
300
+ expect(result[:password]).to eq('password')
301
+ end
302
+
303
+ it 'should allow usernames without passwords' do
304
+ test_url = 'https://username:@foo.bar.host:8090'
305
+ testobj = OctocatalogDiff::PuppetDB.new
306
+ result = testobj.send(:parse_url, test_url)
307
+ expect(result[:username]).to eq('username')
308
+ expect(result[:password]).to eq('')
309
+ end
310
+
311
+ it 'should allow passwords without usernames' do
312
+ test_url = 'https://:
[email protected] :8090'
313
+ testobj = OctocatalogDiff::PuppetDB.new
314
+ result = testobj.send(:parse_url, test_url)
315
+ expect(result[:username]).to eq('')
316
+ expect(result[:password]).to eq('password')
317
+ end
318
+
319
+ it 'should not parse a username or password when none are provided' do
320
+ test_url = 'https://foo.bar.host:8090'
321
+ testobj = OctocatalogDiff::PuppetDB.new
322
+ result = testobj.send(:parse_url, test_url)
323
+ expect(result[:username]).to eq(nil)
324
+ expect(result[:password]).to eq(nil)
325
+ end
326
+ end
327
+ end
328
+
329
+ context 'basic auth connection options' do
330
+ context 'with basic auth on' do
331
+ let(:server_opts) { {} }
332
+ let(:client_opts) { {} }
333
+ describe '#get' do
334
+ it 'should not fail with basic auth on' do
335
+ result = basic_auth_test(server_opts, client_opts)
336
+ expect(result.key?('success')).to eq(true)
337
+ end
338
+ end
339
+ end
275
340
end
276
341
277
342
context 'puppetdb ssl connection options' do
0 commit comments