Exemplo n.º 1
0
 public function setUp()
 {
     $this->testHandler = new Monolog\Handler\TestHandler();
     dbsteward::get_logger()->pushHandler($this->testHandler);
     dbsteward::set_sql_format('pgsql8');
     pgsql8::$table_slony_ids = array();
     pgsql8::$sequence_slony_ids = array();
 }
Exemplo n.º 2
0
 public function setUp()
 {
     parent::setUp();
     dbsteward::set_sql_format('pgsql8');
     // reset these flags before each test
     pgsql8_diff::$as_transaction = TRUE;
     dbsteward::$require_slony_set_id = FALSE;
     dbsteward::$require_slony_id = FALSE;
     dbsteward::$generate_slonik = FALSE;
     dbsteward::$slonyid_set_value = 1;
     dbsteward::$slonyid_start_value = 1;
     // clear these before each test so we don't run into conflicts
     pgsql8::$table_slony_ids = array();
     pgsql8::$sequence_slony_ids = array();
     pgsql8_diff::$new_table_dependency = null;
     pgsql8_diff::$old_table_dependency = null;
     // rest test fixtures
     $this->in_doc = null;
     $this->slonyid_doc = null;
 }
Exemplo n.º 3
0
 public function setUp()
 {
     parent::setUp();
     dbsteward::set_sql_format('pgsql8');
     // reset these flags before each test
     pgsql8_diff::$as_transaction = TRUE;
     dbsteward::$generate_slonik = FALSE;
     // clear these before each test so we don't run into conflicts
     pgsql8::$table_slony_ids = array();
     pgsql8::$sequence_slony_ids = array();
     pgsql8_diff::$new_table_dependency = null;
     pgsql8_diff::$old_table_dependency = null;
 }
    private function common_mismatch($a, $b, $expected)
    {
        $docxml = <<<XML
<dbsteward>
  <database>
    <host>db-host</host>
    <name>dbsteward</name>
    <role>
      <application>dbsteward_phpunit_app</application>
      <owner>deployment</owner>
      <replication/>
      <readonly/>
    </role>
    <slony clusterName="duplicate_slony_ids_testsuite">
      <slonyNode id="1" comment="DSI - Local Primary"  dbName="test" dbHost="db-dev1" dbUser="******" dbPassword="******"/>
      <slonyNode id="2" comment="DSI - Local Backup"   dbName="test" dbHost="db-dev1" dbUser="******" dbPassword="******"/>
      <slonyNode id="3" comment="DSI - Local Backup"   dbName="test" dbHost="db-dev1" dbUser="******" dbPassword="******"/>
      <slonyReplicaSet id="100" originNodeId="1" upgradeSetId="101" comment="common duplicate testing database definition">
        <slonyReplicaSetNode id="2" providerNodeId="1"/>
        <slonyReplicaSetNode id="3" providerNodeId="2"/>
      </slonyReplicaSet>
    </slony>
    <configurationParameter name="TIME ZONE" value="America/New_York"/>
  </database>
  <schema name="dbsteward" owner="ROLE_OWNER">
XML;
        $adoc = new SimpleXMLElement($docxml . $a . "</schema></dbsteward>");
        $bdoc = new SimpleXMLElement($docxml . $b . "</schema></dbsteward>");
        pgsql8::$table_slony_ids = array();
        pgsql8::$sequence_slony_ids = array();
        pgsql8::$known_pg_identifiers = array();
        // for ease in testing, since replica_sets will be the same between
        // adoc and bdoc, just use adoc for iterating over replica sets
        $replica_sets = pgsql8::get_slony_replica_sets($adoc);
        if ($expected !== false) {
            $this->expect_exception($expected, function () use($adoc, $bdoc, $replica_sets) {
                foreach ($replica_sets as $replica_set) {
                    pgsql8::build_upgrade_slonik_replica_set($adoc, $bdoc, $replica_set, $replica_set, __DIR__ . '/../testdata/DuplicateSlonyIdsTest');
                }
            });
        } else {
            $this->expect_no_exception(function () use($adoc, $bdoc, $replica_sets) {
                foreach ($replica_sets as $replica_set) {
                    pgsql8::build_upgrade_slonik_replica_set($adoc, $bdoc, $replica_set, $replica_set, __DIR__ . '/../testdata/DuplicateSlonyIdsTest');
                }
            });
        }
    }
Exemplo n.º 5
0
    /** Generates DDL for a build or upgrade given dbxml fragments **/
    private function common($old, $new = FALSE, $generate_slonik = TRUE)
    {
        pgsql8::$table_slony_ids = array();
        pgsql8::$sequence_slony_ids = array();
        pgsql8::$known_pg_identifiers = array();
        if (is_string($old) && empty($old)) {
            //      $old = <<<XML
            //<table name="foo" owner="ROLE_OWNER" primaryKey="id" slonyId="1">
            //  <column name="id" type="int"/>
            //</table>
            //<sequence name="seq" owner="ROLE_OWNER" slonyId="4"/>
            //XML;
        }
        $xml_a = <<<XML
<dbsteward>
  <database>
    <host>db-host</host>
    <name>dbsteward</name>
    <role>
      <application>dbsteward_phpunit_app</application>
      <owner>deployment</owner>
      <replication/>
      <readonly/>
    </role>
    <slony clusterName="duplicate_slony_ids_testsuite">
      <slonyNode id="1" comment="DSI - Local Primary"  dbName="test" dbHost="db-dev1" dbUser="******" dbPassword="******"/>
      <slonyNode id="2" comment="DSI - Local Backup"   dbName="test" dbHost="db-dev1" dbUser="******" dbPassword="******"/>
      <slonyNode id="3" comment="DSI - Local Backup"   dbName="test" dbHost="db-dev1" dbUser="******" dbPassword="******"/>
      <slonyReplicaSet id="100" originNodeId="1" upgradeSetId="101" comment="common duplicate testing database definition">
        <slonyReplicaSetNode id="2" providerNodeId="1"/>
        <slonyReplicaSetNode id="3" providerNodeId="2"/>
      </slonyReplicaSet>
    </slony>
    <configurationParameter name="TIME ZONE" value="America/New_York"/>
  </database>
  <schema name="dbsteward" owner="ROLE_OWNER">
    {$old}
  </schema>
</dbsteward>
XML;
        $this->set_xml_content_a($xml_a);
        if ($new) {
            $xml_b = <<<XML
<dbsteward>
  <database>
    <host>db-host</host>
    <name>dbsteward</name>
    <role>
      <application>dbsteward_phpunit_app</application>
      <owner>deployment</owner>
      <replication/>
      <readonly/>
    </role>
    <slony clusterName="duplicate_slony_ids_testsuite">
      <slonyNode id="1" comment="DSI - Local Primary"  dbName="test" dbHost="db-dev1" dbUser="******" dbPassword="******"/>
      <slonyNode id="2" comment="DSI - Local Backup"   dbName="test" dbHost="db-dev1" dbUser="******" dbPassword="******"/>
      <slonyNode id="3" comment="DSI - Local Backup"   dbName="test" dbHost="db-dev1" dbUser="******" dbPassword="******"/>
      <slonyReplicaSet id="100" originNodeId="1" upgradeSetId="101" comment="common duplicate testing database definition">
        <slonyReplicaSetNode id="2" providerNodeId="1"/>
        <slonyReplicaSetNode id="3" providerNodeId="2"/>
      </slonyReplicaSet>
    </slony>
    <configurationParameter name="TIME ZONE" value="America/New_York"/>
  </database>
  <schema name="dbsteward" owner="ROLE_OWNER">
    {$new}
  </schema>
</dbsteward>
XML;
            $this->set_xml_content_b($xml_b);
            ob_start();
            try {
                // new parameters for function:
                // $old_output_prefix, $old_composite_file, $old_db_doc, $old_files, $new_output_prefix, $new_composite_file, $new_db_doc, $new_files
                $old_db_doc = simplexml_load_file($this->xml_file_a);
                $new_db_doc = simplexml_load_file($this->xml_file_b);
                dbsteward::$generate_slonik = $generate_slonik;
                pgsql8::build_upgrade('', $old_db_doc, $old_db_doc, array(), $this->output_prefix, $new_db_doc, $new_db_doc, array());
                ob_end_clean();
            } catch (Exception $ex) {
                ob_end_clean();
                throw $ex;
            }
        } else {
            ob_start();
            try {
                $db_doc = simplexml_load_file($this->xml_file_a);
                dbsteward::$generate_slonik = $generate_slonik;
                pgsql8::build($this->output_prefix, $db_doc);
                ob_end_clean();
            } catch (Exception $ex) {
                ob_end_clean();
                throw $ex;
            }
        }
    }
 protected function upgrade_db_pgsql8()
 {
     $this->apply_options_pgsql8();
     // make sure we clear these in case we ran something else before this
     pgsql8::$table_slony_ids = array();
     pgsql8::$sequence_slony_ids = array();
     pgsql8::$known_pg_identifiers = array();
     // build the upgrade DDL first, incase dbsteward code wants to throw about something
     $old_db_doc = xml_parser::xml_composite(array($this->xml_file_a));
     $new_db_doc = xml_parser::xml_composite(array($this->xml_file_b));
     pgsql8::build_upgrade('', $old_db_doc, $old_db_doc, array(), $this->output_prefix, $new_db_doc, $new_db_doc, array());
     // upgrade database to "B" with each stage file
     $this->assertStringNotEqualsFile($this->output_prefix . '_upgrade_stage1_schema1.sql', '');
     $this->pgsql8->run_file($this->output_prefix . '_upgrade_stage1_schema1.sql');
     $this->pgsql8->run_file($this->output_prefix . '_upgrade_stage2_data1.sql');
     $this->pgsql8->run_file($this->output_prefix . '_upgrade_stage3_schema1.sql');
     $this->pgsql8->run_file($this->output_prefix . '_upgrade_stage4_data1.sql');
     //@TODO: confirm tables defined in B are present
 }
 public function setUp()
 {
     parent::setUp();
     dbsteward::set_sql_format('pgsql8');
     // reset runtime mode flags to their default
     dbsteward::$single_stage_upgrade = FALSE;
     dbsteward::$generate_slonik = FALSE;
     pgsql8_diff::$as_transaction = TRUE;
     // reset runtime tracking variables
     pgsql8::$table_slony_ids = array();
     pgsql8::$sequence_slony_ids = array();
     pgsql8::$known_pg_identifiers = array();
     pgsql8_diff::$new_table_dependency = null;
     pgsql8_diff::$old_table_dependency = null;
 }