Ejemplo n.º 1
0
    def setUp(self):
        super(DatabaseAdminTest, self).setUp()
        self.mock_admin_command = self.mox.CreateMock(DatabaseAdminCommand)
        self.mock_database_copier = self.mox.CreateMock(DatabaseCopier)
        self.mock_data_populator = self.mox.CreateMock(RSRDataPopulator)
        self.mock_time_stamp_formatter = self.mox.CreateMock(
            TimeStampFormatter)
        self.mock_feedback = self.mox.CreateMock(ExecutionFeedback)

        self.database_admin = DatabaseAdmin(self.mock_admin_command,
                                            self.mock_database_copier,
                                            self.mock_data_populator,
                                            self.mock_time_stamp_formatter,
                                            self.mock_feedback)
Ejemplo n.º 2
0
 def create_with(database_credentials, deployment_host_config,
                 host_controller):
     return DatabaseHost(
         RSRSettingsVerifier.create_with(deployment_host_config,
                                         host_controller),
         RSRDatabaseConfig(database_credentials,
                           deployment_host_config.rsr_database_name),
         DatabaseAdmin.create_with(database_credentials,
                                   deployment_host_config, host_controller))
Ejemplo n.º 3
0
    def setUp(self):
        super(DatabaseAdminTest, self).setUp()
        self.mock_admin_command = self.mox.CreateMock(DatabaseAdminCommand)
        self.mock_database_copier = self.mox.CreateMock(DatabaseCopier)
        self.mock_data_populator = self.mox.CreateMock(RSRDataPopulator)
        self.mock_time_stamp_formatter = self.mox.CreateMock(TimeStampFormatter)
        self.mock_feedback = self.mox.CreateMock(ExecutionFeedback)

        self.database_admin = DatabaseAdmin(self.mock_admin_command, self.mock_database_copier, self.mock_data_populator,
                                            self.mock_time_stamp_formatter, self.mock_feedback)
Ejemplo n.º 4
0
    def test_can_create_instance(self):
        """fab.tests.database.mysql.database_admin_test  Can create a DatabaseAdmin instance"""

        deployment_host_config = CIDeploymentHostConfig.for_test()
        database_credentials = TemplateLoader.load_database_credentials()
        mock_host_controller = self.mox.CreateMock(RemoteHostController)
        mock_host_controller.feedback = self.mock_feedback

        self.mox.ReplayAll()

        self.assertIsInstance(DatabaseAdmin.create_with(database_credentials, deployment_host_config, mock_host_controller), DatabaseAdmin)
Ejemplo n.º 5
0
    def test_can_create_instance(self):
        """fab.tests.database.mysql.database_admin_test  Can create a DatabaseAdmin instance"""

        deployment_host_config = CIDeploymentHostConfig.for_test()
        database_credentials = TemplateLoader.load_database_credentials()
        mock_host_controller = self.mox.CreateMock(RemoteHostController)
        mock_host_controller.feedback = self.mock_feedback

        self.mox.ReplayAll()

        self.assertIsInstance(
            DatabaseAdmin.create_with(database_credentials,
                                      deployment_host_config,
                                      mock_host_controller), DatabaseAdmin)
Ejemplo n.º 6
0
class DatabaseAdminTest(mox.MoxTestBase):

    def setUp(self):
        super(DatabaseAdminTest, self).setUp()
        self.mock_admin_command = self.mox.CreateMock(DatabaseAdminCommand)
        self.mock_database_copier = self.mox.CreateMock(DatabaseCopier)
        self.mock_data_populator = self.mox.CreateMock(RSRDataPopulator)
        self.mock_time_stamp_formatter = self.mox.CreateMock(TimeStampFormatter)
        self.mock_feedback = self.mox.CreateMock(ExecutionFeedback)

        self.database_admin = DatabaseAdmin(self.mock_admin_command, self.mock_database_copier, self.mock_data_populator,
                                            self.mock_time_stamp_formatter, self.mock_feedback)

    def test_can_create_instance(self):
        """fab.tests.database.mysql.database_admin_test  Can create a DatabaseAdmin instance"""

        deployment_host_config = CIDeploymentHostConfig.for_test()
        database_credentials = TemplateLoader.load_database_credentials()
        mock_host_controller = self.mox.CreateMock(RemoteHostController)
        mock_host_controller.feedback = self.mock_feedback

        self.mox.ReplayAll()

        self.assertIsInstance(DatabaseAdmin.create_with(database_credentials, deployment_host_config, mock_host_controller), DatabaseAdmin)

    def test_can_create_timestamped_backup_of_existing_database(self):
        """fab.tests.database.mysql.database_admin_test  Can create time-stamped backup of an existing database"""

        expected_duplicate_database_name = 'projects_db_20111014'

        self.mock_admin_command.database_exists('projects_db').AndReturn(True)
        self.mock_time_stamp_formatter.append_timestamp('projects_db').AndReturn(expected_duplicate_database_name)
        self.mock_admin_command.create_empty_database(expected_duplicate_database_name)
        self.mock_database_copier.create_duplicate('projects_db', expected_duplicate_database_name)
        self.mox.ReplayAll()

        self.database_admin.create_timestamped_backup_database('projects_db')

    def test_does_not_attempt_to_create_backup_of_nonexistent_database(self):
        """fab.tests.database.mysql.database_admin_test  Does not attempt to create a backup of a non-existent database"""

        self.mock_admin_command.database_exists('non_existent_db').AndReturn(False)
        self.mock_feedback.comment('No backup required for database: non_existent_db')
        self.mox.ReplayAll()

        self.database_admin.create_timestamped_backup_database('non_existent_db')

    def test_can_rebuild_existing_database_with_existing_user(self):
        """fab.tests.database.mysql.database_admin_test  Can rebuild an existing database with an existing user"""

        self._create_empty_database("projects_db", database_exists=True)
        self._grant_database_permissions_for_user('projects_db', 'joe', 'some_password', user_exists=True)
        self._initialise_and_populate_database('projects_db')
        self.mox.ReplayAll()

        self.database_admin.rebuild_database('projects_db', 'joe', 'some_password')

    def test_can_rebuild_new_database_with_existing_user(self):
        """fab.tests.database.mysql.database_admin_test  Can rebuild a new database with an existing user"""

        self._create_empty_database('projects_db', database_exists=False)
        self._grant_database_permissions_for_user('projects_db', 'joe', 'some_password', user_exists=True)
        self._initialise_and_populate_database('projects_db')
        self.mox.ReplayAll()

        self.database_admin.rebuild_database('projects_db', 'joe', 'some_password')

    def test_can_rebuild_existing_database_with_new_user(self):
        """fab.tests.database.mysql.database_admin_test  Can rebuild an existing database with a new user"""

        self._create_empty_database('projects_db', database_exists=True)
        self._grant_database_permissions_for_user('projects_db', 'joe', 'some_password', user_exists=False)
        self._initialise_and_populate_database('projects_db')
        self.mox.ReplayAll()

        self.database_admin.rebuild_database('projects_db', 'joe', 'some_password')

    def test_can_rebuild_new_database_with_new_user(self):
        """fab.tests.database.mysql.database_admin_test  Can rebuild a new database with a new user"""

        self._create_empty_database('projects_db', database_exists=False)
        self._grant_database_permissions_for_user('projects_db', 'joe', 'some_password', user_exists=False)
        self._initialise_and_populate_database('projects_db')
        self.mox.ReplayAll()

        self.database_admin.rebuild_database('projects_db', 'joe', 'some_password')

    def _create_empty_database(self, database_name, database_exists):
        self.mock_feedback.comment("Creating empty database '%s'" % database_name)
        self.mock_admin_command.database_exists(database_name).AndReturn(database_exists)
        if database_exists:
            self.mock_admin_command.drop_database(database_name)

        self.mock_admin_command.create_empty_database(database_name)

    def _grant_database_permissions_for_user(self, database_name, user_name, password, user_exists):
        self.mock_feedback.comment("Granting all database permissions to user '%s'" % user_name)
        self.mock_admin_command.user_exists(user_name).AndReturn(user_exists)
        if not user_exists:
            self.mock_admin_command.create_user_account(user_name, password)

        self.mock_admin_command.grant_all_database_permissions_for_user(user_name, database_name)

    def _initialise_and_populate_database(self, database_name):
        self.mock_data_populator.initialise_database()
        self.mock_data_populator.populate_database(database_name)

    def test_can_run_new_rsr_migrations(self):
        """fab.tests.database.mysql.database_admin_test  Can run new RSR migrations"""

        self.mock_data_populator.run_new_rsr_migrations()
        self.mox.ReplayAll()

        self.database_admin.run_new_rsr_migrations()
Ejemplo n.º 7
0
class DatabaseAdminTest(mox.MoxTestBase):
    def setUp(self):
        super(DatabaseAdminTest, self).setUp()
        self.mock_admin_command = self.mox.CreateMock(DatabaseAdminCommand)
        self.mock_database_copier = self.mox.CreateMock(DatabaseCopier)
        self.mock_data_populator = self.mox.CreateMock(RSRDataPopulator)
        self.mock_time_stamp_formatter = self.mox.CreateMock(
            TimeStampFormatter)
        self.mock_feedback = self.mox.CreateMock(ExecutionFeedback)

        self.database_admin = DatabaseAdmin(self.mock_admin_command,
                                            self.mock_database_copier,
                                            self.mock_data_populator,
                                            self.mock_time_stamp_formatter,
                                            self.mock_feedback)

    def test_can_create_instance(self):
        """fab.tests.database.mysql.database_admin_test  Can create a DatabaseAdmin instance"""

        deployment_host_config = CIDeploymentHostConfig.for_test()
        database_credentials = TemplateLoader.load_database_credentials()
        mock_host_controller = self.mox.CreateMock(RemoteHostController)
        mock_host_controller.feedback = self.mock_feedback

        self.mox.ReplayAll()

        self.assertIsInstance(
            DatabaseAdmin.create_with(database_credentials,
                                      deployment_host_config,
                                      mock_host_controller), DatabaseAdmin)

    def test_can_create_timestamped_backup_of_existing_database(self):
        """fab.tests.database.mysql.database_admin_test  Can create time-stamped backup of an existing database"""

        expected_duplicate_database_name = 'projects_db_20111014'

        self.mock_admin_command.database_exists('projects_db').AndReturn(True)
        self.mock_time_stamp_formatter.append_timestamp(
            'projects_db').AndReturn(expected_duplicate_database_name)
        self.mock_admin_command.create_empty_database(
            expected_duplicate_database_name)
        self.mock_database_copier.create_duplicate(
            'projects_db', expected_duplicate_database_name)
        self.mox.ReplayAll()

        self.database_admin.create_timestamped_backup_database('projects_db')

    def test_does_not_attempt_to_create_backup_of_nonexistent_database(self):
        """fab.tests.database.mysql.database_admin_test  Does not attempt to create a backup of a non-existent database"""

        self.mock_admin_command.database_exists('non_existent_db').AndReturn(
            False)
        self.mock_feedback.comment(
            'No backup required for database: non_existent_db')
        self.mox.ReplayAll()

        self.database_admin.create_timestamped_backup_database(
            'non_existent_db')

    def test_can_rebuild_existing_database_with_existing_user(self):
        """fab.tests.database.mysql.database_admin_test  Can rebuild an existing database with an existing user"""

        self._create_empty_database("projects_db", database_exists=True)
        self._grant_database_permissions_for_user('projects_db',
                                                  'joe',
                                                  'some_password',
                                                  user_exists=True)
        self._initialise_and_populate_database('projects_db')
        self.mox.ReplayAll()

        self.database_admin.rebuild_database('projects_db', 'joe',
                                             'some_password')

    def test_can_rebuild_new_database_with_existing_user(self):
        """fab.tests.database.mysql.database_admin_test  Can rebuild a new database with an existing user"""

        self._create_empty_database('projects_db', database_exists=False)
        self._grant_database_permissions_for_user('projects_db',
                                                  'joe',
                                                  'some_password',
                                                  user_exists=True)
        self._initialise_and_populate_database('projects_db')
        self.mox.ReplayAll()

        self.database_admin.rebuild_database('projects_db', 'joe',
                                             'some_password')

    def test_can_rebuild_existing_database_with_new_user(self):
        """fab.tests.database.mysql.database_admin_test  Can rebuild an existing database with a new user"""

        self._create_empty_database('projects_db', database_exists=True)
        self._grant_database_permissions_for_user('projects_db',
                                                  'joe',
                                                  'some_password',
                                                  user_exists=False)
        self._initialise_and_populate_database('projects_db')
        self.mox.ReplayAll()

        self.database_admin.rebuild_database('projects_db', 'joe',
                                             'some_password')

    def test_can_rebuild_new_database_with_new_user(self):
        """fab.tests.database.mysql.database_admin_test  Can rebuild a new database with a new user"""

        self._create_empty_database('projects_db', database_exists=False)
        self._grant_database_permissions_for_user('projects_db',
                                                  'joe',
                                                  'some_password',
                                                  user_exists=False)
        self._initialise_and_populate_database('projects_db')
        self.mox.ReplayAll()

        self.database_admin.rebuild_database('projects_db', 'joe',
                                             'some_password')

    def _create_empty_database(self, database_name, database_exists):
        self.mock_feedback.comment("Creating empty database '%s'" %
                                   database_name)
        self.mock_admin_command.database_exists(database_name).AndReturn(
            database_exists)
        if database_exists:
            self.mock_admin_command.drop_database(database_name)

        self.mock_admin_command.create_empty_database(database_name)

    def _grant_database_permissions_for_user(self, database_name, user_name,
                                             password, user_exists):
        self.mock_feedback.comment(
            "Granting all database permissions to user '%s'" % user_name)
        self.mock_admin_command.user_exists(user_name).AndReturn(user_exists)
        if not user_exists:
            self.mock_admin_command.create_user_account(user_name, password)

        self.mock_admin_command.grant_all_database_permissions_for_user(
            user_name, database_name)

    def _initialise_and_populate_database(self, database_name):
        self.mock_data_populator.initialise_database()
        self.mock_data_populator.populate_database(database_name)

    def test_can_run_new_rsr_migrations(self):
        """fab.tests.database.mysql.database_admin_test  Can run new RSR migrations"""

        self.mock_data_populator.run_new_rsr_migrations()
        self.mox.ReplayAll()

        self.database_admin.run_new_rsr_migrations()
Ejemplo n.º 8
0
 def create_with(database_credentials, deployment_host_config, host_controller):
     return DatabaseHost(RSRSettingsVerifier.create_with(deployment_host_config, host_controller),
                         RSRDatabaseConfig(database_credentials, deployment_host_config.rsr_database_name),
                         DatabaseAdmin.create_with(database_credentials, deployment_host_config, host_controller))