]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/openstacklib/spec/unit/provider/openstack_spec.rb
try with modules from master
[dsa-puppet.git] / 3rdparty / modules / openstacklib / spec / unit / provider / openstack_spec.rb
1 require 'puppet'
2 require 'spec_helper'
3 require 'puppet/provider/openstack'
4
5 describe Puppet::Provider::Openstack do
6   before(:each) do
7     ENV['OS_USERNAME']     = nil
8     ENV['OS_PASSWORD']     = nil
9     ENV['OS_PROJECT_NAME'] = nil
10     ENV['OS_AUTH_URL']     = nil
11   end
12
13   let(:type) do
14     Puppet::Type.newtype(:test_resource) do
15       newparam(:name, :namevar => true)
16       newparam(:log_file)
17     end
18   end
19
20   describe '#request' do
21     let(:resource_attrs) do
22       {
23         :name => 'stubresource',
24       }
25     end
26
27     let(:provider) do
28       Puppet::Provider::Openstack.new(type.new(resource_attrs))
29     end
30
31     it 'makes a successful request' do
32       provider.class.stubs(:openstack)
33                     .with('project', 'list', '--quiet', '--format', 'csv', ['--long'])
34                     .returns('"ID","Name","Description","Enabled"
35 "1cb05cfed7c24279be884ba4f6520262","test","Test tenant",True
36 ')
37       response = Puppet::Provider::Openstack.request('project', 'list', ['--long'])
38       expect(response.first[:description]).to eq("Test tenant")
39     end
40
41     context 'on connection errors' do
42       it 'retries' do
43         ENV['OS_USERNAME']     = 'test'
44         ENV['OS_PASSWORD']     = 'abc123'
45         ENV['OS_PROJECT_NAME'] = 'test'
46         ENV['OS_AUTH_URL']     = 'http://127.0.0.1:5000'
47         provider.class.stubs(:openstack)
48                       .with('project', 'list', '--quiet', '--format', 'csv', ['--long'])
49                       .raises(Puppet::ExecutionFailure, 'Unable to establish connection')
50                       .then
51                       .returns('')
52         provider.class.expects(:sleep).with(2).returns(nil)
53         Puppet::Provider::Openstack.request('project', 'list', ['--long'])
54       end
55     end
56   end
57
58   describe 'parse_csv' do
59     context 'with mixed stderr' do
60       text = "ERROR: Testing\n\"field\",\"test\",1,2,3\n"
61       csv = Puppet::Provider::Openstack.parse_csv(text)
62       it 'should ignore non-CSV text at the beginning of the input' do
63         expect(csv).to be_kind_of(Array)
64         expect(csv[0]).to match_array(['field', 'test', '1', '2', '3'])
65         expect(csv.size).to eq(1)
66       end
67     end
68
69     context 'with \r\n line endings' do
70       text = "ERROR: Testing\r\n\"field\",\"test\",1,2,3\r\n"
71       csv = Puppet::Provider::Openstack.parse_csv(text)
72       it 'ignore the carriage returns' do
73         expect(csv).to be_kind_of(Array)
74         expect(csv[0]).to match_array(['field', 'test', '1', '2', '3'])
75         expect(csv.size).to eq(1)
76       end
77     end
78
79     context 'with embedded newlines' do
80       text = "ERROR: Testing\n\"field\",\"te\nst\",1,2,3\n"
81       csv = Puppet::Provider::Openstack.parse_csv(text)
82       it 'should parse correctly' do
83         expect(csv).to be_kind_of(Array)
84         expect(csv[0]).to match_array(['field', "te\nst", '1', '2', '3'])
85         expect(csv.size).to eq(1)
86       end
87     end
88   end
89 end