Add actual postgresl module from puppetlabs
[mirror/dsa-puppet.git] / 3rdparty / modules / postgresql / spec / system / non_defaults_spec.rb
diff --git a/3rdparty/modules/postgresql/spec/system/non_defaults_spec.rb b/3rdparty/modules/postgresql/spec/system/non_defaults_spec.rb
new file mode 100644 (file)
index 0000000..99db61a
--- /dev/null
@@ -0,0 +1,114 @@
+require 'spec_helper_system'
+
+describe 'non defaults:' do
+  before :all do
+    puppet_apply(<<-EOS)
+      if($::operatingsystem =~ /Debian|Ubuntu/) {
+        # Need to make sure the correct utf8 locale is ready for our
+        # non-standard tests
+        file { '/etc/locale.gen':
+          content => "en_US ISO-8859-1\nen_NG UTF-8\nen_US UTF-8\n",
+        }~>
+        exec { '/usr/sbin/locale-gen':
+          logoutput => true,
+          refreshonly => true,
+        }
+      }
+    EOS
+  end
+
+  context 'test installing non-default version of postgresql' do
+    after :each do
+      # Cleanup
+      psql('--command="drop database postgresql_test_db" postgres')
+      pp = <<-EOS
+        class { "postgresql":
+          version              => "9.2",
+          manage_package_repo  => true,
+        }->
+        class { 'postgresql::server':
+          ensure => absent,
+          service_status => 'service postgresql-9.2 status',
+        }
+      EOS
+      puppet_apply(pp)
+    end
+
+    it 'perform installation and create a db' do
+      pp = <<-EOS
+        # Configure version and manage_package_repo globally, install postgres
+        # and then try to install a new database.
+        class { "postgresql":
+          version              => "9.2",
+          manage_package_repo  => true,
+          charset              => 'UTF8',
+          locale               => 'en_US.UTF-8',
+        }->
+        class { "postgresql::server": }->
+        postgresql::db { "postgresql_test_db":
+          user        => "foo1",
+          password    => postgresql_password('foo1', 'foo1'),
+        }->
+        class { "postgresql::plperl": }
+      EOS
+
+      puppet_apply(pp) do |r|
+        # Currently puppetlabs/apt shows deprecated messages
+        #r.stderr.should be_empty
+        [2,6].should include(r.exit_code)
+      end
+
+      puppet_apply(pp) do |r|
+        # Currently puppetlabs/apt shows deprecated messages
+        #r.stderr.should be_empty
+        # It also returns a 4
+        [0,4].should include(r.exit_code)
+      end
+
+      psql('postgresql_test_db --command="select datname from pg_database limit 1"')
+    end
+  end
+
+  context 'override locale and charset' do
+    it 'perform installation with different locale and charset' do
+      puts node.facts.inspect
+      pending('no support for locale parameter with centos 5', :if => (node.facts['osfamily'] == 'RedHat' and node.facts['lsbmajdistrelease'] == '5'))
+      pending('no support for initdb with debian/ubuntu', :if => (node.facts['osfamily'] == 'Debian'))
+
+      # TODO: skip for ubuntu and centos 5
+      pp = <<-EOS
+        # Set global locale and charset option, and try installing postgres
+        class { 'postgresql':
+          locale  => 'en_NG',
+          charset => 'UTF8',
+        }->
+        class { 'postgresql::server': }
+      EOS
+
+      puppet_apply(pp) do |r|
+        # Currently puppetlabs/apt shows deprecated messages
+        #r.stderr.should be_empty
+        # It also returns a 6
+        [2,6].should include(r.exit_code)
+      end
+
+      puppet_apply(pp) do |r|
+        # Currently puppetlabs/apt shows deprecated messages
+        #r.stderr.should be_empty
+        # It also returns a 2
+        [0,4].should include(r.exit_code)
+      end
+
+      # Remove db first, if it exists for some reason
+      shell('su postgres -c "dropdb test1"')
+      shell('su postgres -c "createdb test1"')
+      shell('su postgres -c \'psql -c "show lc_ctype" test1\'') do |r|
+        r.stdout.should =~ /en_NG/
+      end
+
+      shell('su postgres -c \'psql -c "show lc_collate" test1\'') do |r|
+        r.stdout.should =~ /en_NG/
+      end
+    end
+  end
+end