diff --git a/pdc_client/plugins/build_images.py b/pdc_client/plugins/build_images.py index 045498b1..24a4be61 100644 --- a/pdc_client/plugins/build_images.py +++ b/pdc_client/plugins/build_images.py @@ -5,8 +5,8 @@ # http://opensource.org/licenses/MIT # import json -import ast import re +import sys from pdc_client.plugin_helpers import PDCClientPlugin, get_paged, add_parser_arguments, extract_arguments @@ -78,8 +78,10 @@ def list_build_image(self, args): def build_image_info(self, args, image_id=None): image_id = image_id or args.image_id build_images = self.client['build-images']._(image_id=image_id) + if not build_images['count']: + print 'Not found' + sys.exit(1) build_image = build_images['results'][0] - if args.json: print json.dumps(build_image) return @@ -120,12 +122,15 @@ def build_image_create(self, args): def _get_pk_from_image_id(self, image_id): build_images = self.client['build-images']._(image_id=image_id) + if not build_images['count']: + print "Build image with image id '%s' doesn't exist." % image_id + sys.exit(1) url = build_images['results'][0]['url'] m = re.search('(\d+)/$', url) return m.group(1) def _parse_to_dict(self, in_str): - result = ast.literal_eval(in_str) + result = json.loads(in_str) if isinstance(result, dict): return result raise ValueError("malformed string: %s" % in_str) diff --git a/pdc_client/test_helpers.py b/pdc_client/test_helpers.py index fc6f3417..8035cae4 100644 --- a/pdc_client/test_helpers.py +++ b/pdc_client/test_helpers.py @@ -81,6 +81,8 @@ def __getitem__(self, key): def __call__(self, *args, **kwargs): if len(args) == 1: return self._handle_post(args[0]) + elif len(args) == 2: + return self._handle_patch(args[1]) elif len(args) == 0: return self._handle_get(kwargs) @@ -88,6 +90,10 @@ def _handle_post(self, data): self.calls.setdefault(self.will_call, []).append(('POST', data)) return self.endpoints[self.will_call]['POST'] + def _handle_patch(self, data): + self.calls.setdefault(self.will_call, []).append(('PATCH', data)) + return self.endpoints[self.will_call]['PATCH'] + def _handle_get(self, filters): data = self.endpoints[self.will_call]['GET'] self.calls.setdefault(self.will_call, []).append(('GET', filters)) diff --git a/pdc_client/tests/build_image/__init__.py b/pdc_client/tests/build_image/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/pdc_client/tests/build_image/data/detail.json b/pdc_client/tests/build_image/data/detail.json new file mode 100644 index 00000000..bf60a930 --- /dev/null +++ b/pdc_client/tests/build_image/data/detail.json @@ -0,0 +1,9 @@ +{ + "archives": [], + "image_format": "docker", + "image_id": "test_image_1", + "md5": "11112222333344445555666677778899", + "releases": [], + "rpms": [], + "url": "http://127.0.0.1:8000/rest_api/v1/build-images/1/" +} diff --git a/pdc_client/tests/build_image/data/detail.txt b/pdc_client/tests/build_image/data/detail.txt new file mode 100644 index 00000000..7bf9397b --- /dev/null +++ b/pdc_client/tests/build_image/data/detail.txt @@ -0,0 +1,4 @@ +Image ID test_image_1 +Image Format docker +URL http://127.0.0.1:8000/rest_api/v1/build-images/1/ +MD5 11112222333344445555666677778899 diff --git a/pdc_client/tests/build_image/data/list_multi_page.txt b/pdc_client/tests/build_image/data/list_multi_page.txt new file mode 100644 index 00000000..89372fa8 --- /dev/null +++ b/pdc_client/tests/build_image/data/list_multi_page.txt @@ -0,0 +1,30 @@ +build-image-0 +build-image-1 +build-image-2 +build-image-3 +build-image-4 +build-image-5 +build-image-6 +build-image-7 +build-image-8 +build-image-9 +build-image-10 +build-image-11 +build-image-12 +build-image-13 +build-image-14 +build-image-15 +build-image-16 +build-image-17 +build-image-18 +build-image-19 +build-image-20 +build-image-21 +build-image-22 +build-image-23 +build-image-24 +build-image-25 +build-image-26 +build-image-27 +build-image-28 +build-image-29 diff --git a/pdc_client/tests/build_image/tests.py b/pdc_client/tests/build_image/tests.py new file mode 100644 index 00000000..3d17bc31 --- /dev/null +++ b/pdc_client/tests/build_image/tests.py @@ -0,0 +1,89 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) 2015 Red Hat +# Licensed under The MIT License (MIT) +# http://opensource.org/licenses/MIT +# +from pdc_client.test_helpers import CLITestCase +from pdc_client.runner import Runner + + +class BuildImageTestCase(CLITestCase): + def setUp(self): + self.runner = Runner() + self.runner.setup() + + def _setup_list_1(self, api): + api.add_endpoint('build-images', 'GET', [ + {'image_id': 'build-image-{}'.format(x), + 'md5': '111122223333444455556666777788{:02}'.format(x)} + for x in range(30) + ]) + + def _setup_detail(self, api): + obj = {'image_id': 'test_image_1', + 'url': 'http://127.0.0.1:8000/rest_api/v1/build-images/1/', + 'image_format': 'docker', + 'md5': '11112222333344445555666677778899', + 'rpms': [], + 'archives': [], + 'releases': []} + api.add_endpoint('build-images/1', 'PATCH', obj) + api.add_endpoint('build-images/1', 'GET', obj) + api.add_endpoint('build-images', 'POST', obj) + + def _setup_list_2(self, api): + filter_result = { + "count": 1, + "next": None, + "previous": None, + "results": [ + { + "archives": [], + "image_format": "docker", + "image_id": "test_image_1", + "md5": "11112222333344445555666677778899", + "releases": [], + "rpms": [], + "url": "http://127.0.0.1:8000/rest_api/v1/build-images/1/" + } + ] + } + + api.add_endpoint('build-images', 'GET', filter_result) + + def test_list(self, api): + self._setup_list_1(api) + with self.expect_output('list_multi_page.txt'): + self.runner.run(['build-image-list']) + self.assertEqual(api.calls['build-images'], + [('GET', {'page': 1}), + ('GET', {'page': 2})]) + + def test_info(self, api): + self._setup_detail(api) + self._setup_list_2(api) + with self.expect_output('detail.json', parse_json=True): + self.runner.run(['--json', 'build-image-info', 'test_image_1']) + self.assertEqual(api.calls['build-images'], [('GET', {'image_id': 'test_image_1'})]) + + def test_create(self, api): + self._setup_detail(api) + self._setup_list_2(api) + with self.expect_output('detail.txt'): + self.runner.run(['build-image-create', + '--image-id', 'test_image_1', + '--image-format', 'docker', + '--md5', '11112222333344445555666677778899']) + self.assertEqual(api.calls['build-images'], [('POST', {'image_format': 'docker', + 'image_id': 'test_image_1', + 'md5': '11112222333344445555666677778899'}), + ('GET', {'image_id': 'test_image_1'})]) + + def test_update(self, api): + self._setup_detail(api) + self._setup_list_2(api) + with self.expect_output('detail.txt'): + self.runner.run(['build-image-update', 'test_image_1', + '--image-format', 'docker', + '--md5', '11112222333344445555666677778899'])