def setUp(self, *args, **kwargs): super(GuestAgentManagerTest, self).setUp() # TODO(pmalik): Remove this line when # https://review.openstack.org/#/c/308707/ merges. self.patch_datastore_manager('vertica') self.context = trove_testtools.TroveTestContext(self) self.manager = Manager() self.origin_format = volume.VolumeDevice.format self.origin_migrate_data = volume.VolumeDevice.migrate_data self.origin_mount = volume.VolumeDevice.mount self.origin_unmount = volume.VolumeDevice.unmount self.origin_mount_points = volume.VolumeDevice.mount_points self.origin_set_read = volume.VolumeDevice.set_readahead_size self.origin_install_vertica = VerticaApp.install_vertica self.origin_create_db = VerticaApp.create_db self.origin_stop_db = VerticaApp.stop_db self.origin_start_db = VerticaApp.start_db self.origin_restart = VerticaApp.restart self.origin_install_if = VerticaApp.install_if_needed self.origin_enable_root = VerticaApp.enable_root self.origin_is_root_enabled = VerticaApp.is_root_enabled self.origin_prepare_for_install_vertica = ( VerticaApp.prepare_for_install_vertica) self.origin_add_udls = VerticaApp.add_udls
def setUp(self): super(GuestAgentManagerTest, self).setUp() self.context = TroveContext() self.manager = Manager() self.origin_format = volume.VolumeDevice.format self.origin_migrate_data = volume.VolumeDevice.migrate_data self.origin_mount = volume.VolumeDevice.mount self.origin_unmount = volume.VolumeDevice.unmount self.origin_mount_points = volume.VolumeDevice.mount_points self.origin_os_path_exists = os.path.exists self.origin_prep_for_install = VerticaApp.prepare_for_install_vertica self.origin_install_vertica = VerticaApp.install_vertica self.origin_create_db = VerticaApp.create_db self.origin_stop_db = VerticaApp.stop_db self.origin_start_db = VerticaApp.start_db self.origin_restart = VerticaApp.restart self.origin_install_if = VerticaApp.install_if_needed self.origin_complete_install = VerticaApp.complete_install_or_restart
class GuestAgentManagerTest(trove_testtools.TestCase): @patch.object(ImportOverrideStrategy, '_initialize_import_directory') @patch.multiple(operating_system, exists=DEFAULT, write_file=DEFAULT, chown=DEFAULT, chmod=DEFAULT) def setUp(self, *args, **kwargs): super(GuestAgentManagerTest, self).setUp() # TODO(pmalik): Remove this line when # https://review.openstack.org/#/c/308707/ merges. self.patch_datastore_manager('vertica') self.context = trove_testtools.TroveTestContext(self) self.manager = Manager() self.origin_format = volume.VolumeDevice.format self.origin_migrate_data = volume.VolumeDevice.migrate_data self.origin_mount = volume.VolumeDevice.mount self.origin_unmount = volume.VolumeDevice.unmount self.origin_mount_points = volume.VolumeDevice.mount_points self.origin_set_read = volume.VolumeDevice.set_readahead_size self.origin_install_vertica = VerticaApp.install_vertica self.origin_create_db = VerticaApp.create_db self.origin_stop_db = VerticaApp.stop_db self.origin_start_db = VerticaApp.start_db self.origin_restart = VerticaApp.restart self.origin_install_if = VerticaApp.install_if_needed self.origin_enable_root = VerticaApp.enable_root self.origin_is_root_enabled = VerticaApp.is_root_enabled self.origin_prepare_for_install_vertica = ( VerticaApp.prepare_for_install_vertica) self.origin_add_udls = VerticaApp.add_udls def tearDown(self): super(GuestAgentManagerTest, self).tearDown() volume.VolumeDevice.format = self.origin_format volume.VolumeDevice.migrate_data = self.origin_migrate_data volume.VolumeDevice.mount = self.origin_mount volume.VolumeDevice.unmount = self.origin_unmount volume.VolumeDevice.mount_points = self.origin_mount_points volume.VolumeDevice.set_readahead_size = self.origin_set_read VerticaApp.create_db = self.origin_create_db VerticaApp.install_vertica = self.origin_install_vertica VerticaApp.stop_db = self.origin_stop_db VerticaApp.start_db = self.origin_start_db VerticaApp.restart = self.origin_restart VerticaApp.install_if_needed = self.origin_install_if VerticaApp.enable_root = self.origin_enable_root VerticaApp.is_root_enabled = self.origin_is_root_enabled VerticaApp.prepare_for_install_vertica = ( self.origin_prepare_for_install_vertica) VerticaApp.add_udls = self.origin_add_udls def test_update_status(self): mock_status = MagicMock() self.manager.appStatus = mock_status self.manager.update_status(self.context) mock_status.update.assert_any_call() @patch.object(path, 'exists', MagicMock()) @patch.object(configuration.ConfigurationManager, 'save_configuration') def _prepare_dynamic(self, packages, config_content='MockContent', device_path='/dev/vdb', backup_id=None, overrides=None, is_mounted=False): # covering all outcomes is starting to cause trouble here expected_vol_count = 1 if device_path else 0 if not backup_id: backup_info = {'id': backup_id, 'location': 'fake-location', 'type': 'InnoBackupEx', 'checksum': 'fake-checksum', } mock_status = MagicMock() self.manager.appStatus = mock_status mock_status.begin_install = MagicMock(return_value=None) volume.VolumeDevice.format = MagicMock(return_value=None) volume.VolumeDevice.migrate_data = MagicMock(return_value=None) volume.VolumeDevice.mount = MagicMock(return_value=None) mount_points = [] if is_mounted: mount_points = ['/mnt'] VolumeDevice.mount_points = MagicMock(return_value=mount_points) VolumeDevice.unmount = MagicMock(return_value=None) VerticaApp.install_if_needed = MagicMock(return_value=None) VerticaApp.install_vertica = MagicMock(return_value=None) VerticaApp.create_db = MagicMock(return_value=None) VerticaApp.prepare_for_install_vertica = MagicMock(return_value=None) VerticaApp.add_udls = MagicMock() # invocation self.manager.prepare(context=self.context, packages=packages, config_contents=config_content, databases=None, memory_mb='2048', users=None, device_path=device_path, mount_point="/var/lib/vertica", backup_info=backup_info, overrides=None, cluster_config=None) self.assertEqual(expected_vol_count, VolumeDevice.format.call_count) self.assertEqual(expected_vol_count, VolumeDevice.migrate_data.call_count) self.assertEqual(expected_vol_count, VolumeDevice.mount_points.call_count) if is_mounted: self.assertEqual(1, VolumeDevice.unmount.call_count) else: self.assertEqual(0, VolumeDevice.unmount.call_count) VerticaApp.install_if_needed.assert_any_call(packages) VerticaApp.prepare_for_install_vertica.assert_any_call() VerticaApp.install_vertica.assert_any_call() VerticaApp.create_db.assert_any_call() VerticaApp.add_udls.assert_any_call() def test_prepare_pkg(self): self._prepare_dynamic(['vertica']) def test_prepare_no_pkg(self): self._prepare_dynamic([]) def test_restart(self): mock_status = MagicMock() self.manager.appStatus = mock_status VerticaApp.restart = MagicMock(return_value=None) # invocation self.manager.restart(self.context) # verification/assertion VerticaApp.restart.assert_any_call() def test_stop_db(self): mock_status = MagicMock() self.manager.appStatus = mock_status VerticaApp.stop_db = MagicMock(return_value=None) # invocation self.manager.stop_db(self.context) # verification/assertion VerticaApp.stop_db.assert_any_call(do_not_start_on_reboot=False) @patch.object(VerticaApp, 'install_vertica') @patch.object(VerticaApp, '_export_conf_to_members') @patch.object(VerticaApp, 'create_db') @patch.object(VerticaApp, 'add_udls') def test_install_cluster(self, mock_udls, mock_install, mock_export, mock_create_db): members = ['test1', 'test2'] self.manager.install_cluster(self.context, members) mock_install.assert_called_with('test1,test2') mock_export.assert_called_with(members) mock_create_db.assert_called_with('test1,test2') mock_udls.assert_any_call() @patch.object(VerticaAppStatus, 'set_status') @patch.object(VerticaApp, 'install_cluster', side_effect=RuntimeError("Boom!")) @patch('trove.guestagent.datastore.vertica.manager.LOG') def test_install_cluster_failure(self, mock_logging, mock_install, mock_set_status): members = ["test1", "test2"] self.assertRaises(RuntimeError, self.manager.install_cluster, self.context, members) mock_set_status.assert_called_with(rd_instance.ServiceStatuses.FAILED) @patch.object(VerticaApp, '_get_database_password') @patch.object(path, 'isfile') @patch.object(system, 'exec_vsql_command') def test_add_udls(self, mock_vsql, mock_isfile, mock_pwd): mock_vsql.return_value = (None, None) password = '******' mock_pwd.return_value = password mock_isfile.return_value = True self.manager.app.add_udls() mock_vsql.assert_any_call( password, "CREATE LIBRARY curllib AS " "'/opt/vertica/sdk/examples/build/cURLLib.so'" ) mock_vsql.assert_any_call( password, "CREATE SOURCE curl AS LANGUAGE 'C++' NAME 'CurlSourceFactory' " "LIBRARY curllib" ) @patch.object(volume.VolumeDevice, 'mount_points', return_value=[]) @patch.object(volume.VolumeDevice, 'unmount_device', return_value=None) @patch.object(volume.VolumeDevice, 'mount', return_value=None) @patch.object(volume.VolumeDevice, 'migrate_data', return_value=None) @patch.object(volume.VolumeDevice, 'format', return_value=None) @patch.object(VerticaApp, 'prepare_for_install_vertica') @patch.object(VerticaApp, 'install_if_needed') @patch.object(VerticaApp, 'add_udls') @patch.object(VerticaAppStatus, 'begin_install') def _prepare_method(self, instance_id, instance_type, *args): cluster_config = {"id": instance_id, "instance_type": instance_type} # invocation self.manager.prepare(context=self.context, databases=None, packages=['vertica'], memory_mb='2048', users=None, mount_point='/var/lib/vertica', overrides=None, cluster_config=cluster_config) @patch.object(VerticaAppStatus, 'set_status') def test_prepare_member(self, mock_set_status): self._prepare_method("test-instance-3", "member") mock_set_status.assert_called_with( rd_instance.ServiceStatuses.INSTANCE_READY, force=True) def test_rpc_ping(self): output = self.manager.rpc_ping(self.context) self.assertTrue(output) @patch.object(VerticaAppStatus, 'set_status') @patch('trove.guestagent.datastore.manager.LOG') def test_prepare_invalid_cluster_config(self, mock_logging, mock_set_status): self.assertRaises(RuntimeError, self._prepare_method, "test-instance-3", "query_router") mock_set_status.assert_called_with( rd_instance.ServiceStatuses.FAILED, force=True) def test_get_filesystem_stats(self): with patch.object(dbaas, 'get_filesystem_volume_stats'): self.manager.get_filesystem_stats(self.context, '/var/lib/vertica') dbaas.get_filesystem_volume_stats.assert_any_call( '/var/lib/vertica') def test_mount_volume(self): with patch.object(volume.VolumeDevice, 'mount', return_value=None): self.manager.mount_volume(self.context, device_path='/dev/vdb', mount_point='/var/lib/vertica') test_mount = volume.VolumeDevice.mount.call_args_list[0] test_mount.assert_called_with('/var/lib/vertica', False) def test_unmount_volume(self): with patch.object(volume.VolumeDevice, 'unmount', return_value=None): self.manager.unmount_volume(self.context, device_path='/dev/vdb') test_unmount = volume.VolumeDevice.unmount.call_args_list[0] test_unmount.assert_called_with('/var/lib/vertica') def test_resize_fs(self): with patch.object(volume.VolumeDevice, 'resize_fs', return_value=None): self.manager.resize_fs(self.context, device_path='/dev/vdb') test_resize_fs = volume.VolumeDevice.resize_fs.call_args_list[0] test_resize_fs.assert_called_with('/var/lib/vertica') @patch.object(operating_system, 'write_file') def test_cluster_complete(self, mock_write_file): mock_set_status = MagicMock() self.manager.appStatus.set_status = mock_set_status self.manager.appStatus._get_actual_db_status = MagicMock( return_value=rd_instance.ServiceStatuses.RUNNING) self.manager.cluster_complete(self.context) mock_set_status.assert_called_with( rd_instance.ServiceStatuses.RUNNING, force=True) def test_get_public_keys(self): with patch.object(VerticaApp, 'get_public_keys', return_value='some_key'): test_key = self.manager.get_public_keys(self.context, 'test_user') self.assertEqual('some_key', test_key) def test_authorize_public_keys(self): with patch.object(VerticaApp, 'authorize_public_keys', return_value=None): self.manager.authorize_public_keys(self.context, 'test_user', 'some_key') VerticaApp.authorize_public_keys.assert_any_call( 'test_user', 'some_key') def test_start_db_with_conf_changes(self): with patch.object(VerticaApp, 'start_db_with_conf_changes'): self.manager.start_db_with_conf_changes(self.context, 'something') VerticaApp.start_db_with_conf_changes.assert_any_call('something') def test_change_passwords(self): self.assertRaises(DatastoreOperationNotSupported, self.manager.change_passwords, self.context, None) def test_update_attributes(self): self.assertRaises(DatastoreOperationNotSupported, self.manager.update_attributes, self.context, 'test_user', '%', {'name': 'new_user'}) def test_create_database(self): self.assertRaises(DatastoreOperationNotSupported, self.manager.create_database, self.context, [{'name': 'test_db'}]) def test_create_user(self): self.assertRaises(DatastoreOperationNotSupported, self.manager.create_user, self.context, [{'name': 'test_user'}]) def test_delete_database(self): self.assertRaises(DatastoreOperationNotSupported, self.manager.delete_database, self.context, [{'name': 'test_db'}]) def test_delete_user(self): self.assertRaises(DatastoreOperationNotSupported, self.manager.delete_user, self.context, [{'name': 'test_user'}]) def test_get_user(self): self.assertRaises(DatastoreOperationNotSupported, self.manager.get_user, self.context, 'test_user', '%') def test_grant_access(self): self.assertRaises(DatastoreOperationNotSupported, self.manager.grant_access, self.context, 'test_user', '%', [{'name': 'test_db'}] ) def test_revoke_access(self): self.assertRaises(DatastoreOperationNotSupported, self.manager.revoke_access, self.context, 'test_user', '%', [{'name': 'test_db'}] ) def test_list_access(self): self.assertRaises(DatastoreOperationNotSupported, self.manager.list_access, self.context, 'test_user', '%') def test_list_databases(self): self.assertRaises(DatastoreOperationNotSupported, self.manager.list_databases, self.context) def test_list_users(self): self.assertRaises(DatastoreOperationNotSupported, self.manager.list_users, self.context) def test_enable_root(self): VerticaApp.enable_root = MagicMock(return_value='user_id_stuff') user_id = self.manager.enable_root_with_password(self.context) self.assertThat(user_id, Is('user_id_stuff')) def test_is_root_enabled(self): VerticaApp.is_root_enabled = MagicMock(return_value=True) is_enabled = self.manager.is_root_enabled(self.context) self.assertThat(is_enabled, Is(True)) def test_create_backup(self): self.assertRaises(DatastoreOperationNotSupported, self.manager.create_backup, self.context, {})
class GuestAgentManagerTest(testtools.TestCase): def setUp(self): super(GuestAgentManagerTest, self).setUp() self.context = TroveContext() self.manager = Manager() self.origin_format = volume.VolumeDevice.format self.origin_migrate_data = volume.VolumeDevice.migrate_data self.origin_mount = volume.VolumeDevice.mount self.origin_unmount = volume.VolumeDevice.unmount self.origin_mount_points = volume.VolumeDevice.mount_points self.origin_os_path_exists = os.path.exists self.origin_prep_for_install = VerticaApp.prepare_for_install_vertica self.origin_install_vertica = VerticaApp.install_vertica self.origin_create_db = VerticaApp.create_db self.origin_stop_db = VerticaApp.stop_db self.origin_start_db = VerticaApp.start_db self.origin_restart = VerticaApp.restart self.origin_install_if = VerticaApp.install_if_needed self.origin_complete_install = VerticaApp.complete_install_or_restart def tearDown(self): super(GuestAgentManagerTest, self).tearDown() volume.VolumeDevice.format = self.origin_format volume.VolumeDevice.migrate_data = self.origin_migrate_data volume.VolumeDevice.mount = self.origin_mount volume.VolumeDevice.unmount = self.origin_unmount volume.VolumeDevice.mount_points = self.origin_mount_points os.path.exists = self.origin_os_path_exists VerticaApp.create_db = self.origin_create_db VerticaApp.prepare_for_install_vertica = self.origin_prep_for_install VerticaApp.install_vertica = self.origin_install_vertica VerticaApp.stop_db = self.origin_stop_db VerticaApp.start_db = self.origin_start_db VerticaApp.restart = self.origin_restart VerticaApp.install_if_needed = self.origin_install_if VerticaApp.complete_install_or_restart = self.origin_complete_install def test_update_status(self): mock_status = MagicMock() self.manager.appStatus = mock_status self.manager.update_status(self.context) mock_status.update.assert_any_call() def test_prepare_pkg(self): self._prepare_dynamic(['vertica']) def _prepare_dynamic(self, packages, config_content='MockContent', device_path='/dev/vdb', backup_id=None, overrides=None, is_mounted=False): # covering all outcomes is starting to cause trouble here COUNT = 1 if device_path else 0 if not backup_id: backup_info = {'id': backup_id, 'location': 'fake-location', 'type': 'InnoBackupEx', 'checksum': 'fake-checksum', } mock_status = MagicMock() self.manager.appStatus = mock_status mock_status.begin_install = MagicMock(return_value=None) os.path.exists = MagicMock(return_value=True) volume.VolumeDevice.format = MagicMock(return_value=None) volume.VolumeDevice.migrate_data = MagicMock(return_value=None) volume.VolumeDevice.mount = MagicMock(return_value=None) mount_points = [] if is_mounted: mount_points = ['/mnt'] VolumeDevice.mount_points = MagicMock(return_value=mount_points) VolumeDevice.unmount = MagicMock(return_value=None) VerticaApp.install_if_needed = MagicMock(return_value=None) VerticaApp.prepare_for_install_vertica = MagicMock(return_value=None) VerticaApp.install_vertica = MagicMock(return_value=None) VerticaApp.create_db = MagicMock(return_value=None) VerticaApp.complete_install_or_restart = MagicMock(return_value=None) # invocation self.manager.prepare(context=self.context, packages=packages, config_contents=config_content, databases=None, memory_mb='2048', users=None, device_path=device_path, mount_point="/var/lib/vertica", backup_info=backup_info, overrides=None, cluster_config=None) self.assertEqual(VolumeDevice.format.call_count, COUNT) self.assertEqual(VolumeDevice.migrate_data.call_count, COUNT) self.assertEqual(VolumeDevice.mount_points.call_count, COUNT) if is_mounted: self.assertEqual(VolumeDevice.unmount.call_count, 1) else: self.assertEqual(VolumeDevice.unmount.call_count, 0) VerticaApp.install_if_needed.assert_any_call(['vertica']) VerticaApp.prepare_for_install_vertica.assert_any_call() VerticaApp.complete_install_or_restart.assert_any_call() VerticaApp.install_vertica.assert_any_call() VerticaApp.create_db.assert_any_call() def test_restart(self): mock_status = MagicMock() self.manager.appStatus = mock_status VerticaApp.restart = MagicMock(return_value=None) #invocation self.manager.restart(self.context) #verification/assertion VerticaApp.restart.assert_any_call() def test_stop_db(self): mock_status = MagicMock() self.manager.appStatus = mock_status VerticaApp.stop_db = MagicMock(return_value=None) #invocation self.manager.stop_db(self.context) #verification/assertion VerticaApp.stop_db.assert_any_call(do_not_start_on_reboot=False)