예제 #1
0
파일: base.py 프로젝트: Yikun/placement
    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)
예제 #2
0
 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
     }
예제 #3
0
파일: manage.py 프로젝트: knodir/placement
    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
예제 #4
0
    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)
예제 #5
0
    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
예제 #6
0
    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
예제 #7
0
 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)
예제 #8
0
파일: base.py 프로젝트: pavera/placement
 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
예제 #9
0
    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()
예제 #10
0
 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))
예제 #11
0
 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)
예제 #12
0
 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
예제 #13
0
파일: base.py 프로젝트: EdLeafe/replacement
    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
예제 #14
0
    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()
예제 #15
0
 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)
예제 #16
0
파일: status.py 프로젝트: knodir/placement
 def __init__(self, config):
     self.ctxt = context.RequestContext(config=config)
예제 #17
0
 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'}
예제 #18
0
 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)
예제 #19
0
 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=[])