mirror of https://github.com/getdnsapi/getdns.git
Allow YAML input to be just a list or scalar as well as a map.
This allows getdns_yaml2list(), getdns_yaml2bindata() and getdns_yaml2int() to work as expected. Update the YAML test to check these.
This commit is contained in:
parent
019ce4afe5
commit
8139201f12
|
@ -32,29 +32,80 @@ int main(int ac, char *av[])
|
|||
buf[bytes_read] = '\0';
|
||||
|
||||
getdns_dict *dict = NULL;
|
||||
getdns_list *list = NULL;
|
||||
getdns_bindata *bindata = NULL;
|
||||
getdns_return_t r;
|
||||
|
||||
if (!(dict = getdns_dict_create())) {
|
||||
fprintf(stderr, "Could not create dict");
|
||||
exit(EXIT_FAILURE);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
r = getdns_yaml2dict(buf, &dict);
|
||||
if (r) {
|
||||
fprintf(stderr, "Error setting dict data: %s", getdns_get_errorstr_by_id(r));
|
||||
getdns_dict_destroy(dict);
|
||||
exit(EXIT_FAILURE);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/*
|
||||
* Now add a list, bindata and int to the dict by hand to check
|
||||
* the other yaml2* functions work.
|
||||
*/
|
||||
if (!(list = getdns_list_create())) {
|
||||
fprintf(stderr, "Could not create list");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
r = getdns_yaml2list("[\"One\", \"two\", \"three\"]", &list);
|
||||
if (r) {
|
||||
fprintf(stderr, "Error setting list data: %s", getdns_get_errorstr_by_id(r));
|
||||
goto fail;
|
||||
}
|
||||
|
||||
r = getdns_dict_set_list(dict, "List entry", list);
|
||||
if (r) {
|
||||
fprintf(stderr, "Error adding list to dict: %s", getdns_get_errorstr_by_id(r));
|
||||
goto fail;
|
||||
}
|
||||
|
||||
r = getdns_yaml2bindata("2001:7fd::1", &bindata);
|
||||
if (r) {
|
||||
fprintf(stderr, "Error setting bindata: %s", getdns_get_errorstr_by_id(r));
|
||||
goto fail;
|
||||
}
|
||||
|
||||
r = getdns_dict_set_bindata(dict, "Bindata entry", bindata);
|
||||
if (r) {
|
||||
fprintf(stderr, "Error adding list to dict: %s", getdns_get_errorstr_by_id(r));
|
||||
goto fail;
|
||||
}
|
||||
|
||||
uint32_t intval;
|
||||
r = getdns_yaml2int("32767", &intval);
|
||||
if (r) {
|
||||
fprintf(stderr, "Error setting int: %s", getdns_get_errorstr_by_id(r));
|
||||
goto fail;
|
||||
}
|
||||
if (intval != 32767) {
|
||||
fprintf(stderr, "Error reading int: wrong value");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
char *dict_str = getdns_pretty_print_dict(dict);
|
||||
if (!dict_str) {
|
||||
fprintf(stderr, "Could not convert dict to string");
|
||||
getdns_dict_destroy(dict);
|
||||
exit(EXIT_FAILURE);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
printf("%s\n", dict_str);
|
||||
free(dict_str);
|
||||
getdns_dict_destroy(dict);
|
||||
exit(EXIT_SUCCESS);
|
||||
|
||||
fail:
|
||||
if (dict)
|
||||
getdns_dict_destroy(dict);
|
||||
if (list)
|
||||
getdns_list_destroy(list);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,11 @@
|
|||
{
|
||||
"Bindata entry": <bindata of 0x200107fd000000000000000000000001>,
|
||||
"List entry":
|
||||
[
|
||||
<bindata of "One">,
|
||||
<bindata of "two">,
|
||||
<bindata of "three">
|
||||
],
|
||||
"dnssec_return_status": 1000,
|
||||
"upstream_recursive_servers":
|
||||
[
|
||||
|
|
|
@ -206,23 +206,31 @@ process_yaml_document(yaml_parser_t *parser, yaml_event_t *event, gldns_buffer *
|
|||
break;
|
||||
|
||||
case YAML_MAPPING_START_EVENT:
|
||||
|
||||
/*
|
||||
* getdns config data is a dictionary (ie yaml mapping)
|
||||
* so the document must start with a mapping; scalar
|
||||
* or sequence would be wrong.
|
||||
*/
|
||||
|
||||
if (process_yaml_mapping(parser, event, buf) != 0) {
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
|
||||
case YAML_SEQUENCE_START_EVENT:
|
||||
|
||||
if (process_yaml_sequence(parser, event, buf) != 0) {
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
|
||||
case YAML_SCALAR_EVENT:
|
||||
|
||||
if (output_scalar(event, buf) != 0) {
|
||||
fprintf(stderr, "Value error: Error outputting scalar\n");
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
|
||||
case YAML_STREAM_START_EVENT:
|
||||
case YAML_STREAM_END_EVENT:
|
||||
case YAML_DOCUMENT_START_EVENT:
|
||||
case YAML_ALIAS_EVENT:
|
||||
case YAML_SCALAR_EVENT:
|
||||
case YAML_SEQUENCE_START_EVENT:
|
||||
case YAML_SEQUENCE_END_EVENT:
|
||||
case YAML_MAPPING_END_EVENT:
|
||||
|
||||
|
|
Loading…
Reference in New Issue