Skip to content

Commit

Permalink
Catch JSON decoding errors in browser.get
Browse files Browse the repository at this point in the history
  • Loading branch information
kalikiana committed Oct 14, 2021
1 parent fb80610 commit 014a9ae
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
10 changes: 8 additions & 2 deletions openqa_review/browser.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,15 +148,21 @@ def _get(self, url, as_json=False): # pragma: no cover
msg = "Request to {} was not successful: {}".format(url, str(e))
log.warn(msg)
raise DownloadError(msg)

try:
r.raise_for_status()
except requests.exceptions.HTTPError as e:
msg = "Request to {} failed: {}".format(url, str(e))
log.warn(msg)
raise DownloadError(msg)
return self.decode_content(r.content.decode("utf-8"), url, as_json)

content = r.json() if as_json else r.content.decode("utf8")
def _decode_content(self, url, raw, as_json=False): # pragma: no cover
try:
content = json.loads(raw) if as_json else raw
except json.decoder.JSONDecodeError as e:
msg = 'Unable to decode JSON for {}: {} (Content was: "{}")'.format(url, str(e), raw)
log.warn(msg)
raise DownloadError(msg)
return content

def json_rpc_get(self, url, method, params, cache=True):
Expand Down
18 changes: 17 additions & 1 deletion tests/test_openqa_review.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))

from openqa_review.browser import filename_to_url
from openqa_review.browser import filename_to_url, DownloadError
from openqa_review import openqa_review # SUT


Expand Down Expand Up @@ -532,6 +532,12 @@ def test_reminder_comments_on_referenced_bugs_are_posted():
p, pr = list(report.report.items())[0]
report.report[p + 237] = pr

# test invalid JSON
with pytest.raises(DownloadError) as e:
report = str(openqa_review.generate_report(args))
assert "Unable to decode JSON" in str(e)
assert "Unable to decode JSON" in report

openqa_review.reminder_comment_on_issues(report)
args.dry_run = False

Expand Down Expand Up @@ -573,3 +579,13 @@ def test_arch_distinguish():

report = str(openqa_review.generate_report(args))
assert "ppc64le" in report


def test_browser_get_invalid_json():
args = cache_test_args_factory()
args.include_softfails = True
browser = browser_factory(args)

with pytest.raises(DownloadError) as e:
browser._decode_content("http://example.com", "", as_json=True)
assert "Unable to decode JSON" in str(e)

0 comments on commit 014a9ae

Please sign in to comment.