Exemplo n.º 1
0
    def test_validation_complex_valid_no_reason(self):
        accepted_keys = {
            "mandatory": [
                "job",
                "kernel"
            ],
            "accepted": [
                "foo",
                "bar",
                "baz",
                "job",
                "kernel",
            ]
        }

        json_obj = {
            "job": "job",
            "kernel": "kernel",
            "foo": "foo"
        }

        valid, reason = utilsv.is_valid_json(json_obj, accepted_keys)

        self.assertTrue(valid)
        self.assertIsNone(reason)
Exemplo n.º 2
0
    def _put(self, *args, **kwargs):
        response = None

        # PUT and POST request require the same content type.
        valid_request = handlers.common.request.valid_post_request(
            self.request.headers, self.request.remote_ip)
        if valid_request == 200:
            doc_id = kwargs.get("id", None)
            if doc_id:
                try:
                    json_obj = json.loads(self.request.body.decode("utf8"))

                    valid_json, errors = validator.is_valid_json(
                        json_obj, self._valid_keys("PUT"))
                    if valid_json:
                        response = self._update_data(doc_id, json_obj)
                        response.errors = errors
                    else:
                        response = hresponse.HandlerResponse(400)
                        response.reason = "Provided JSON is not valid"
                        response.errors = errors
                except ValueError, ex:
                    self.log.exception(ex)
                    error = "No JSON data found in the PUT request"
                    self.log.error(error)
                    response = hresponse.HandlerResponse(422)
                    response.reason = error
            else:
                response = hresponse.HandlerResponse(400)
                response.reason = "Missing token ID"
Exemplo n.º 3
0
    def _put(self, *args, **kwargs):
        response = None

        # PUT and POST request require the same content type.
        valid_request = self._valid_post_request()
        if valid_request == 200:
            doc_id = kwargs.get("id", None)
            if doc_id:
                try:
                    json_obj = json.loads(self.request.body.decode("utf8"))

                    valid_json, errors = validator.is_valid_json(
                        json_obj, self._valid_keys("PUT"))
                    if valid_json:
                        response = self._update_data(doc_id, json_obj)
                        response.errors = errors
                    else:
                        response = hresponse.HandlerResponse(400)
                        response.reason = "Provided JSON is not valid"
                        response.errors = errors
                except ValueError, ex:
                    self.log.exception(ex)
                    error = "No JSON data found in the PUT request"
                    self.log.error(error)
                    response = hresponse.HandlerResponse(422)
                    response.reason = error
            else:
                response = hresponse.HandlerResponse(400)
                response.reason = "Missing token ID"
Exemplo n.º 4
0
    def test_valid_json_with_more_valid_keys(self):
        json_string = '{"kernel": "kernel"}'
        accepted_keys = ['job', 'kernel', "defconfig", "foo"]

        valid, reason = utilsv.is_valid_json(
            json.loads(json_string), accepted_keys
        )
        self.assertTrue(valid)
        self.assertIsNone(reason)
Exemplo n.º 5
0
    def test_valid_json_valid(self):
        json_string = '{"job": "job", "kernel": "kernel"}'
        accepted_keys = ['job', 'kernel']

        valid, reason = utilsv.is_valid_json(
            json.loads(json_string), accepted_keys
        )
        self.assertTrue(valid)
        self.assertIsNone(reason)
Exemplo n.º 6
0
    def test_remove_all_keys(self):
        json_obj = {
            "job": "job",
            "kernel": "kernel",
        }

        accepted_keys = ["foo", "bar"]
        valid, reason = utilsv.is_valid_json(json_obj, accepted_keys)

        self.assertFalse(valid)
        self.assertIsNotNone(reason)
Exemplo n.º 7
0
    def test_no_accepted_keys(self):
        json_obj = {
            "kernel": "foo",
            "job": "job",
            "foo": "bar"
        }
        accepted_keys = None

        valid, reason = utilsv.is_valid_json(json_obj, accepted_keys)
        self.assertFalse(valid)
        self.assertIsNotNone(reason)
Exemplo n.º 8
0
    def execute_put(self, *args, **kwargs):
        """Execute the PUT pre-operations."""
        response = None
        valid_token, token = self.validate_req_token("PUT")

        if valid_token:
            if kwargs.get("id", None):
                valid_request = handlers.common.request.valid_post_request(
                    self.request.headers, self.request.remote_ip)

                if valid_request == 200:
                    try:
                        json_obj = json.loads(self.request.body.decode("utf8"))

                        valid_json, j_reason = validator.is_valid_json(
                            json_obj, self._valid_keys("PUT"))
                        if valid_json:
                            kwargs["json_obj"] = json_obj
                            kwargs["reason"] = j_reason
                            kwargs["token"] = token
                            response = self._put(*args, **kwargs)
                        else:
                            response = hresponse.HandlerResponse(400)
                            if j_reason:
                                response.reason = (
                                    "Provided JSON is not valid: %s" %
                                    j_reason)
                            else:
                                response.reason = "Provided JSON is not valid"
                    except ValueError, ex:
                        self.log.exception(ex)
                        error = "No JSON data found in the PUT request"
                        self.log.error(error)
                        response = hresponse.HandlerResponse(422)
                        response.reason = error
                else:
                    response = hresponse.HandlerResponse(valid_request)
                    response.reason = (
                        "%s: %s" %
                        (
                            self._get_status_message(valid_request),
                            "Use %s as the content type" % self.content_type
                        )
                    )
            else:
                response = hresponse.HandlerResponse(400)
                response.reason = "No ID specified"
Exemplo n.º 9
0
    def test_valid_json_with_strange_keys(self):
        json_obj = {
            "kernel": "foo",
            "foo": "bar",
            "baz": "foo",
            "job": "job",
        }
        expected = {
            "kernel": "foo",
            "job": "job",
        }
        accepted_keys = ['job', 'kernel']

        valid, reason = utilsv.is_valid_json(json_obj, accepted_keys)

        self.assertTrue(valid)
        self.assertIsNotNone(reason)
        self.assertDictEqual(expected, json_obj)
Exemplo n.º 10
0
    def execute_put(self, *args, **kwargs):
        """Execute the PUT pre-operations."""
        response = None
        valid_token, token = self.validate_req_token("PUT")

        if valid_token:
            if kwargs.get("id", None):
                valid_request = handlers.common.request.valid_post_request(
                    self.request.headers, self.request.remote_ip)

                if valid_request == 200:
                    try:
                        json_obj = json.loads(self.request.body.decode("utf8"))

                        valid_json, j_reason = validator.is_valid_json(
                            json_obj, self._valid_keys("PUT"))
                        if valid_json:
                            kwargs["json_obj"] = json_obj
                            kwargs["reason"] = j_reason
                            kwargs["token"] = token
                            response = self._put(*args, **kwargs)
                        else:
                            response = hresponse.HandlerResponse(400)
                            if j_reason:
                                response.reason = (
                                    "Provided JSON is not valid: %s" %
                                    j_reason)
                            else:
                                response.reason = "Provided JSON is not valid"
                    except ValueError, ex:
                        self.log.exception(ex)
                        error = "No JSON data found in the PUT request"
                        self.log.error(error)
                        response = hresponse.HandlerResponse(422)
                        response.reason = error
                else:
                    response = hresponse.HandlerResponse(valid_request)
                    response.reason = (
                        "%s: %s" %
                        (self._get_status_message(valid_request),
                         "Use %s as the content type" % self.content_type))
            else:
                response = hresponse.HandlerResponse(400)
                response.reason = "No ID specified"
Exemplo n.º 11
0
    def execute_post(self, *args, **kwargs):
        """Execute the POST pre-operations.

        Checks that everything is OK to perform a POST.
        """
        response = None
        valid_token, token = self.validate_req_token("POST")

        if valid_token:
            valid_request = handlers.common.request.valid_post_request(
                self.request.headers, self.request.remote_ip)

            if valid_request == 200:
                try:
                    json_obj = json.loads(self.request.body.decode("utf8"))

                    valid_json, errors = validator.is_valid_json(
                        json_obj, self._valid_keys("POST"))
                    if valid_json:
                        kwargs["json_obj"] = json_obj
                        kwargs["token"] = token

                        response = self._post(*args, **kwargs)
                        response.errors = errors
                    else:
                        response = hresponse.HandlerResponse(400)
                        response.reason = "Provided JSON is not valid"
                        response.errors = errors
                except ValueError, ex:
                    self.log.exception(ex)
                    error = "No JSON data found in the POST request"
                    self.log.error(error)
                    response = hresponse.HandlerResponse(422)
                    response.reason = error
            else:
                response = hresponse.HandlerResponse(valid_request)
                response.reason = (
                    "%s: %s" %
                    (
                        self._get_status_message(valid_request),
                        "Use %s as the content type" % self.content_type
                    )
                )
Exemplo n.º 12
0
    def execute_post(self, *args, **kwargs):
        """Execute the POST pre-operations.

        Checks that everything is OK to perform a POST.
        """
        response = None
        valid_token, token = self.validate_req_token("POST")

        if valid_token:
            valid_request = handlers.common.request.valid_post_request(
                self.request.headers, self.request.remote_ip)

            if valid_request == 200:
                try:
                    json_obj = json.loads(self.request.body.decode("utf8"))

                    valid_json, errors = validator.is_valid_json(
                        json_obj, self._valid_compare_keys("POST"))
                    if valid_json:
                        kwargs["json_obj"] = json_obj
                        kwargs["token"] = token

                        response = self._post(*args, **kwargs)
                        response.errors = errors
                    else:
                        response = hresponse.HandlerResponse(400)
                        response.reason = "Provided JSON is not valid"
                        response.errors = errors
                except ValueError, ex:
                    self.log.exception(ex)
                    error = "No JSON data found in the POST request"
                    self.log.error(error)
                    response = hresponse.HandlerResponse(422)
                    response.reason = error
            else:
                response = hresponse.HandlerResponse(valid_request)
                response.reason = (
                    "%s: %s" %
                    (
                        self._get_status_message(valid_request),
                        "Use %s as the content type" % self.content_type
                    )
                )
Exemplo n.º 13
0
    def _put(self, *args, **kwargs):
        response = None

        # PUT and POST request require the same content type.
        valid_request = handlers.common.request.valid_post_request(
            self.request.headers, self.request.remote_ip)

        if valid_request == 200:
            doc_id = kwargs.get("id", None)
            if all([doc_id, validator.is_valid_id(doc_id)]):
                try:
                    json_obj = json.loads(self.request.body.decode("utf8"))

                    valid_json, errors = validator.is_valid_json(
                        json_obj, self._valid_keys("PUT"))

                    if valid_json:
                        response = handlers.common.lab.update_lab(
                            doc_id, json_obj, self._valid_keys("PUT"), self.db)
                    else:
                        response = hresponse.HandlerResponse(400)
                        response.reason = "Provided JSON is not valid"

                    response.errors = errors
                except ValueError:
                    error = "No JSON data found in the PUT request"
                    self.log.error(error)
                    response = hresponse.HandlerResponse(422)
                    response.reason = error
            else:
                response = hresponse.HandlerResponse(400)
                response.reason = "Wrong or missing lab ID"
        else:
            response = hresponse.HandlerResponse(valid_request)
            response.reason = \
                "Wrong content type, must be '%s'" % self.content_type

        return response
Exemplo n.º 14
0
    def _put(self, *args, **kwargs):
        response = None

        # PUT and POST request require the same content type.
        valid_request = handlers.common.request.valid_post_request(
            self.request.headers, self.request.remote_ip)

        if valid_request == 200:
            doc_id = kwargs.get("id", None)
            if all([doc_id, validator.is_valid_id(doc_id)]):
                try:
                    json_obj = json.loads(self.request.body.decode("utf8"))

                    valid_json, errors = validator.is_valid_json(
                        json_obj, self._valid_keys("PUT"))

                    if valid_json:
                        response = handlers.common.lab.update_lab(
                            doc_id, json_obj, self._valid_keys("PUT"), self.db)
                    else:
                        response = hresponse.HandlerResponse(400)
                        response.reason = "Provided JSON is not valid"

                    response.errors = errors
                except ValueError:
                    error = "No JSON data found in the PUT request"
                    self.log.error(error)
                    response = hresponse.HandlerResponse(422)
                    response.reason = error
            else:
                response = hresponse.HandlerResponse(400)
                response.reason = "Wrong or missing lab ID"
        else:
            response = hresponse.HandlerResponse(valid_request)
            response.reason = \
                "Wrong content type, must be '%s'" % self.content_type

        return response
Exemplo n.º 15
0
 def is_valid_json(self, json_obj, **kwargs):
     return validator.is_valid_json(json_obj, self._valid_keys("POST"))