Skip to content

Commit

Permalink
Add test, fix some problems, modify test_helpers.py for patch.
Browse files Browse the repository at this point in the history
1. Add test cases for build images.
2. Fix problems according to review comments and tests.
3. Change class MockAPI in test_helpers.py to support PATCH
   method that not use '+='.
  • Loading branch information
ycheng-aa committed Sep 28, 2015
1 parent 3cfb416 commit ac1f2b1
Show file tree
Hide file tree
Showing 7 changed files with 146 additions and 3 deletions.
11 changes: 8 additions & 3 deletions pdc_client/plugins/build_images.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down
6 changes: 6 additions & 0 deletions pdc_client/test_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,19 @@ 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)

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))
Expand Down
Empty file.
9 changes: 9 additions & 0 deletions pdc_client/tests/build_image/data/detail.json
Original file line number Diff line number Diff line change
@@ -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/"
}
4 changes: 4 additions & 0 deletions pdc_client/tests/build_image/data/detail.txt
Original file line number Diff line number Diff line change
@@ -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
30 changes: 30 additions & 0 deletions pdc_client/tests/build_image/data/list_multi_page.txt
Original file line number Diff line number Diff line change
@@ -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
89 changes: 89 additions & 0 deletions pdc_client/tests/build_image/tests.py
Original file line number Diff line number Diff line change
@@ -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'])

0 comments on commit ac1f2b1

Please sign in to comment.