Revert "Update 3rdparty rabbitmq module"
[mirror/dsa-puppet.git] / 3rdparty / modules / postgresql / spec / acceptance / server / reassign_owned_by_spec.rb
1 require 'spec_helper_acceptance'
2
3 describe 'postgresql::server::reassign_owned_by:', :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
4
5   let(:db) { 'reassign_test' }
6   let(:old_owner) { 'psql_reassign_old_owner' }
7   let(:new_owner) { 'psql_reassign_new_owner' }
8   let(:password) { 'psql_reassign_pw' }
9   let(:superuser) { 'postgres' }
10
11   let(:pp_setup) { pp_setup = <<-EOS.unindent
12     $db = #{db}
13     $old_owner = #{old_owner}
14     $new_owner = #{new_owner}
15     $password = #{password}
16
17     class { 'postgresql::server': }
18
19     postgresql::server::role { $old_owner:
20       password_hash => postgresql_password($old_owner, $password),
21     }
22
23     # Since we are not testing pg_hba or any of that, make a local user for ident auth
24     user { $old_owner:
25       ensure => present,
26     }
27
28     # Create a user to reassign ownership to
29     postgresql::server::role { $new_owner:
30       db      => $db,
31       require => Postgresql::Server::Database[$db],
32     }
33
34     # Make a local user for ident auth
35     user { $new_owner:
36       ensure => present,
37     }
38
39     # Grant the new owner membership of the old owner (must have both for REASSIGN OWNED BY to work)
40     postgresql::server::grant_role { "grant_role to ${new_owner}":
41       role  => $new_owner,
42       group => $old_owner,
43     }
44
45     # Grant them connect to the database
46     postgresql::server::database_grant { "allow connect for ${old_owner}":
47       privilege => 'CONNECT',
48       db        => $db,
49       role      => $old_owner,
50     }
51     EOS
52   }
53
54   let(:pp_db_old_owner) { <<-EOS.unindent
55     postgresql::server::database { $db:
56       owner   => $old_owner,
57       require => Postgresql::Server::Role[$old_owner],
58     }
59     EOS
60   }
61
62   let(:pp_db_no_owner) { <<-EOS.unindent
63     postgresql::server::database { $db:
64     }
65     EOS
66   }
67
68   context 'reassign_owned_by' do
69     describe 'REASSIGN OWNED BY tests' do
70       let(:db) { 'reassign_test' }
71       let(:old_owner) { 'psql_reassign_old_owner' }
72       let(:new_owner) { 'psql_reassign_new_owner' }
73
74       let(:pp_setup_objects) { <<-EOS.unindent
75           postgresql_psql { 'create test table':
76             command   => 'CREATE TABLE test_tbl (col1 integer)',
77             db        => '#{db}',
78             psql_user => '#{old_owner}',
79             unless    => "SELECT tablename FROM pg_catalog.pg_tables WHERE tablename = 'test_tbl'",
80             require   => Postgresql::Server::Database['#{db}'],
81           }
82           postgresql_psql { 'create test sequence':
83             command   => 'CREATE SEQUENCE test_seq',
84             db        => '#{db}',
85             psql_user => '#{old_owner}',
86             unless    => "SELECT relname FROM pg_catalog.pg_class WHERE relkind='S' AND relname = 'test_seq'",
87             require   => [ Postgresql_psql['create test table'], Postgresql::Server::Database['#{db}'] ],
88           }
89         EOS
90       }
91       let(:pp_reassign_owned_by) { <<-EOS.unindent
92           postgresql::server::reassign_owned_by { 'test reassign to new_owner':
93             db          => '#{db}',
94             old_role    => '#{old_owner}',
95             new_role    => '#{new_owner}',
96             psql_user   => '#{new_owner}',
97           }
98         EOS
99       }
100
101       it 'should reassign all objects to new_owner' do
102         begin
103           #postgres version
104           result = shell('psql --version')
105           version = result.stdout.match(%r{\s(\d\.\d)})[1]
106           if version >= '9.0'
107
108             apply_manifest(pp_setup + pp_db_old_owner + pp_setup_objects,   :catch_failures => true)
109
110             apply_manifest(pp_setup + pp_db_no_owner + pp_reassign_owned_by, :catch_failures => true)
111             apply_manifest(pp_setup + pp_db_no_owner + pp_reassign_owned_by, :catch_changes => true)
112
113             ## Check that the ownership was transferred
114             psql("-d #{db} --tuples-only --no-align --command=\"SELECT tablename,tableowner FROM pg_catalog.pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema')\"", superuser) do |r|
115               expect(r.stdout).to match(/test_tbl.#{new_owner}/)
116               expect(r.stderr).to eq('')
117             end
118             psql("-d #{db} --tuples-only --no-align --command=\"SELECT relname,pg_get_userbyid(relowner) FROM pg_catalog.pg_class c WHERE relkind='S'\"", superuser) do |r|
119               expect(r.stdout).to match(/test_seq.#{new_owner}/)
120               expect(r.stderr).to eq('')
121             end
122             if version >= '9.3'
123               psql("-d #{db} --tuples-only --no-align --command=\"SELECT pg_get_userbyid(datdba) FROM pg_database WHERE datname = current_database()\"", superuser) do |r|
124                 expect(r.stdout).to match(/#{new_owner}/)
125                 expect(r.stderr).to eq('')
126               end
127             end
128           end
129         end
130       end  # it should reassign all objects
131     end
132   end
133   #####################
134 end