def setUp(self): super(TestCase, self).setUp() # Manage required configuration conf_fixture = self.useFixture(config_fixture.Config(CONF)) # The Database fixture will get confused if only one of the databases # is configured. for group in ('placement_database', 'api_database', 'database'): conf_fixture.config( group=group, connection='sqlite://', sqlite_synchronous=False) CONF([], default_config_files=[]) self.useFixture(policy_fixture.PolicyFixture()) self.useFixture(capture.Logging()) self.useFixture(output.CaptureOutput()) # Filter ignorable warnings during test runs. self.useFixture(capture.WarningsFixture()) self.placement_db = self.useFixture( fixtures.Database(database='placement')) self._reset_database() self.context = context.RequestContext() # Do database syncs, such as traits sync. deploy.update_database() self.addCleanup(self._reset_database)
def setUp(self): super(TestPlacementRequestContext, self).setUp() self.ctxt = context.RequestContext(user_id='fake', project_id='fake') self.default_target = { 'user_id': self.ctxt.user_id, 'project_id': self.ctxt.project_id }
def _run_online_migration(self, max_count): ctxt = context.RequestContext(config=self.config) ran = 0 exceptions = False migrations = collections.OrderedDict() for migration_meth in online_migrations: count = max_count - ran try: found, done = migration_meth(ctxt, count) except Exception: msg = (_("Error attempting to run %(method)s") % dict(method=migration_meth)) print(msg) LOG.exception(msg) exceptions = True found = done = 0 name = migration_meth.__name__ if found: print( _('%(total)i rows matched query %(meth)s, %(done)i ' 'migrated') % { 'total': found, 'meth': name, 'done': done }) # This is the per-migration method result for this batch, and # _run_online_migration will either continue on to the next # migration, or stop if up to this point we've processed max_count # of records across all migration methods. migrations[name] = found, done ran += done if ran >= max_count: break return migrations, exceptions
def _test_duplicate_error_parsing_mysql(self, key): fake_context = context.RequestContext( user_id='fake', project_id='fake') req = webob.Request.blank( '/resource_providers', method='POST', content_type='application/json') req.body = b'{"name": "foobar"}' req.environ['placement.context'] = fake_context parse_version = microversion_parse.parse_version_string microversion = parse_version('1.15') microversion.max_version = parse_version('9.99') microversion.min_version = parse_version('1.0') req.environ['placement.microversion'] = microversion with mock.patch( 'placement.objects.resource_provider.ResourceProvider.create', side_effect=db_exc.DBDuplicateEntry(columns=[key]), ): response = req.get_response( resource_provider.create_resource_provider) self.assertEqual('409 Conflict', response.status) self.assertIn( 'Conflicting resource provider name: foobar already exists.', response.text)
def start_fixture(self): global CONF # Set up stderr and stdout captures by directly driving the # existing nova fixtures that do that. This captures the # output that happens outside individual tests (for # example database migrations). self.standard_logging_fixture = capture.Logging() self.standard_logging_fixture.setUp() self.output_stream_fixture = output.CaptureOutput() self.output_stream_fixture.setUp() self.logging_error_fixture = ( logging_error.get_logging_handle_error_fixture()) self.logging_error_fixture.setUp() # Filter ignorable warnings during test runs. self.warnings_fixture = capture.WarningsFixture() self.warnings_fixture.setUp() # Do not use global CONF self.conf_fixture = config_fixture.Config(cfg.ConfigOpts()) self.conf_fixture.setUp() conf.register_opts(self.conf_fixture.conf) self.conf_fixture.config(group='api', auth_strategy='noauth2') self.placement_db_fixture = fixtures.Database(self.conf_fixture, set_config=True) self.placement_db_fixture.setUp() self.context = context.RequestContext() # Some database interaction methods require access to the oslo config # via the context. Within the WSGI application this is taken care of # but here in the fixtures we use some of those methods to create # entities. self.context.config = self.conf_fixture.conf # Set default policy opts, otherwise the deploy module can # NoSuchOptError. policy_opts.set_defaults(self.conf_fixture.conf) # Make sure default_config_files is an empty list, not None. # If None /etc/placement/placement.conf is read and confuses results. self.conf_fixture.conf([], default_config_files=[]) # Turn on a policy fixture. self.policy_fixture = policy_fixture.PolicyFixture(self.conf_fixture) self.policy_fixture.setUp() os.environ['RP_UUID'] = uuidutils.generate_uuid() os.environ['RP_NAME'] = uuidutils.generate_uuid() os.environ['CUSTOM_RES_CLASS'] = 'CUSTOM_IRON_NFV' os.environ['PROJECT_ID'] = uuidutils.generate_uuid() os.environ['USER_ID'] = uuidutils.generate_uuid() os.environ['PROJECT_ID_ALT'] = uuidutils.generate_uuid() os.environ['USER_ID_ALT'] = uuidutils.generate_uuid() os.environ['INSTANCE_UUID'] = uuidutils.generate_uuid() os.environ['MIGRATION_UUID'] = uuidutils.generate_uuid() os.environ['CONSUMER_UUID'] = uuidutils.generate_uuid() os.environ['PARENT_PROVIDER_UUID'] = uuidutils.generate_uuid() os.environ['ALT_PARENT_PROVIDER_UUID'] = uuidutils.generate_uuid() CONF = self.conf_fixture.conf
def start_fixture(self): global CONF # Set up stderr and stdout captures by directly driving the # existing nova fixtures that do that. This captures the # output that happens outside individual tests (for # example database migrations). self.standard_logging_fixture = capture.Logging() self.standard_logging_fixture.setUp() self.output_stream_fixture = output.CaptureOutput() self.output_stream_fixture.setUp() self.logging_error_fixture = ( logging_error.get_logging_handle_error_fixture()) self.logging_error_fixture.setUp() # Filter ignorable warnings during test runs. self.warnings_fixture = capture.WarningsFixture() self.warnings_fixture.setUp() # Do not use global CONF self.conf_fixture = config_fixture.Config(cfg.ConfigOpts()) self.conf_fixture.setUp() conf.register_opts(self.conf_fixture.conf) self.conf_fixture.config(group='api', auth_strategy='noauth2') self.placement_db_fixture = fixtures.Database(self.conf_fixture, set_config=True) self.placement_db_fixture.setUp() self.context = context.RequestContext() # Register CORS opts, but do not set config. This has the # effect of exercising the "don't use cors" path in # deploy.py. Without setting some config the group will not # be present. self.conf_fixture.register_opts(cors.CORS_OPTS, 'cors') # Set default policy opts, otherwise the deploy module can # NoSuchOptError. policy_opts.set_defaults(self.conf_fixture.conf) # Make sure default_config_files is an empty list, not None. # If None /etc/placement/placement.conf is read and confuses results. self.conf_fixture.conf([], default_config_files=[]) # Turn on a policy fixture. self.policy_fixture = policy_fixture.PolicyFixture(self.conf_fixture) self.policy_fixture.setUp() os.environ['RP_UUID'] = uuidutils.generate_uuid() os.environ['RP_NAME'] = uuidutils.generate_uuid() os.environ['CUSTOM_RES_CLASS'] = 'CUSTOM_IRON_NFV' os.environ['PROJECT_ID'] = uuidutils.generate_uuid() os.environ['USER_ID'] = uuidutils.generate_uuid() os.environ['PROJECT_ID_ALT'] = uuidutils.generate_uuid() os.environ['USER_ID_ALT'] = uuidutils.generate_uuid() os.environ['INSTANCE_UUID'] = uuidutils.generate_uuid() os.environ['MIGRATION_UUID'] = uuidutils.generate_uuid() os.environ['CONSUMER_UUID'] = uuidutils.generate_uuid() os.environ['PARENT_PROVIDER_UUID'] = uuidutils.generate_uuid() os.environ['ALT_PARENT_PROVIDER_UUID'] = uuidutils.generate_uuid() CONF = self.conf_fixture.conf
def setUp(self): super(TestPlacementURLs, self).setUp() fake_context = context.RequestContext(user_id='fake', project_id='fake') self.resource_provider = rp_obj.ResourceProvider( fake_context, name=uuidsentinel.rp_name, uuid=uuidsentinel.rp_uuid) self.resource_class = rc_obj.ResourceClass( fake_context, name='CUSTOM_BAREMETAL_GOLD', id=1000)
def setUp(self): super(TestCase, self).setUp() self.user_id = 'fake-user' self.project_id = 'fake-project' self.context = context.RequestContext(self.user_id, self.project_id) config = cfg.ConfigOpts() self.conf_fixture = self.useFixture(config_fixture.Config(config)) conf.register_opts(config) self.context.config = config
def start_fixture(self): # Set up stderr and stdout captures by directly driving the # existing nova fixtures that do that. This captures the # output that happens outside individual tests (for # example database migrations). self.standard_logging_fixture = capture.Logging() self.standard_logging_fixture.setUp() self.output_stream_fixture = output.CaptureOutput() self.output_stream_fixture.setUp() # Filter ignorable warnings during test runs. self.warnings_fixture = capture.WarningsFixture() self.warnings_fixture.setUp() self.conf_fixture = config_fixture.Config(CONF) self.conf_fixture.setUp() # The Database fixture will get confused if only one of the databases # is configured. for group in ('placement_database', 'api_database', 'database'): self.conf_fixture.config(group=group, connection='sqlite://', sqlite_synchronous=False) self.conf_fixture.config(group='api', auth_strategy='noauth2') self.context = context.RequestContext() # Register CORS opts, but do not set config. This has the # effect of exercising the "don't use cors" path in # deploy.py. Without setting some config the group will not # be present. CONF.register_opts(cors.CORS_OPTS, 'cors') # Set default policy opts, otherwise the deploy module can # NoSuchOptError. policy_opts.set_defaults(CONF) # Make sure default_config_files is an empty list, not None. # If None /etc/nova/nova.conf is read and confuses results. CONF([], default_config_files=[]) self._reset_db_flags() self.placement_db_fixture = fixtures.Database('placement') self.placement_db_fixture.setUp() # Do this now instead of waiting for the WSGI app to start so that # fixtures can have traits. deploy.update_database() os.environ['RP_UUID'] = uuidutils.generate_uuid() os.environ['RP_NAME'] = uuidutils.generate_uuid() os.environ['CUSTOM_RES_CLASS'] = 'CUSTOM_IRON_NFV' os.environ['PROJECT_ID'] = uuidutils.generate_uuid() os.environ['USER_ID'] = uuidutils.generate_uuid() os.environ['PROJECT_ID_ALT'] = uuidutils.generate_uuid() os.environ['USER_ID_ALT'] = uuidutils.generate_uuid() os.environ['INSTANCE_UUID'] = uuidutils.generate_uuid() os.environ['MIGRATION_UUID'] = uuidutils.generate_uuid() os.environ['CONSUMER_UUID'] = uuidutils.generate_uuid() os.environ['PARENT_PROVIDER_UUID'] = uuidutils.generate_uuid() os.environ['ALT_PARENT_PROVIDER_UUID'] = uuidutils.generate_uuid()
def test_concurrent_exception_causes_409(self): fake_context = context.RequestContext(user_id='fake', project_id='fake') rp = resource_provider.ResourceProvider(fake_context) expected_message = ('Update conflict: Another thread concurrently ' 'updated the data') with mock.patch("placement.objects.resource_provider._set_aggregates", side_effect=exception.ConcurrentUpdateDetected): exc = self.assertRaises(webob.exc.HTTPConflict, aggregate._set_aggregates, rp, []) self.assertIn(expected_message, str(exc))
def setUp(self): super(PlacementPolicyTestCase, self).setUp() config = cfg.ConfigOpts() self.conf_fixture = self.useFixture(config_fixture.Config(config)) conf.register_opts(config) self.ctxt = context.RequestContext(user_id='fake', project_id='fake') self.target = {'user_id': 'fake', 'project_id': 'fake'} # A value is required in the database connection opt for conf to # parse. self.conf_fixture.config(connection='stub', group='placement_database') config([], default_config_files=[]) self.ctxt.config = config policy.reset() self.addCleanup(policy.reset)
def setUp(self): super(TestEnsureConsumer, self).setUp() self.conf = cfg.ConfigOpts() self.useFixture(config_fixture.Config(self.conf)) conf.register_opts(self.conf) self.mock_project_get = self.useFixture(fixtures.MockPatch( 'placement.objects.project.' 'Project.get_by_external_id')).mock self.mock_user_get = self.useFixture(fixtures.MockPatch( 'placement.objects.user.' 'User.get_by_external_id')).mock self.mock_consumer_get = self.useFixture(fixtures.MockPatch( 'placement.objects.consumer.' 'Consumer.get_by_uuid')).mock self.mock_project_create = self.useFixture(fixtures.MockPatch( 'placement.objects.project.' 'Project.create')).mock self.mock_user_create = self.useFixture(fixtures.MockPatch( 'placement.objects.user.' 'User.create')).mock self.mock_consumer_create = self.useFixture(fixtures.MockPatch( 'placement.objects.consumer.' 'Consumer.create')).mock self.mock_consumer_update = self.useFixture(fixtures.MockPatch( 'placement.objects.consumer.' 'Consumer.update')).mock self.ctx = context.RequestContext(user_id='fake', project_id='fake') self.ctx.config = self.conf self.consumer_id = uuidsentinel.consumer self.project_id = uuidsentinel.project self.user_id = uuidsentinel.user mv_parsed = microversion_parse.Version(1, 27) mv_parsed.max_version = microversion_parse.parse_version_string( microversion.max_version_string()) mv_parsed.min_version = microversion_parse.parse_version_string( microversion.min_version_string()) self.before_version = mv_parsed mv_parsed = microversion_parse.Version(1, 28) mv_parsed.max_version = microversion_parse.parse_version_string( microversion.max_version_string()) mv_parsed.min_version = microversion_parse.parse_version_string( microversion.min_version_string()) self.after_version = mv_parsed mv_parsed = microversion_parse.Version(1, 38) mv_parsed.max_version = microversion_parse.parse_version_string( microversion.max_version_string()) mv_parsed.min_version = microversion_parse.parse_version_string( microversion.min_version_string()) self.cons_type_req_version = mv_parsed
def setUp(self): super(TestCase, self).setUp() # Manage required configuration self.conf_fixture = self.useFixture( config_fixture.Config(cfg.ConfigOpts())) conf.register_opts(self.conf_fixture.conf) self.placement_db = self.useFixture( fixtures.Database(self.conf_fixture, set_config=True)) self.conf_fixture.conf([], default_config_files=[]) self.useFixture(policy_fixture.PolicyFixture(self.conf_fixture)) self.useFixture(capture.Logging()) self.useFixture(output.CaptureOutput()) # Filter ignorable warnings during test runs. self.useFixture(capture.WarningsFixture()) self.useFixture(logging_error.get_logging_handle_error_fixture()) self.context = context.RequestContext() self.context.config = self.conf_fixture.conf
def test_trait_create_ordering( self, mock_path, mock_can, mock_get_by_name, mock_create): """Test that we call Trait.create when get_by_name has a TraitNotFound and that if create can't create, we assume 204. """ # The trait doesn't initially exist. mock_get_by_name.side_effect = exception.TraitNotFound( name='CUSTOM_FOOBAR') # But we fake that it does after first not finding it. mock_create.side_effect = exception.TraitExists( name='CUSTOM_FOOBAR') fake_context = context.RequestContext( user_id='fake', project_id='fake') req = webob.Request.blank('/traits/CUSTOM_FOOBAR') req.environ['placement.context'] = fake_context parse_version = microversion_parse.parse_version_string microversion = parse_version('1.15') microversion.max_version = parse_version('9.99') microversion.min_version = parse_version('1.0') req.environ['placement.microversion'] = microversion response = req.get_response(trait.put_trait) # Trait was assumed to exist. self.assertEqual('204 No Content', response.status) # We get a last modified header, even though we don't know the exact # create_at time (it is None on the Trait object and we fall back to # now) self.assertIn('last-modified', response.headers) # Confirm we checked to see if the trait exists, but the # side_effect happens mock_get_by_name.assert_called_once_with(fake_context, 'CUSTOM_FOOBAR') # Confirm we attempt to create the trait. mock_create.assert_called_once_with()
def setUp(self): super(TestPickLastModified, self).setUp() fake_context = context.RequestContext(user_id='fake', project_id='fake') self.resource_provider = rp_obj.ResourceProvider( fake_context, name=uuidsentinel.rp_name, uuid=uuidsentinel.rp_uuid)
def __init__(self, config): self.ctxt = context.RequestContext(config=config)
def setUp(self): super(PlacementPolicyTestCase, self).setUp() self.conf = self.useFixture(conf_fixture.ConfFixture()).conf self.ctxt = context.RequestContext(user_id='fake', project_id='fake') self.target = {'user_id': 'fake', 'project_id': 'fake'}
def setUp(self): super(_TestCase, self).setUp() self.user_id = 'fake-user' self.project_id = 'fake-project' self.context = context.RequestContext(self.user_id, self.project_id)
def setUp(self): super(PlacementPolicyTestCase, self).setUp() self.conf = self.useFixture(config_fixture.Config(CONF)).conf self.ctxt = context.RequestContext(user_id='fake', project_id='fake') self.target = {'user_id': 'fake', 'project_id': 'fake'} CONF([], default_config_files=[])