| 
									
										
										
										
											2017-02-11 04:57:57 +00:00
										 |  |  | { system ? builtins.currentSystem }: | 
					
						
							|  |  |  | with import ../lib/testing.nix { inherit system; }; | 
					
						
							|  |  |  | with pkgs.lib; | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  |   postgresql-versions = pkgs.callPackages ../../pkgs/servers/sql/postgresql { }; | 
					
						
							|  |  |  |   test-sql = pkgs.writeText "postgresql-test" ''
 | 
					
						
							|  |  |  |     CREATE EXTENSION pgcrypto; -- just to check if lib loading works | 
					
						
							|  |  |  |     CREATE TABLE sth ( | 
					
						
							|  |  |  |       id int | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     INSERT INTO sth (id) VALUES (1); | 
					
						
							|  |  |  |     INSERT INTO sth (id) VALUES (1); | 
					
						
							|  |  |  |     INSERT INTO sth (id) VALUES (1); | 
					
						
							|  |  |  |     INSERT INTO sth (id) VALUES (1); | 
					
						
							|  |  |  |     INSERT INTO sth (id) VALUES (1); | 
					
						
							| 
									
										
										
										
											2017-07-15 14:58:17 +01:00
										 |  |  |     CREATE TABLE xmltest ( doc xml ); | 
					
						
							|  |  |  |     INSERT INTO xmltest (doc) VALUES ('<test>ok</test>'); -- check if libxml2 enabled | 
					
						
							| 
									
										
										
										
											2017-02-11 04:57:57 +00:00
										 |  |  |   '';
 | 
					
						
							| 
									
										
										
										
											2017-07-15 14:54:42 +01:00
										 |  |  |   make-postgresql-test = postgresql-name: postgresql-package: makeTest { | 
					
						
							| 
									
										
										
										
											2017-02-11 04:57:57 +00:00
										 |  |  |     name = postgresql-name; | 
					
						
							|  |  |  |     meta = with pkgs.stdenv.lib.maintainers; { | 
					
						
							|  |  |  |       maintainers = [ zagy ]; | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2016-01-20 03:42:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-11 04:57:57 +00:00
										 |  |  |     machine = {pkgs, config, ...}: | 
					
						
							| 
									
										
										
										
											2016-01-20 03:42:59 +01:00
										 |  |  |       { | 
					
						
							| 
									
										
										
										
											2017-02-11 04:57:57 +00:00
										 |  |  |         services.postgresql.package=postgresql-package; | 
					
						
							| 
									
										
										
										
											2016-01-20 03:42:59 +01:00
										 |  |  |         services.postgresql.enable = true; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-11 04:57:57 +00:00
										 |  |  |     testScript = ''
 | 
					
						
							| 
									
										
										
										
											2017-07-19 22:13:02 +01:00
										 |  |  |       sub check_count { | 
					
						
							|  |  |  |         my ($select, $nlines) = @_; | 
					
						
							|  |  |  |         return 'test $(sudo -u postgres psql postgres -tAc "' . $select . '"|wc -l) -eq ' . $nlines; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-11 04:57:57 +00:00
										 |  |  |       $machine->start; | 
					
						
							|  |  |  |       $machine->waitForUnit("postgresql"); | 
					
						
							|  |  |  |       # postgresql should be available just after unit start | 
					
						
							| 
									
										
										
										
											2017-07-19 22:13:02 +01:00
										 |  |  |       $machine->succeed("cat ${test-sql} | sudo -u postgres psql"); | 
					
						
							| 
									
										
										
										
											2017-02-11 04:57:57 +00:00
										 |  |  |       $machine->shutdown; # make sure that postgresql survive restart (bug #1735) | 
					
						
							|  |  |  |       sleep(2); | 
					
						
							|  |  |  |       $machine->start; | 
					
						
							|  |  |  |       $machine->waitForUnit("postgresql"); | 
					
						
							| 
									
										
										
										
											2017-07-19 22:13:02 +01:00
										 |  |  |       $machine->fail(check_count("SELECT * FROM sth;", 3)); | 
					
						
							|  |  |  |       $machine->succeed(check_count("SELECT * FROM sth;", 5)); | 
					
						
							|  |  |  |       $machine->fail(check_count("SELECT * FROM sth;", 4)); | 
					
						
							|  |  |  |       $machine->succeed(check_count("SELECT xpath(\'/test/text()\', doc) FROM xmltest;", 1)); | 
					
						
							| 
									
										
										
										
											2017-02-11 04:57:57 +00:00
										 |  |  |       $machine->shutdown; | 
					
						
							|  |  |  |     '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  |   mapAttrs' (p-name: p-package: {name=p-name; value=make-postgresql-test p-name p-package;}) postgresql-versions |