From c381fe1caf2b285cbd4f72c9e6c5ed56340597e8 Mon Sep 17 00:00:00 2001 From: Dima Nagorniy Date: Wed, 4 Jan 2017 11:51:33 +0200 Subject: [PATCH 1/2] AUD-83: Unit tests for alter audit table command --- src/MySql/AuditAlter.php | 10 +-- .../AlterAuditTableCommandTestCase.php | 90 +++++++++++++++++++ .../AlterDataToAudit/AlterDataToAuditTest.php | 73 +++++++++++++++ .../config/alter-table-sql-result.sql | 3 + .../AlterDataToAudit/config/audit.json | 23 +++++ .../config/audit_metadata.json | 19 ++++ .../config/edit_column_type.sql | 1 + .../AlterDataToAudit/config/setup.sql | 6 ++ 8 files changed, 219 insertions(+), 6 deletions(-) create mode 100755 test/MySql/AlterAuditTableCommand/AlterAuditTableCommandTestCase.php create mode 100755 test/MySql/AlterAuditTableCommand/AlterDataToAudit/AlterDataToAuditTest.php create mode 100644 test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/alter-table-sql-result.sql create mode 100644 test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/audit.json create mode 100644 test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/audit_metadata.json create mode 100755 test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/edit_column_type.sql create mode 100755 test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/setup.sql diff --git a/src/MySql/AuditAlter.php b/src/MySql/AuditAlter.php index ca90fcf..0072464 100755 --- a/src/MySql/AuditAlter.php +++ b/src/MySql/AuditAlter.php @@ -88,7 +88,7 @@ public function createSqlStatement($tableName, $columns) { $editCharSet = false; $charSet = ''; - $this->codeStore->append(sprintf('ALTER TABLE %s CHANGE', $tableName)); + $this->codeStore->append(sprintf('ALTER TABLE %s.`%s` CHANGE', $this->config['database']['audit_schema'], $tableName)); $countMax = $columns->getNumberOfColumns(); $count = 1; /** @var MultiSourceColumnMetadata $rowMetadata */ @@ -110,7 +110,7 @@ public function createSqlStatement($tableName, $columns) $editCharSet = true; $charSet = $configMetadata['character_set_name']; } - $line = sprintf('%s %s %s', $columnName, $columnName, $configMetadata['column_type']); + $line = sprintf('`%s` `%s` %s', $columnName, $columnName, $configMetadata['column_type']); if ($count!=$countMax) $line .= ','; $this->codeStore->append($line); } @@ -121,7 +121,7 @@ public function createSqlStatement($tableName, $columns) $editCharSet = true; $charSet = $dataMetadata['character_set_name']; } - $line = sprintf('%s %s %s', $columnName, $columnName, $dataMetadata['column_type']); + $line = sprintf('`%s` `%s` %s', $columnName, $columnName, $dataMetadata['column_type']); if ($count!=$countMax) $line .= ','; $this->codeStore->append($line); } @@ -130,12 +130,10 @@ public function createSqlStatement($tableName, $columns) $this->codeStore->append(';'); if ($editCharSet) { - $this->codeStore->append(sprintf('ALTER TABLE %s DEFAULT CHARACTER SET %s;', $tableName, $charSet)); + $this->codeStore->append(sprintf('ALTER TABLE %s.`%s` DEFAULT CHARACTER SET %s;', $this->config['database']['audit_schema'], $tableName, $charSet)); } } - - //-------------------------------------------------------------------------------------------------------------------- /** * The main method: executes the create alter table statement actions for tables. diff --git a/test/MySql/AlterAuditTableCommand/AlterAuditTableCommandTestCase.php b/test/MySql/AlterAuditTableCommand/AlterAuditTableCommandTestCase.php new file mode 100755 index 0000000..e0aac7a --- /dev/null +++ b/test/MySql/AlterAuditTableCommand/AlterAuditTableCommandTestCase.php @@ -0,0 +1,90 @@ +add(new AuditCommand()); + + /** @var AuditCommand $command */ + $command = $application->find('audit'); + $command->setRewriteConfigFile(true); + $commandTester = new CommandTester($command); + $commandTester->execute(['command' => $command->getName(), + 'config file' => self::$dir.'/config/audit.json']); + + // Reconnects to the MySQL instance (because the audit command always disconnects from the MySQL instance). + StaticDataLayer::connect('localhost', 'test', 'test', self::$dataSchema); + } + + //-------------------------------------------------------------------------------------------------------------------- + /** + * Runs the alter-audit-table command, i.e. creates the alter table sql statement. + * + * @param int $statusCode The expected status code of the command. + * @param bool $rewriteConfigFile If true the config file will be rewritten. + */ + protected function runAlter($statusCode = 0, $rewriteConfigFile = false) + { + $application = new Application(); + $application->add(new AlterAuditTableCommand()); + + /** @var AlterAuditTableCommand $command */ + $command = $application->find('alter-audit-table'); + $command->setRewriteConfigFile($rewriteConfigFile); + $commandTester = new CommandTester($command); + $commandTester->execute(['command' => $command->getName(), + 'config file' => self::$dir.'/config/audit.json', + 'sql file' => self::$dir.'/config/alter-table-sql-result.sql']); + + $this->assertSame($statusCode, $commandTester->getStatusCode(), 'status_code'); + + // Reconnects to the MySQL instance (because the audit command always disconnects from the MySQL instance). + StaticDataLayer::connect('localhost', 'test', 'test', self::$dataSchema); + } + + //-------------------------------------------------------------------------------------------------------------------- +} + +//---------------------------------------------------------------------------------------------------------------------- diff --git a/test/MySql/AlterAuditTableCommand/AlterDataToAudit/AlterDataToAuditTest.php b/test/MySql/AlterAuditTableCommand/AlterDataToAudit/AlterDataToAuditTest.php new file mode 100755 index 0000000..69402e9 --- /dev/null +++ b/test/MySql/AlterAuditTableCommand/AlterDataToAudit/AlterDataToAuditTest.php @@ -0,0 +1,73 @@ +runAudit(); + + // TABLE1 MUST exist. + $tables = AuditDataLayer::getTablesNames(self::$auditSchema); + $this->assertNotNull(StaticDataLayer::searchInRowSet('table_name', 'TABLE1', $tables)); + + // Edit column type in data schema. + StaticDataLayer::multiQuery(file_get_contents(__DIR__.'/config/edit_column_type.sql')); + + // TABLE1 must have column c4 - int(12). + $actual = AuditDataLayer::getTableColumns(self::$auditSchema, 'TABLE1'); + + $expected = []; + $expected[] = ['column_name' => 'c1', + 'column_type' => 'tinyint(4)', + 'is_nullable' => 'YES', + 'character_set_name' => null, + 'collation_name' => null]; + $expected[] = ['column_name' => 'c2', + 'column_type' => 'smallint(6)', + 'is_nullable' => 'YES', + 'character_set_name' => null, + 'collation_name' => null]; + $expected[] = ['column_name' => 'c4', + 'column_type' => 'int(11)', + 'is_nullable' => 'YES', + 'character_set_name' => null, + 'collation_name' => null]; + + $this->assertSame($expected, $actual); + + $this->runAlter(); + + $this->assertSame(file_get_contents(__DIR__.'/config/alter-table-sql-result.sql'), + 'ALTER TABLE test_audit.`TABLE1` CHANGE + `c4` `c4` int(12) +; +'); + } + + //-------------------------------------------------------------------------------------------------------------------- +} + +//---------------------------------------------------------------------------------------------------------------------- diff --git a/test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/alter-table-sql-result.sql b/test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/alter-table-sql-result.sql new file mode 100644 index 0000000..e0ce1a9 --- /dev/null +++ b/test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/alter-table-sql-result.sql @@ -0,0 +1,3 @@ +ALTER TABLE test_audit.`TABLE1` CHANGE + `c4` `c4` int(12) +; diff --git a/test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/audit.json b/test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/audit.json new file mode 100644 index 0000000..759435b --- /dev/null +++ b/test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/audit.json @@ -0,0 +1,23 @@ +{ + "database": { + "host": "localhost", + "user": "test", + "password": "test", + "data_schema": "test_data", + "audit_schema": "test_audit" + }, + "metadata": "audit_metadata.json", + "tables": { + "TABLE1": { + "audit": true, + "skip": null, + "alias": "t1" + } + }, + "audit_columns": [ + + ], + "additional_sql": [ + + ] +} \ No newline at end of file diff --git a/test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/audit_metadata.json b/test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/audit_metadata.json new file mode 100644 index 0000000..1b7cc90 --- /dev/null +++ b/test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/audit_metadata.json @@ -0,0 +1,19 @@ +{ + "TABLE1": [ + { + "column_name": "c1", + "column_type": "tinyint(4)", + "is_nullable": "YES" + }, + { + "column_name": "c2", + "column_type": "smallint(6)", + "is_nullable": "YES" + }, + { + "column_name": "c4", + "column_type": "int(11)", + "is_nullable": "YES" + } + ] +} \ No newline at end of file diff --git a/test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/edit_column_type.sql b/test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/edit_column_type.sql new file mode 100755 index 0000000..9628b8f --- /dev/null +++ b/test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/edit_column_type.sql @@ -0,0 +1 @@ +alter table `TABLE1` modify `c4` int(12); \ No newline at end of file diff --git a/test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/setup.sql b/test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/setup.sql new file mode 100755 index 0000000..efdd272 --- /dev/null +++ b/test/MySql/AlterAuditTableCommand/AlterDataToAudit/config/setup.sql @@ -0,0 +1,6 @@ +CREATE TABLE `TABLE1` ( + c1 tinyint, + c2 smallint, + c4 int +); + From b87ee5de71dfae3a4e10245a39c66daaa856511f Mon Sep 17 00:00:00 2001 From: Dima Nagorniy Date: Thu, 5 Jan 2017 13:34:08 +0200 Subject: [PATCH 2/2] AUD-83: Unit tests for alter audit table command.Fixed character set name in test. --- .../AlterDataToAudit/AlterDataToAuditTest.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/MySql/AlterAuditTableCommand/AlterDataToAudit/AlterDataToAuditTest.php b/test/MySql/AlterAuditTableCommand/AlterDataToAudit/AlterDataToAuditTest.php index 69402e9..46f769a 100755 --- a/test/MySql/AlterAuditTableCommand/AlterDataToAudit/AlterDataToAuditTest.php +++ b/test/MySql/AlterAuditTableCommand/AlterDataToAudit/AlterDataToAuditTest.php @@ -60,11 +60,12 @@ public function test01() $this->runAlter(); + $tableOptions = AuditDataLayer::getTableOptions(self::$dataSchema, 'TABLE1'); $this->assertSame(file_get_contents(__DIR__.'/config/alter-table-sql-result.sql'), - 'ALTER TABLE test_audit.`TABLE1` CHANGE + sprintf('ALTER TABLE `test_audit`.`TABLE1` CHANGE `c4` `c4` int(12) ; -'); +ALTER TABLE `test_audit`.`TABLE1` DEFAULT CHARACTER SET %s', $tableOptions['character_set_name'])); } //--------------------------------------------------------------------------------------------------------------------