Merge pull request #2912 from coreos-inc/joseph.schorr/QS-60/json-label-bug
Fix exception raised for certain non-JSON strings given to is_json
This commit is contained in:
commit
ebe2f1e78f
3 changed files with 40 additions and 2 deletions
|
@ -1536,6 +1536,27 @@ class V2RegistryTests(V2RegistryPullMixin, V2RegistryPushMixin, RegistryTestsMix
|
||||||
self.assertTrue('text/plain' in media_types)
|
self.assertTrue('text/plain' in media_types)
|
||||||
self.assertTrue('application/json' in media_types)
|
self.assertTrue('application/json' in media_types)
|
||||||
|
|
||||||
|
def test_not_json_labels(self):
|
||||||
|
# Push a new repo with the latest tag.
|
||||||
|
images = [{
|
||||||
|
'id': 'someid',
|
||||||
|
'config': {'Labels': {'foo': '[hello world]', 'bar': '{wassup?!}'}},
|
||||||
|
'contents': 'somecontent'
|
||||||
|
}]
|
||||||
|
|
||||||
|
(_, manifests) = self.do_push('devtable', 'newrepo', 'devtable', 'password', images=images)
|
||||||
|
digest = manifests['latest'].digest
|
||||||
|
|
||||||
|
self.conduct_api_login('devtable', 'password')
|
||||||
|
labels = self.conduct('GET', '/api/v1/repository/devtable/newrepo/manifest/' + digest + '/labels').json()
|
||||||
|
self.assertEquals(2, len(labels['labels']))
|
||||||
|
|
||||||
|
media_types = set([label['media_type'] for label in labels['labels']])
|
||||||
|
|
||||||
|
self.assertTrue('text/plain' in media_types)
|
||||||
|
self.assertFalse('application/json' in media_types)
|
||||||
|
|
||||||
|
|
||||||
def test_expiration_label(self):
|
def test_expiration_label(self):
|
||||||
# Push a new repo with the latest tag.
|
# Push a new repo with the latest tag.
|
||||||
images = [{
|
images = [{
|
||||||
|
|
17
util/test/test_validation.py
Normal file
17
util/test/test_validation.py
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from util.validation import is_json
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('string_value,expected', [
|
||||||
|
('{}', True),
|
||||||
|
('[]', True),
|
||||||
|
('[hello world]', False),
|
||||||
|
('{hello world}', False),
|
||||||
|
('[test] this is a test', False),
|
||||||
|
('hello world', False),
|
||||||
|
('{"hi": "there"}', True),
|
||||||
|
('[1, 2, 3, 4]', True),
|
||||||
|
('[1, 2, {"num": 3}, 4]', True),
|
||||||
|
])
|
||||||
|
def test_is_json(string_value, expected):
|
||||||
|
assert is_json(string_value) == expected
|
|
@ -86,6 +86,6 @@ def is_json(value):
|
||||||
try:
|
try:
|
||||||
json.loads(value)
|
json.loads(value)
|
||||||
return True
|
return True
|
||||||
except TypeError:
|
except (TypeError, ValueError):
|
||||||
return False
|
return False
|
||||||
|
return False
|
||||||
|
|
Reference in a new issue