mirror of
				https://github.com/Icinga/icingaweb2.git
				synced 2025-10-29 18:34:03 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			77 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| // {{{ICINGA_LICENSE_HEADER}}}
 | |
| // {{{ICINGA_LICENSE_HEADER}}}
 | |
| 
 | |
| namespace Test\Monitoring\Testlib\Datasource\Strategies;
 | |
| 
 | |
| /***
 | |
|  * SetupStrategy implementation for PostgreSQL based IDO-Backends
 | |
|  *
 | |
|  * This strategy creates a new PostgreSQL Database and removes old ones
 | |
|  * if necessary. Per default the database user is icinga_unittest:icinga_unittest
 | |
|  * and the database to be created is also icinga_unittest.
 | |
|  **/
 | |
| class PgSQLSetupStrategy implements SetupStrategy {
 | |
| 
 | |
|     /**
 | |
|      * Tears down any existing databases and creates a new blank IDO scheme.
 | |
|      *
 | |
|      * The database is created according to the passed version (or using the
 | |
|      * newest version if no version is provided), using the idoPgSQL-%VERSION%.sql
 | |
|      * underneath the schemes folder.
 | |
|      * A \PDO Connection can be provided, if not the icinga_unittest default
 | |
|      * connection will be established and used.
 | |
|      *
 | |
|      * @param String $version   An optional version to use as the db scheme
 | |
|      * @param \PDO $connection  An optional connection to use instead of icinga_unittest
 | |
|      * @return \PDO             The connection that has been created
 | |
|      *
 | |
|      * @throws \PDOException    In case connecting to or creating the database fails
 | |
|      * @throws \Exception       In case of an invalid/non-existing DB scheme
 | |
|      */
 | |
|     public function setup($version = null, $connection = null)
 | |
|     {
 | |
|         if ($connection === null) {
 | |
|             $connection = new \PDO('pgsql:dbname=icinga_unittest', 'icinga_unittest', 'icinga_unittest');
 | |
|         }
 | |
| 
 | |
|         $connection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
 | |
|         $this->teardown($connection);
 | |
| 
 | |
|         // the latest schema doesn't have a suffix, so if no version is given this one is used
 | |
|         $sqlFileName = 'idoPgSQL'.($version !== null ? '-'.$version : '' ).'.sql';
 | |
|         $path = realpath(dirname(__FILE__).'/../schemes/'.$sqlFileName);
 | |
|         if (!file_exists($path)) {
 | |
|             throw new \Exception('File '.$path.' not found: Could not create scheme for IDO pgsql backend '.($version ? '(version : '.$version.')' :''));
 | |
|         }
 | |
|         $connection->setAttribute(\PDO::ATTR_EMULATE_PREPARES, true);
 | |
| 
 | |
|         if ($connection->query(file_get_contents($path)) === false) {
 | |
|             $error = $connection->errorInfo();;
 | |
|             throw new \PDOException($error[0].' : '.$error[2]);
 | |
|         }
 | |
|         return $connection;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Drops all tables from the connection via DROP TABLE
 | |
|      *
 | |
|      * @param \PDO $connection  An optional connection to use, if none is
 | |
|      *                          given the icinga_unittest default will be used
 | |
|      *
 | |
|      */
 | |
|     public function teardown($connection = null)
 | |
|     {
 | |
|         if ($connection === null) {
 | |
|             $connection = new \PDO('pgsql:dbname=icinga_unittest', 'icinga_unittest', 'icinga_unittest');
 | |
|         }
 | |
|         $tables = $connection
 | |
|             ->query('SELECT table_schema,table_name FROM information_schema.tables WHERE table_type = \'BASE TABLE\''.
 | |
|                     'AND table_schema = \'public\' ORDER BY table_schema,table_name;')
 | |
|             ->fetchAll();
 | |
| 
 | |
|         foreach($tables as $table) {
 | |
|             $connection->query('DROP TABLE '.$table['table_name']);
 | |
|         }
 | |
|     }
 | |
| } |