Ejemplo n.º 1
0
 def test_ephemeral_gb_must_be_nonnegative_db_integer(self):
     self.assertInvalidInput('flavor1', 64, 1, 120, ephemeral_gb='foo')
     self.assertInvalidInput('flavor1', 64, 1, 120, ephemeral_gb=-1)
     self.assertInvalidInput('flavor1', 64, 1, 120,
                             ephemeral_gb=db.MAX_INT + 1)
     flavors.create('flavor1', 64, 1, 120, ephemeral_gb=0)
     flavors.create('flavor2', 64, 1, 120, ephemeral_gb=120)
Ejemplo n.º 2
0
 def test_create_flavor_ephemeral_error(self):
     args = ("ephemeral_test", "1024", "1", "10", "9999999999")
     try:
         flavors.create(*args)
         self.fail("Be sure this will never be executed.")
     except exception.InvalidInput as e:
         self.assertIn("ephemeral", e.message)
Ejemplo n.º 3
0
 def test_create_flavor_ephemeral_error(self):
     args = ("ephemeral_test", "1024", "1", "10", "9999999999")
     try:
         flavors.create(*args)
         self.fail("Be sure this will never be executed.")
     except exception.InvalidInput as e:
         self.assertIn("ephemeral", e.message)
Ejemplo n.º 4
0
 def test_swap_must_be_nonnegative_db_integer(self):
     self.assertInvalidInput('flavor1', 64, 1, 120, swap='foo')
     self.assertInvalidInput('flavor1', 64, 1, 120, swap=-1)
     self.assertInvalidInput('flavor1', 64, 1, 120,
                             swap=db.MAX_INT + 1)
     flavors.create('flavor1', 64, 1, 120, swap=0)
     flavors.create('flavor2', 64, 1, 120, swap=1)
Ejemplo n.º 5
0
    def test_flavorid_populated(self):
        flavor1 = flavors.create('flavor1', 64, 1, 120)
        self.assertIsNot(None, flavor1.flavorid)

        flavor2 = flavors.create('flavor2', 64, 1, 120, flavorid='')
        self.assertIsNot(None, flavor2.flavorid)

        flavor3 = flavors.create('flavor3', 64, 1, 120, flavorid='foo')
        self.assertEqual('foo', flavor3.flavorid)
Ejemplo n.º 6
0
    def test_rxtx_factor_must_be_positive_float(self):
        self.assertInvalidInput('flavor1', 64, 1, 120, rxtx_factor='foo')
        self.assertInvalidInput('flavor1', 64, 1, 120, rxtx_factor=-1.0)
        self.assertInvalidInput('flavor1', 64, 1, 120, rxtx_factor=0.0)

        flavor = flavors.create('flavor1', 64, 1, 120, rxtx_factor=1.0)
        self.assertEqual(1.0, flavor.rxtx_factor)

        flavor = flavors.create('flavor2', 64, 1, 120, rxtx_factor=1.1)
        self.assertEqual(1.1, flavor.rxtx_factor)
Ejemplo n.º 7
0
    def test_name_length_checks(self):
        MAX_LEN = 255

        # Flavor name with 255 characters or less is valid.
        flavors.create('a' * MAX_LEN, 64, 1, 120)

        # Flavor name which is more than 255 characters will cause error.
        self.assertInvalidInput('a' * (MAX_LEN + 1), 64, 1, 120)

        # Flavor name which is empty should cause an error
        self.assertInvalidInput('', 64, 1, 120)
Ejemplo n.º 8
0
    def test_get_inactive_flavors_with_same_flavorid(self):
        flav1 = flavors.create('flavor', 256, 1, 120, 100, "flavid")
        flavors.destroy('flavor')
        flav2 = flavors.create('flavor', 512, 4, 250, 100, "flavid")

        returned_flavors_ids = flavors.get_all_flavors().keys()
        self.assertNotIn(flav1.id, returned_flavors_ids)
        self.assertIn(flav2.id, returned_flavors_ids)

        returned_flavors_ids = flavors.get_all_flavors(inactive=True).keys()
        self.assertIn(flav1.id, returned_flavors_ids)
        self.assertIn(flav2.id, returned_flavors_ids)
Ejemplo n.º 9
0
    def test_get_inactive_flavors(self):
        flav1 = flavors.create('flavor1', 256, 1, 120)
        flav2 = flavors.create('flavor2', 512, 4, 250)
        flavors.destroy('flavor1')

        returned_flavors_ids = flavors.get_all_flavors().keys()
        self.assertNotIn(flav1.id, returned_flavors_ids)
        self.assertIn(flav2.id, returned_flavors_ids)

        returned_flavors_ids = flavors.get_all_flavors(inactive=True).keys()
        self.assertIn(flav1.id, returned_flavors_ids)
        self.assertIn(flav2.id, returned_flavors_ids)
Ejemplo n.º 10
0
    def test_read_deleted_false_converting_flavorid(self):
        """Ensure deleted flavors are not returned when not needed (for
        example when creating a server and attempting to translate from
        flavorid to instance_type_id.
        """
        flavors.create("instance_type1", 256, 1, 120, 100, "test1")
        flavors.destroy("instance_type1")
        flavors.create("instance_type1_redo", 256, 1, 120, 100, "test1")

        instance_type = flavors.get_flavor_by_flavor_id(
                "test1", read_deleted="no")
        self.assertEqual("instance_type1_redo", instance_type.name)
Ejemplo n.º 11
0
    def _create(self, req, body):
        context = req.environ['patron.context']
        authorize(context)

        vals = body['flavor']

        name = vals['name']
        flavorid = vals.get('id')
        memory = vals['ram']
        vcpus = vals['vcpus']
        root_gb = vals['disk']
        ephemeral_gb = vals.get('OS-FLV-EXT-DATA:ephemeral', 0)
        swap = vals.get('swap', 0)
        rxtx_factor = vals.get('rxtx_factor', 1.0)
        is_public = vals.get('os-flavor-access:is_public', True)

        try:
            flavor = flavors.create(name, memory, vcpus, root_gb,
                                    ephemeral_gb=ephemeral_gb,
                                    flavorid=flavorid, swap=swap,
                                    rxtx_factor=rxtx_factor,
                                    is_public=is_public)
            # NOTE(gmann): For backward compatibility, non public flavor
            # access is not being added for created tenant. Ref -bug/1209101
            req.cache_db_flavor(flavor)
        except (exception.FlavorExists,
                exception.FlavorIdExists) as err:
            raise webob.exc.HTTPConflict(explanation=err.format_message())
        except exception.FlavorCreateFailed as err:
            raise webob.exc.HTTPInternalServerError(explanation=
                err.format_message())

        return self._view_builder.show(req, flavor)
Ejemplo n.º 12
0
    def test_default_values(self):
        flavor1 = flavors.create('flavor1', 64, 1, 120)

        self.assertIsNot(None, flavor1.flavorid)
        self.assertEqual(flavor1.ephemeral_gb, 0)
        self.assertEqual(flavor1.swap, 0)
        self.assertEqual(flavor1.rxtx_factor, 1.0)
Ejemplo n.º 13
0
    def _create(self, req, body):
        context = req.environ['patron.context']
        authorize(context)
        if not self.is_valid_body(body, 'flavor'):
            msg = _("Invalid request body")
            raise webob.exc.HTTPBadRequest(explanation=msg)
        vals = body['flavor']
        name = vals.get('name')
        if name is None:
            msg = _("A valid name parameter is required")
            raise webob.exc.HTTPBadRequest(explanation=msg)

        flavorid = vals.get('id')
        memory = vals.get('ram')
        if memory is None:
            msg = _("A valid ram parameter is required")
            raise webob.exc.HTTPBadRequest(explanation=msg)

        vcpus = vals.get('vcpus')
        if vcpus is None:
            msg = _("A valid vcpus parameter is required")
            raise webob.exc.HTTPBadRequest(explanation=msg)

        root_gb = vals.get('disk')
        if root_gb is None:
            msg = _("A valid disk parameter is required")
            raise webob.exc.HTTPBadRequest(explanation=msg)

        ephemeral_gb = vals.get('OS-FLV-EXT-DATA:ephemeral', 0)
        swap = vals.get('swap', 0)
        rxtx_factor = vals.get('rxtx_factor', 1.0)
        is_public = vals.get('os-flavor-access:is_public', True)

        try:
            flavor = flavors.create(name,
                                    memory,
                                    vcpus,
                                    root_gb,
                                    ephemeral_gb=ephemeral_gb,
                                    flavorid=flavorid,
                                    swap=swap,
                                    rxtx_factor=rxtx_factor,
                                    is_public=is_public)
            req.cache_db_flavor(flavor)
        except (exception.FlavorExists, exception.FlavorIdExists) as err:
            raise webob.exc.HTTPConflict(explanation=err.format_message())
        except exception.InvalidInput as exc:
            raise webob.exc.HTTPBadRequest(explanation=exc.format_message())
        except exception.FlavorCreateFailed as exc:
            raise webob.exc.HTTPInternalServerError(
                explanation=exc.format_message())

        return self._view_builder.show(req, flavor)
Ejemplo n.º 14
0
    def test_rxtx_factor_must_be_within_sql_float_range(self):
        _context = context.get_admin_context()
        db.flavor_get_all(_context)
        # We do * 10 since this is an approximation and we need to make sure
        # the difference is noticeble.
        over_rxtx_factor = flavors.SQL_SP_FLOAT_MAX * 10

        self.assertInvalidInput('flavor1', 64, 1, 120,
                                rxtx_factor=over_rxtx_factor)

        flavor = flavors.create('flavor2', 64, 1, 120,
                                rxtx_factor=flavors.SQL_SP_FLOAT_MAX)
        self.assertEqual(flavors.SQL_SP_FLOAT_MAX, flavor.rxtx_factor)
Ejemplo n.º 15
0
    def _create(self, req, body):
        context = req.environ['patron.context']
        authorize(context)
        if not self.is_valid_body(body, 'flavor'):
            msg = _("Invalid request body")
            raise webob.exc.HTTPBadRequest(explanation=msg)
        vals = body['flavor']
        name = vals.get('name')
        if name is None:
            msg = _("A valid name parameter is required")
            raise webob.exc.HTTPBadRequest(explanation=msg)

        flavorid = vals.get('id')
        memory = vals.get('ram')
        if memory is None:
            msg = _("A valid ram parameter is required")
            raise webob.exc.HTTPBadRequest(explanation=msg)

        vcpus = vals.get('vcpus')
        if vcpus is None:
            msg = _("A valid vcpus parameter is required")
            raise webob.exc.HTTPBadRequest(explanation=msg)

        root_gb = vals.get('disk')
        if root_gb is None:
            msg = _("A valid disk parameter is required")
            raise webob.exc.HTTPBadRequest(explanation=msg)

        ephemeral_gb = vals.get('OS-FLV-EXT-DATA:ephemeral', 0)
        swap = vals.get('swap', 0)
        rxtx_factor = vals.get('rxtx_factor', 1.0)
        is_public = vals.get('os-flavor-access:is_public', True)

        try:
            flavor = flavors.create(name, memory, vcpus, root_gb,
                                    ephemeral_gb=ephemeral_gb,
                                    flavorid=flavorid, swap=swap,
                                    rxtx_factor=rxtx_factor,
                                    is_public=is_public)
            req.cache_db_flavor(flavor)
        except (exception.FlavorExists,
                exception.FlavorIdExists) as err:
            raise webob.exc.HTTPConflict(explanation=err.format_message())
        except exception.InvalidInput as exc:
            raise webob.exc.HTTPBadRequest(explanation=exc.format_message())
        except exception.FlavorCreateFailed as exc:
            raise webob.exc.HTTPInternalServerError(explanation=
                exc.format_message())

        return self._view_builder.show(req, flavor)
Ejemplo n.º 16
0
    def test_basic_create(self):
        # Ensure instance types can be created.
        original_list = flavors.get_all_flavors()

        # Create new type and make sure values stick
        flavor = flavors.create('flavor', 64, 1, 120)
        self.assertEqual(flavor.name, 'flavor')
        self.assertEqual(flavor.memory_mb, 64)
        self.assertEqual(flavor.vcpus, 1)
        self.assertEqual(flavor.root_gb, 120)

        # Ensure new type shows up in list
        new_list = flavors.get_all_flavors()
        self.assertNotEqual(len(original_list), len(new_list),
                            'flavor was not created')
Ejemplo n.º 17
0
    def test_can_read_deleted_types_using_flavor_id(self):
        # Ensure deleted flavors can be read when querying flavor_id.
        inst_type_name = "test"
        inst_type_flavor_id = "test1"

        inst_type = flavors.create(inst_type_name, 256, 1, 120, 100,
                inst_type_flavor_id)
        self.assertEqual(inst_type_name, inst_type.name)

        # NOTE(jk0): The deleted flavor will show up here because the context
        # in get_flavor_by_flavor_id() is set to use read_deleted by
        # default.
        flavors.destroy(inst_type.name)
        deleted_inst_type = flavors.get_flavor_by_flavor_id(
                inst_type_flavor_id)
        self.assertEqual(inst_type_name, deleted_inst_type.name)
Ejemplo n.º 18
0
    def test_create_then_delete(self):
        original_list = flavors.get_all_flavors()

        flavor = flavors.create('flavor', 64, 1, 120)

        # Ensure new type shows up in list
        new_list = flavors.get_all_flavors()
        self.assertNotEqual(len(original_list), len(new_list),
                            'instance type was not created')

        flavors.destroy('flavor')
        self.assertRaises(exception.FlavorNotFound,
                          flavors.get_flavor, flavor.id)

        # Deleted instance should not be in list anymore
        new_list = flavors.get_all_flavors()
        self.assertEqual(len(original_list), len(new_list))
        for k in original_list.keys():
            f = original_list[k]
            self.assertIsInstance(f, objects.Flavor)
            self.assertEqual(f.flavorid, new_list[k].flavorid)
Ejemplo n.º 19
0
    def _create(self, req, body):
        context = req.environ['patron.context']
        authorize(context)

        vals = body['flavor']

        name = vals['name']
        flavorid = vals.get('id')
        memory = vals['ram']
        vcpus = vals['vcpus']
        root_gb = vals['disk']
        ephemeral_gb = vals.get('OS-FLV-EXT-DATA:ephemeral', 0)
        swap = vals.get('swap', 0)
        rxtx_factor = vals.get('rxtx_factor', 1.0)
        is_public = vals.get('os-flavor-access:is_public', True)

        try:
            flavor = flavors.create(name,
                                    memory,
                                    vcpus,
                                    root_gb,
                                    ephemeral_gb=ephemeral_gb,
                                    flavorid=flavorid,
                                    swap=swap,
                                    rxtx_factor=rxtx_factor,
                                    is_public=is_public)
            # NOTE(gmann): For backward compatibility, non public flavor
            # access is not being added for created tenant. Ref -bug/1209101
            req.cache_db_flavor(flavor)
        except (exception.FlavorExists, exception.FlavorIdExists) as err:
            raise webob.exc.HTTPConflict(explanation=err.format_message())
        except exception.FlavorCreateFailed as err:
            raise webob.exc.HTTPInternalServerError(
                explanation=err.format_message())

        return self._view_builder.show(req, flavor)
Ejemplo n.º 20
0
 def test_duplicate_flavorids_fail(self):
     # Ensures that flavorid duplicates raise FlavorCreateFailed.
     flavors.create('flavor1', 64, 1, 120, flavorid='flavorid')
     self.assertRaises(exception.FlavorIdExists,
                       flavors.create,
                       'flavor2', 64, 1, 120, flavorid='flavorid')
Ejemplo n.º 21
0
 def test_duplicate_names_fail(self):
     # Ensures that name duplicates raise FlavorCreateFailed.
     flavors.create('flavor', 256, 1, 120, 200, 'flavor1')
     self.assertRaises(exception.FlavorExists,
                       flavors.create,
                       'flavor', 64, 1, 120)
Ejemplo n.º 22
0
 def test_create_with_valid_name(self):
     # Names can contain alphanumeric and [_.- ]
     flavors.create('azAZ09. -_', 64, 1, 120)
     # And they are not limited to ascii characters
     # E.g.: m1.huge in simplified Chinese
     flavors.create(u'm1.\u5DE8\u5927', 6400, 100, 12000)
Ejemplo n.º 23
0
    def test_is_public_must_be_valid_bool_string(self):
        self.assertInvalidInput('flavor1', 64, 1, 120, is_public='foo')

        flavors.create('flavor1', 64, 1, 120, is_public='TRUE')
        flavors.create('flavor2', 64, 1, 120, is_public='False')
        flavors.create('flavor3', 64, 1, 120, is_public='Yes')
        flavors.create('flavor4', 64, 1, 120, is_public='No')
        flavors.create('flavor5', 64, 1, 120, is_public='Y')
        flavors.create('flavor6', 64, 1, 120, is_public='N')
        flavors.create('flavor7', 64, 1, 120, is_public='1')
        flavors.create('flavor8', 64, 1, 120, is_public='0')
        flavors.create('flavor9', 64, 1, 120, is_public='true')
Ejemplo n.º 24
0
    def test_name_with_special_characters(self):
        # Names can contain all printable characters
        flavors.create('_foo.bar-123', 64, 1, 120)

        # Ensure instance types raises InvalidInput for invalid characters.
        self.assertInvalidInput('foobar\x00', 64, 1, 120)
Ejemplo n.º 25
0
 def test_memory_must_be_positive_db_integer(self):
     self.assertInvalidInput('flavor1', 'foo', 1, 120)
     self.assertInvalidInput('flavor1', -1, 1, 120)
     self.assertInvalidInput('flavor1', 0, 1, 120)
     self.assertInvalidInput('flavor1', db.MAX_INT + 1, 1, 120)
     flavors.create('flavor1', 1, 1, 120)
Ejemplo n.º 26
0
 def test_root_gb_must_be_nonnegative_db_integer(self):
     self.assertInvalidInput('flavor1', 64, 1, 'foo')
     self.assertInvalidInput('flavor1', 64, 1, -1)
     self.assertInvalidInput('flavor1', 64, 1, db.MAX_INT + 1)
     flavors.create('flavor1', 64, 1, 0)
     flavors.create('flavor2', 64, 1, 120)
Ejemplo n.º 27
0
 def test_vcpus_must_be_positive_db_integer(self):
     self.assertInvalidInput('flavor`', 64, 'foo', 120)
     self.assertInvalidInput('flavor1', 64, -1, 120)
     self.assertInvalidInput('flavor1', 64, 0, 120)
     self.assertInvalidInput('flavor1', 64, db.MAX_INT + 1, 120)
     flavors.create('flavor1', 64, 1, 120)