From c7ed3546bd1d76f8222dae9bbedca6790b80b4fb Mon Sep 17 00:00:00 2001
From: Robert Latta <robert.latta@geant.org>
Date: Fri, 11 Feb 2022 14:51:08 +0000
Subject: [PATCH] reduced logged message length

---
 inventory_provider/db/ims.py | 15 +++++++++++----
 test/test_ims.py             | 18 ++++++++++++++++++
 2 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/inventory_provider/db/ims.py b/inventory_provider/db/ims.py
index 29ab57a2..e339780d 100644
--- a/inventory_provider/db/ims.py
+++ b/inventory_provider/db/ims.py
@@ -242,13 +242,20 @@ class IMS(object):
                 if NO_FILTERED_RESULTS_MESSAGE in response_.text.lower():
                     return False
                 try:
-                    r = response_.json()
+                    r = _convert_keys(response_.json())
                 except Exception as e:
-                    logger.debug(f"unexpected response: {response_.text}")
+                    t = response_.text
+                    if len(t) > 100:
+                        message_text = f"{t[:50]} ... {t[-50:]}"
+                    else:
+                        message_text = t
+                    logger.debug(f"unexpected response: {message_text}\n{e}"
+                                 "\nre-raising")
                     raise e
-                if r and 'HasErrors' in r and r['HasErrors']:
+                if r and 'haserrors' in r and r['haserrors']:
                     for e in r['Errors']:
-                        if 'Guid expired' in e['ErrorMessage']:
+                        if e['errormessage'] and \
+                                'guid expired' in e['errormessage'].lower():
                             return True
 
             return False
diff --git a/test/test_ims.py b/test/test_ims.py
index 95b142df..23f30660 100644
--- a/test/test_ims.py
+++ b/test/test_ims.py
@@ -1,6 +1,7 @@
 from requests import HTTPError
 
 import inventory_provider
+from inventory_provider.db.ims import IMSError
 
 
 class MockResponse:
@@ -33,6 +34,23 @@ def test_ims_class_login(mocker):
         params=None)
 
 
+def test_ims_failed_response(mocker):
+    mock_post = mocker.patch('inventory_provider.db.ims.requests.post')
+    mock_post.return_value = MockResponse("my_bearer_token", 200)
+    mock_post.return_value.text = "my_bearer_token"
+    mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
+    mock_get.return_value.status_code = 200
+    mock_get.return_value.json.side_effect = IMSError("IMS exception")
+
+    ds = inventory_provider.db.ims.IMS(
+        'dummy_base', 'dummy_username', 'dummy_password')
+
+    try:
+        ds.get_entity_by_id('Node', 1234)
+    except Exception as e:
+        assert isinstance(e, IMSError)
+
+
 def test_ims_class_entity_by_id(mocker):
     mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
     ds = inventory_provider.db.ims.IMS(
-- 
GitLab