Updating tests results format according to spec

Spec:
https://github.com/stackforge/refstack/blob/master/specs/approved/api-v1.md

Update patch:
https://review.openstack.org/#/c/146680/

Change-Id: I75c62090a45d742b88acdfe080e24d62658976ce
This commit is contained in:
sslypushenko 2015-01-14 18:20:24 +02:00
parent 38e6276737
commit 9403991171
5 changed files with 30 additions and 13 deletions

View File

@ -168,8 +168,11 @@ class RefstackClient:
self.logger.debug('API request content: %s ' % content) self.logger.debug('API request content: %s ' % content)
try: try:
url = '%s/v1/results/' % self.args.url url = '%s/v1/results/' % self.args.url
headers = {'Content-type': 'application/json'}
response = requests.post(url, data={'data': json.dumps(content)}) response = requests.post(url,
data=json.dumps(content),
headers=headers)
self.logger.info(url + " Response: " + str(response.text)) self.logger.info(url + " Response: " + str(response.text))
except Exception as e: except Exception as e:
self.logger.critical('Failed to post %s - %s ' % (url, e)) self.logger.critical('Failed to post %s - %s ' % (url, e))

View File

@ -35,7 +35,9 @@ class TempestSubunitTestResultPassOnly(testtools.TestResult):
"""Overwrite super class method for additional data processing.""" """Overwrite super class method for additional data processing."""
super(TempestSubunitTestResultPassOnly, self).addSuccess(testcase) super(TempestSubunitTestResultPassOnly, self).addSuccess(testcase)
# Remove any [] and () from the test ID before appending it. # Remove any [] and () from the test ID before appending it.
self.results.append(re.sub('[\(\[].*[\]\)]', '', testcase.id())) self.results.append(
{'name': re.sub('[\(\[].*[\]\)]', '', testcase.id())}
)
def get_results(self): def get_results(self):
return self.results return self.results

View File

@ -2,7 +2,7 @@
"duration_seconds": 0, "duration_seconds": 0,
"cpid": "test-id", "cpid": "test-id",
"results": [ "results": [
"tempest.passed.test" {"name": "tempest.passed.test"}
] ]
} }

View File

@ -20,10 +20,12 @@ import os
import tempfile import tempfile
import subprocess import subprocess
import httmock
import mock import mock
from mock import MagicMock from mock import MagicMock
import unittest import unittest
import refstack_client.refstack_client as rc import refstack_client.refstack_client as rc
@ -55,7 +57,7 @@ class TestRefstackClient(unittest.TestCase):
argv = ['test', argv = ['test',
'-c', conf_file_name, '-c', conf_file_name,
'--test-cases', 'tempest.api.compute', '--test-cases', 'tempest.api.compute',
'--url', '0.0.0.0'] '--url', 'http://127.0.0.1']
if verbose: if verbose:
argv.append(verbose) argv.append(verbose)
return argv return argv
@ -216,7 +218,7 @@ class TestRefstackClient(unittest.TestCase):
client = rc.RefstackClient(args) client = rc.RefstackClient(args)
subunit_file = self.test_path + "/.testrepository/0" subunit_file = self.test_path + "/.testrepository/0"
results = client.get_passed_tests(subunit_file) results = client.get_passed_tests(subunit_file)
expected = ['tempest.passed.test'] expected = [{'name': 'tempest.passed.test'}]
self.assertEqual(expected, results) self.assertEqual(expected, results)
def test_run_tempest(self): def test_run_tempest(self):
@ -232,20 +234,29 @@ class TestRefstackClient(unittest.TestCase):
return_value=MagicMock(returncode=0)) return_value=MagicMock(returncode=0))
self.patch("os.path.isfile", return_value=True) self.patch("os.path.isfile", return_value=True)
self.mock_keystone() self.mock_keystone()
client.get_passed_tests = MagicMock(return_value=['test']) client.get_passed_tests = MagicMock(return_value=[{'name': 'test'}])
client.post_results = MagicMock() client.logger.info = MagicMock()
client._save_json_results = MagicMock() client._save_json_results = MagicMock()
client.test()
expected_content = json.dumps({'test_id': 42})
@httmock.urlmatch(netloc=r'(.*\.)?127.0.0.1$', path='/v1/results/')
def refstack_api_mock(url, request):
return expected_content
with httmock.HTTMock(refstack_api_mock):
client.test()
mock_popen.assert_called_with( mock_popen.assert_called_with(
('%s/run_tempest.sh' % self.test_path, '-C', self.conf_file_name, ('%s/run_tempest.sh' % self.test_path, '-C', self.conf_file_name,
'-V', '-t', '--', 'tempest.api.compute'), '-V', '-t', '--', 'tempest.api.compute'),
stderr=None stderr=None
) )
expected_content = {'duration_seconds': mock.ANY, client.logger.info.assert_called_with(
'cpid': 'test-id', 'http://127.0.0.1/v1/results/ Response: '
'results': ['test']} '%s' % expected_content
client.post_results.assert_called_with('0.0.0.0', expected_content) )
def test_run_tempest_offline(self): def test_run_tempest_offline(self):
""" """
@ -319,7 +330,7 @@ class TestRefstackClient(unittest.TestCase):
client.upload() client.upload()
expected_json = {'duration_seconds': 0, expected_json = {'duration_seconds': 0,
'cpid': 'test-id', 'cpid': 'test-id',
'results': ['tempest.passed.test']} 'results': [{'name': 'tempest.passed.test'}]}
client.post_results.assert_called_with('http://api.test.org', client.post_results.assert_called_with('http://api.test.org',
expected_json) expected_json)

View File

@ -7,3 +7,4 @@ testrepository>=0.0.18
testtools>=0.9.34 testtools>=0.9.34
mock mock
coverage coverage
httmock