def test_create_raise_exception_by_operator_rpcapi(self): name = "test_key" request_body = { "keypair": { "name": name, } } self.mox.StubOutWithMock(db, "keypair_update") db.keypair_update( IsA(context.RequestContext), GID, IsA(str), {"status": "ERROR"} ) scheduler_rpcapi.SchedulerAPI.select_destinations( IsA(context.RequestContext), request_spec={}, filter_properties={})\ .AndReturn({"host": "fake_host"}) operator_rpcapi.ResourceOperatorAPI.keypair_create( IsA(context.RequestContext), "fake_host", gid=GID, keypair_id=IsA(unicode), name=name)\ .AndRaise(Exception()) self.mox.ReplayAll() url = '/v1/groups/' + GID + '/keypairs' req = get_request(url, 'POST', request_body) res = req.get_response(self.app) self.assertEqual(res.status_code, 500)
def test_keypair_create(self): self.stubs.Set( self.manager.keypair_client, "keypair_create", fake_keypair_create) self.mox.StubOutWithMock(db, "keypair_update") db.keypair_update(self.context, GID, KEYPAIR_ID, mox.IsA(dict)) self.mox.ReplayAll() self.manager.keypair_create( self.context, GID, KEYPAIR_ID, "fake_keypair")
def test_keypair_create_keypair_not_found(self): self.stubs.Set( self.manager.keypair_client, "keypair_create", fake_keypair_create) self.mox.StubOutWithMock(db, "keypair_update") db.keypair_update(self.context, GID, KEYPAIR_ID, mox.IsA(dict))\ .AndRaise(exception.KeypairNotFound(keypair_id=KEYPAIR_ID)) self.mox.ReplayAll() self.manager.keypair_create( self.context, GID, KEYPAIR_ID, "fake_keypair")
def test_keypair_create_raise_keypair_create_failed(self): self.mox.StubOutWithMock(self.manager.keypair_client, "keypair_create") self.manager.keypair_client.keypair_create(mox.IsA(str))\ .AndRaise(exception.KeypairCreateFailed()) self.mox.StubOutWithMock(db, "keypair_update") db.keypair_update(self.context, GID, KEYPAIR_ID, {"status": "ERROR"}) self.mox.ReplayAll() self.manager.keypair_create( self.context, GID, KEYPAIR_ID, "fake_keypair")
def keypair_create(self, context, gid, keypair_id, name): try: values = self.keypair_client.keypair_create(name) values["status"] = "ACTIVE" except Exception as e: LOG.exception(e) values = {"status": "ERROR"} try: db.keypair_update(context, gid, keypair_id, values) except Exception as e: LOG.exception(e)
def update(self, req, body, gid, keypair_id): def _validate(body, gid, keypair_id): if not self.is_valid_body(body, "keypair"): msg = _("Invalid request body") raise exception.InvalidInput(reason=msg) self._uuid_check(gid, keypair_id) values = body["keypair"] is_default = values.get("is_default") if is_default: try: is_default = strutils.bool_from_string(is_default, strict=True) except ValueError: msg = _("is_default must be a boolean") raise exception.InvalidInput(reason=msg) else: msg = _("is_default is required") raise exception.InvalidInput(reason=msg) valid_values = {"is_default": is_default} return valid_values context = req.environ["rack.context"] try: values = _validate(body, gid, keypair_id) keypair = db.keypair_update(context, gid, keypair_id, values) except exception.InvalidInput as e: raise webob.exc.HTTPBadRequest(explanation=e.format_message()) except exception.NotFound as e: raise webob.exc.HTTPNotFound(explanation=e.format_message()) return self._view_builder.update(keypair)
def update(self, req, body, gid, keypair_id): def _validate(body, gid, keypair_id): if not self.is_valid_body(body, 'keypair'): msg = _("Invalid request body") raise exception.InvalidInput(reason=msg) self._uuid_check(gid, keypair_id) values = body["keypair"] is_default = values.get("is_default") if is_default is not None: try: is_default = strutils.bool_from_string(is_default, strict=True) except ValueError: msg = _("is_default must be a boolean") raise exception.InvalidInput(reason=msg) else: msg = _("is_default is required") raise exception.InvalidInput(reason=msg) valid_values = {"is_default": is_default} return valid_values context = req.environ['rack.context'] try: values = _validate(body, gid, keypair_id) keypair = db.keypair_update(context, gid, keypair_id, values) except exception.InvalidInput as e: raise webob.exc.HTTPBadRequest(explanation=e.format_message()) except exception.NotFound as e: raise webob.exc.HTTPNotFound(explanation=e.format_message()) return self._view_builder.update(keypair)
def test_create_raise_exception_by_scheduler_rpcapi(self): self.mox.StubOutWithMock(db, "keypair_update") db.keypair_update( IsA(context.RequestContext), GID, IsA(str), {"status": "ERROR"}) scheduler_rpcapi.SchedulerAPI.select_destinations( IsA(context.RequestContext), request_spec={}, filter_properties={})\ .AndRaise(Exception()) self.mox.ReplayAll() request_body = { "keypair": { "name": "test_key", } } url = '/v1/groups/' + GID + '/keypairs' req = get_request(url, 'POST', request_body) res = req.get_response(self.app) self.assertEqual(res.status_code, 500)
def test_keypair_update(self): gid = "12345678-1234-5678-9123-123456789012" self._create_group(gid) values_before = self._get_base_values(gid) keypair = db.keypair_create(self.user_ctxt, values_before) values = { "is_default": False, "status": "ACTIVE", } keypair_after = db.keypair_update( self.user_ctxt, gid, keypair["keypair_id"], values) self.assertEqual(keypair_after["is_default"], False) self.assertEqual(keypair_after["status"], "ACTIVE")
def create(self, req, body, gid): def _validate(body, gid): if not self.is_valid_body(body, "keypair"): msg = _("Invalid request body") raise exception.InvalidInput(reason=msg) self._uuid_check(gid) values = body["keypair"] name = values.get("name") is_default = values.get("is_default") if name: if isinstance(name, six.string_types): name = name.strip() utils.check_string_length(name, "name", min_length=1, max_length=255) if is_default: try: is_default = strutils.bool_from_string(is_default, strict=True) except ValueError: msg = _("is_default must be a boolean") raise exception.InvalidInput(reason=msg) else: is_default = False valid_values = {} valid_values["gid"] = gid valid_values["display_name"] = name valid_values["is_default"] = is_default return valid_values try: values = _validate(body, gid) except exception.InvalidInput as e: raise webob.exc.HTTPBadRequest(explanation=e.format_message()) except exception.GroupNotFound as e: raise webob.exc.HTTPNotFound(explanation=e.format_message()) context = req.environ["rack.context"] values["keypair_id"] = unicode(uuid.uuid4()) if not values["display_name"]: values["display_name"] = "keypair-" + values["keypair_id"] values["user_id"] = context.user_id values["project_id"] = context.project_id values["status"] = "BUILDING" try: db.group_get_by_gid(context, gid) keypair = db.keypair_create(context, values) host = self.scheduler_rpcapi.select_destinations(context, request_spec={}, filter_properties={}) self.operator_rpcapi.keypair_create( context, host["host"], gid=gid, keypair_id=values["keypair_id"], name=values["display_name"] ) except exception.GroupNotFound as e: raise webob.exc.HTTPNotFound(explanation=e.format_message()) except Exception: keypair_id = values["keypair_id"] db.keypair_update(context, gid, keypair_id, {"status": "ERROR"}) raise exception.KeypairCreateFailed() return self._view_builder.create(keypair)