add: test
add: period filters fix: invalid reads (lost invalid json debug output)
This commit is contained in:
parent
f2a40ca330
commit
2d992cfe3c
6 changed files with 181 additions and 32 deletions
|
@ -106,13 +106,6 @@ api_v1_controllers_STR_PUT(struct http_message *hm, endpoint_args_t *args, endpo
|
|||
|
||||
if(json == NULL)
|
||||
{
|
||||
const char *error_ptr = cJSON_GetErrorPtr();
|
||||
if (error_ptr != NULL)
|
||||
{
|
||||
LOG_DEBUG("error before: %s\n", error_ptr);
|
||||
}
|
||||
cJSON_Delete(json);
|
||||
|
||||
static const char content[] = "no valid json was supplied";
|
||||
response->status_code = 400;
|
||||
response->content_type = "text/plain";
|
||||
|
|
|
@ -147,13 +147,6 @@ api_v1_controllers_STR_relays_INT_PUT(struct http_message *hm, endpoint_args_t *
|
|||
|
||||
if(json == NULL)
|
||||
{
|
||||
const char *error_ptr = cJSON_GetErrorPtr();
|
||||
if (error_ptr != NULL)
|
||||
{
|
||||
LOG_ERROR("error before: %s\n", error_ptr);
|
||||
}
|
||||
cJSON_Delete(json);
|
||||
|
||||
static const char content[] = "no valid json was supplied";
|
||||
response->status_code = 400;
|
||||
response->content_type = "text/plain";
|
||||
|
|
|
@ -15,13 +15,6 @@ api_v1_schedules_POST(struct http_message *hm, endpoint_args_t *args, endpoint_r
|
|||
|
||||
if(json == NULL)
|
||||
{
|
||||
const char *error_ptr = cJSON_GetErrorPtr();
|
||||
if (error_ptr != NULL)
|
||||
{
|
||||
LOG_ERROR("error before: %s\n", error_ptr);
|
||||
}
|
||||
cJSON_Delete(json);
|
||||
|
||||
static const char content[] = "no valid json was supplied";
|
||||
response->status_code = 400;
|
||||
response->content_type = "text/plain";
|
||||
|
@ -69,12 +62,30 @@ api_v1_schedules_POST(struct http_message *hm, endpoint_args_t *args, endpoint_r
|
|||
if(!cJSON_IsString(json_period_start) || (json_period_start->valuestring == NULL))
|
||||
{
|
||||
LOG_DEBUG("period is missing start\n");
|
||||
continue;
|
||||
cJSON_Delete(json);
|
||||
schedule_free(new_schedule);
|
||||
|
||||
static const char content[] = "one period is missing a start";
|
||||
response->status_code = 400;
|
||||
response->content_type = "text/plain";
|
||||
response->content_length = STRLEN(content);;
|
||||
response->content = content;
|
||||
response->alloced_content = false;
|
||||
return;
|
||||
}
|
||||
if(!cJSON_IsString(json_period_end) || (json_period_end->valuestring == NULL))
|
||||
{
|
||||
LOG_DEBUG("period is missing end\n");
|
||||
continue;
|
||||
cJSON_Delete(json);
|
||||
schedule_free(new_schedule);
|
||||
|
||||
static const char content[] = "one period is missing an end";
|
||||
response->status_code = 400;
|
||||
response->content_type = "text/plain";
|
||||
response->content_length = STRLEN(content);;
|
||||
response->content = content;
|
||||
response->alloced_content = false;
|
||||
return;
|
||||
}
|
||||
|
||||
uint16_t start;
|
||||
|
@ -82,12 +93,30 @@ api_v1_schedules_POST(struct http_message *hm, endpoint_args_t *args, endpoint_r
|
|||
if(period_helper_parse_hhmm(json_period_start->valuestring, &start))
|
||||
{
|
||||
LOG_DEBUG("couldn't parse start '%s'\n", json_period_start->valuestring);
|
||||
continue;
|
||||
cJSON_Delete(json);
|
||||
schedule_free(new_schedule);
|
||||
|
||||
static const char content[] = "the start for one period is invalid";
|
||||
response->status_code = 400;
|
||||
response->content_type = "text/plain";
|
||||
response->content_length = STRLEN(content);;
|
||||
response->content = content;
|
||||
response->alloced_content = false;
|
||||
return;
|
||||
}
|
||||
if(period_helper_parse_hhmm(json_period_end->valuestring, &end))
|
||||
{
|
||||
LOG_DEBUG("couldn't parse end '%s'\n", json_period_end->valuestring);
|
||||
continue;
|
||||
cJSON_Delete(json);
|
||||
schedule_free(new_schedule);
|
||||
|
||||
static const char content[] = "the end for one period is invalid";
|
||||
response->status_code = 400;
|
||||
response->content_type = "text/plain";
|
||||
response->content_length = STRLEN(content);;
|
||||
response->content = content;
|
||||
response->alloced_content = false;
|
||||
return;
|
||||
}
|
||||
|
||||
new_schedule->periods[periods_valid].start = start;
|
||||
|
|
|
@ -108,13 +108,6 @@ api_v1_schedules_STR_PUT(struct http_message *hm, endpoint_args_t *args, endpoin
|
|||
|
||||
if(json == NULL)
|
||||
{
|
||||
const char *error_ptr = cJSON_GetErrorPtr();
|
||||
if (error_ptr != NULL)
|
||||
{
|
||||
LOG_DEBUG("error before: %s\n", error_ptr);
|
||||
}
|
||||
cJSON_Delete(json);
|
||||
|
||||
static const char content[] = "no valid json was supplied";
|
||||
response->status_code = 400;
|
||||
response->content_type = "text/plain";
|
||||
|
|
|
@ -31,6 +31,15 @@ period_helper_parse_hhmm(const char *hhmm_str, uint16_t *hhmm)
|
|||
tmp_h = (uint16_t)strtol(&hhmm_str[0], NULL, 10);
|
||||
tmp_m = (uint16_t)strtol(&hhmm_str[3], NULL, 10);
|
||||
|
||||
if(tmp_h > 24 || tmp_m >= 60)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if(tmp_h == 24 && tmp_m > 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
*hhmm = (tmp_h * 60) + tmp_m;
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -10,6 +10,24 @@ stages:
|
|||
verify_response_with:
|
||||
function: validate_schedule:multiple
|
||||
|
||||
- name: "[schedules_basic] post schedule with no periods, expect it to be echoed back"
|
||||
request:
|
||||
method: POST
|
||||
url: "http://localhost:5000/api/v1/schedules/"
|
||||
json:
|
||||
name: "same as off"
|
||||
periods: []
|
||||
response:
|
||||
status_code: 201
|
||||
verify_response_with:
|
||||
function: validate_schedule:single
|
||||
function: validate_schedule:check_name
|
||||
extra_kwargs:
|
||||
name: "{tavern.request_vars.json.name}"
|
||||
function: validate_schedule:check_periods
|
||||
extra_kwargs:
|
||||
periods: "{tavern.request_vars.json.periods}"
|
||||
|
||||
- name: "[schedules_basic] post schedule, expect it to be echoed back"
|
||||
request:
|
||||
method: POST
|
||||
|
@ -67,3 +85,117 @@ stages:
|
|||
url: "http://localhost:5000/api/v1/schedules/{returned_id}"
|
||||
response:
|
||||
status_code: 404
|
||||
|
||||
- name: "[schedules_basic] get schedule with bad id"
|
||||
request:
|
||||
method: GET
|
||||
url: "http://localhost:5000/api/v1/schedules/this_id_is_invalid"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "[schedules_basic] post schedule with bad body (no json)"
|
||||
request:
|
||||
method: POST
|
||||
url: "http://localhost:5000/api/v1/schedules/"
|
||||
data: "<b>not json</b><i>but html</i>"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "[schedules_basic] post schedule with bad body (no name)"
|
||||
request:
|
||||
method: POST
|
||||
url: "http://localhost:5000/api/v1/schedules/"
|
||||
json:
|
||||
periods:
|
||||
- start: "00:10"
|
||||
end: "00:20"
|
||||
- start: "00:30"
|
||||
end: "00:40"
|
||||
- start: "00:50"
|
||||
end: "01:00"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "[schedules_basic] post schedule with bad body (name as number)"
|
||||
request:
|
||||
method: POST
|
||||
url: "http://localhost:5000/api/v1/schedules/"
|
||||
json:
|
||||
name: 42
|
||||
periods:
|
||||
- start: "00:10"
|
||||
end: "00:20"
|
||||
- start: "00:30"
|
||||
end: "00:40"
|
||||
- start: "00:50"
|
||||
end: "01:00"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "[schedules_basic] post schedule with bad period (no start)"
|
||||
request:
|
||||
method: POST
|
||||
url: "http://localhost:5000/api/v1/schedules/"
|
||||
json:
|
||||
name: "i am invalid"
|
||||
periods:
|
||||
- end: "00:20"
|
||||
- start: "00:30"
|
||||
end: "00:40"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "[schedules_basic] post schedule with bad period (no end)"
|
||||
request:
|
||||
method: POST
|
||||
url: "http://localhost:5000/api/v1/schedules/"
|
||||
json:
|
||||
name: "i am invalid"
|
||||
periods:
|
||||
- start: "00:20"
|
||||
- start: "00:30"
|
||||
end: "00:40"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "[schedules_basic] post schedule with bad period (invalid start)"
|
||||
request:
|
||||
method: POST
|
||||
url: "http://localhost:5000/api/v1/schedules/"
|
||||
json:
|
||||
name: "i am invalid"
|
||||
periods:
|
||||
- start: "hello"
|
||||
end: "00:20"
|
||||
- start: "00:30"
|
||||
end: "00:40"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "[schedules_basic] post schedule with bad period (invalid end)"
|
||||
request:
|
||||
method: POST
|
||||
url: "http://localhost:5000/api/v1/schedules/"
|
||||
json:
|
||||
name: "i am invalid"
|
||||
periods:
|
||||
- start: "12:10"
|
||||
end: 1215
|
||||
- start: "00:30"
|
||||
end: "00:40"
|
||||
response:
|
||||
status_code: 400
|
||||
|
||||
- name: "[schedules_basic] post schedule with bad period (invalid end 2)"
|
||||
request:
|
||||
method: POST
|
||||
url: "http://localhost:5000/api/v1/schedules/"
|
||||
json:
|
||||
name: "i am invalid"
|
||||
periods:
|
||||
- start: "12:10"
|
||||
end: "25:90"
|
||||
- start: "00:30"
|
||||
end: "00:40"
|
||||
response:
|
||||
status_code: 400
|
||||
|
|
Loading…
Reference in a new issue