Fix metric-statistics doesn't respond "Bad Request"

When metric-statistics with end_time equals start_time received,
python monasca-api responds "200 OK" instead of "400 Bad Request".

Change-Id: I56cf42c2530be83b4555a05b4c433666a4ccdb5e
Closes-Bug: #1520029
This commit is contained in:
Shinya Kawabata 2015-11-26 10:38:04 +09:00
parent 8505c41328
commit b71f57313e
4 changed files with 56 additions and 0 deletions

View File

@ -134,3 +134,40 @@ class TestRoleValidation(unittest.TestCase):
self.assertRaises(
falcon.HTTPUnauthorized,
helpers.validate_authorization, req, authorized_roles)
class TestTimestampsValidation(unittest.TestCase):
def test_valid_timestamps(self):
start_time = '2015-01-01T00:00:00Z'
end_time = '2015-01-01T00:00:01Z'
start_timestamp = helpers._convert_time_string(start_time)
end_timestamp = helpers._convert_time_string(end_time)
try:
helpers.validate_start_end_timestamps(start_timestamp,
end_timestamp)
except:
self.fail("shouldn't happen")
def test_same_timestamps(self):
start_time = '2015-01-01T00:00:00Z'
end_time = start_time
start_timestamp = helpers._convert_time_string(start_time)
end_timestamp = helpers._convert_time_string(end_time)
self.assertRaises(
falcon.HTTPBadRequest,
helpers.validate_start_end_timestamps,
start_timestamp, end_timestamp)
def test_end_before_than_start(self):
start_time = '2015-01-01T00:00:00Z'
end_time = '2014-12-31T23:59:59Z'
start_timestamp = helpers._convert_time_string(start_time)
end_timestamp = helpers._convert_time_string(end_time)
self.assertRaises(
falcon.HTTPBadRequest,
helpers.validate_start_end_timestamps,
start_timestamp, end_timestamp)

View File

@ -222,6 +222,13 @@ def get_query_endtime_timestamp(req, required=True):
raise HTTPUnprocessableEntityError('Unprocessable Entity', ex.message)
def validate_start_end_timestamps(start_timestamp, end_timestamp=None):
if end_timestamp:
if not start_timestamp < end_timestamp:
raise falcon.HTTPBadRequest('Bad request',
'start_time must be before end_time')
def _convert_time_string(date_time_string):
dt = timeutils.parse_isotime(date_time_string)
dt = dt.replace(tzinfo=None)

View File

@ -168,6 +168,7 @@ class MetricsMeasurements(metrics_api_v2.MetricsMeasurementsV2API):
helpers.validate_query_dimensions(dimensions)
start_timestamp = helpers.get_query_starttime_timestamp(req)
end_timestamp = helpers.get_query_endtime_timestamp(req, False)
helpers.validate_start_end_timestamps(start_timestamp, end_timestamp)
offset = helpers.get_query_param(req, 'offset')
limit = helpers.get_limit(req)
merge_metrics_flag = get_merge_metrics_flag(req)
@ -222,6 +223,7 @@ class MetricsStatistics(metrics_api_v2.MetricsStatisticsV2API):
helpers.validate_query_dimensions(dimensions)
start_timestamp = helpers.get_query_starttime_timestamp(req)
end_timestamp = helpers.get_query_endtime_timestamp(req, False)
helpers.validate_start_end_timestamps(start_timestamp, end_timestamp)
statistics = helpers.get_query_statistics(req)
period = helpers.get_query_period(req)
offset = helpers.get_query_param(req, 'offset')

View File

@ -184,6 +184,16 @@ class TestMeasurements(base.BaseMonascaTest):
self._verify_list_measurements_meas_len(measurements=measurements,
test_len=NUM_MEASUREMENTS)
@test.attr(type="gate")
@test.attr(type=['negative'])
def test_list_measurements_with_endtime_equals_starttime(self):
query_parms = '?name=' + str(self._names_list[0]) + \
'&merge_metrics=true' \
'&start_time=' + str(self._start_time) + \
'&end_time=' + str(self._start_time)
self.assertRaises(exceptions.BadRequest,
self.monasca_client.list_measurements, query_parms)
@test.attr(type="gate")
def test_list_measurements_with_offset_limit(self):
query_parms = '?name=' + str(self._names_list[1]) + \