diff --git a/warden_server/test_warden_server.py b/warden_server/test_warden_server.py index 2c6851ceeb740182bb89bd092a05815c565ffaaf..13e038321d9c3b2079e7d0e9f00004b3ae0b5c27 100644 --- a/warden_server/test_warden_server.py +++ b/warden_server/test_warden_server.py @@ -230,7 +230,8 @@ class Warden3ServerTest(unittest.TestCase): ("/sendEvents?secret=abc", '[{"Node": [{"Name"}]}]', "400 Deserialization error.", None), ("/sendEvents?secret=abc", '[{"Node": [{"Name": "test"}]}]', "422 Node does not correspond with saving client", None), ("/sendEvents?secret=abc", '[{"Node": [{"Name": "cz.cesnet.warden3test"}], "ID" : "120820201142"}]', "200 OK", ['{"saved": 1}']), - ("/sendEvents?secret=abc", '[{"Node": [{"Name": "cz.cesnet.warden3test"}], "ID" : "120820201142"}]', "400 IdeaID is not unique", None), + ("/sendEvents?secret=abc", '[{"Node": [{"Name": "cz.cesnet.warden3test"}], "ID" : "120820201142"}]', "409 IDEA event with this ID already exists", None), + ("/sendEvents?secret=abc", '[{"Node": [{"Name": "cz.cesnet.warden3test"}], "ID" : "120820201143"}]', "200 OK", None), ] for query, payload, expected_status, expected_response in tests: with self.subTest(query=query, payload=payload, expected_status=expected_status, expected_response=expected_response): diff --git a/warden_server/warden_server.py b/warden_server/warden_server.py index b06ab0956bd748362cfd2d11159625f746269c28..2ceacdbbbd12bf730b099d6220ecaec0e4595b11 100755 --- a/warden_server/warden_server.py +++ b/warden_server/warden_server.py @@ -767,9 +767,9 @@ class MySQL(ObjectBase): try: ideaid = event['ID'] except (KeyError, TypeError, ValueError): - exception = self.req.error(message="IDEA ID is null", error=400, exc=sys.exc_info(), env=self.req.env) + exception = self.req.error(message="Missing IDEA ID", error=400, exc=sys.exc_info(), env=self.req.env) exception.log(self.log) - errors.extend([{"error": 400, "message": "IDEA ID is not present"}]) + errors.extend([{"error": 400, "message": "Missing IDEA ID"}]) error_indx.append(event_id) continue lastid = db.query( @@ -791,11 +791,10 @@ class MySQL(ObjectBase): db.query("INSERT INTO event_tag_mapping (event_id,tag_id) VALUES (%s, %s)", (lastid, tag_id)) # In the future there may be other integrity errors, but at the moment there is just uniqueness of idea_id except my.IntegrityError as e: - exception = self.req.error(message="Database integrity error", error=400, exc=sys.exc_info(), env=self.req.env) + exception = self.req.error(message="IDEA event with this ID already exists", error=400, exc=sys.exc_info(), env=self.req.env) exception.log(self.log) - errors.extend([{"error": 400, "message": "IDEA ID is not unique"}]) + errors.extend([{"error": 409, "message": "IDEA event with this ID already exists"}]) error_indx.append(event_id) - pass return (errors, error_indx) except Exception as e: exception = self.req.error(message="DB error", error=500, exc=sys.exc_info(), env=self.req.env) @@ -1134,7 +1133,7 @@ class WardenHandler(ObjectBase): return [] def add_event_nums(self, ilist, events, errlist): - """Uniquify the list of errors and append the lists of indices and ids of events affected by the error.""" + """Uniquify the list of errors and append the lists of indices and add ids of events affected by the error.""" if not ilist: return errlist unique_errors = [dict(s) for s in set(frozenset(d.items()) for d in errlist)]