diff options
author | Samuel Mendoza-Jonas <sam@mendozajonas.com> | 2016-05-23 15:56:22 +1000 |
---|---|---|
committer | Samuel Mendoza-Jonas <sam@mendozajonas.com> | 2016-06-28 16:17:21 +1000 |
commit | 07a5f9f1c50a9185851cd486d732976573d15c4f (patch) | |
tree | d30b4e52b9942965d12581b3f7502737c6c135e7 /test/parser/utils.c | |
parent | 1a72ffef7837cd2aa3e6be945ec03fb6b5caa51a (diff) | |
download | petitboot-07a5f9f1c50a9185851cd486d732976573d15c4f.zip petitboot-07a5f9f1c50a9185851cd486d732976573d15c4f.tar.gz |
Update tests to support changes to pxe_parser
Substitute load_url_async() when running tests to support direct
callers of load_url_async() who will expect to read a file in a
callback.
Stub out device_handler_discover_context_commit() since it will remove
discover_options from the given discover_context, but the tests will
check the discover_context to count boot_options.
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
Diffstat (limited to 'test/parser/utils.c')
-rw-r--r-- | test/parser/utils.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/test/parser/utils.c b/test/parser/utils.c index 2891969..5cebc99 100644 --- a/test/parser/utils.c +++ b/test/parser/utils.c @@ -17,6 +17,8 @@ #include "resource.h" #include "event.h" #include "platform.h" +#include "paths.h" +#include "parser-conf.h" #include "parser-test.h" @@ -306,6 +308,61 @@ int parser_replace_file(struct discover_context *ctx, return 0; } +struct load_url_result *load_url_async(void *ctx, struct pb_url *url, + load_url_complete async_cb, void *async_data) +{ + struct conf_context *conf = async_data; + struct parser_test *test = conf->dc->test_data; + struct load_url_result *result; + char tmp[] = "/tmp/pb-XXXXXX"; + ssize_t rc = -1, sz = 0; + struct test_file *file; + int fd; + + fd = mkstemp(tmp); + + if (fd < 0) + return NULL; + + /* Some parsers will expect to need to read a file, so write the + * specified file to a temporary file */ + list_for_each_entry(&test->files, file, list) { + if (file->dev) + continue; + + if (strcmp(file->name, url->full)) + continue; + + while (sz < file->size) { + rc = write(fd, file->data, file->size); + if (rc < 0) { + fprintf(stderr, + "Failed to write to tmpfile, %m\n"); + break; + } + sz += rc; + } + break; + } + + close(fd); + + result = talloc_zero(ctx, struct load_url_result); + if (!result) + return NULL; + + result->local = talloc_strdup(result, tmp); + if (rc < 0) + result->status = LOAD_ERROR; + else + result->status = result->local ? LOAD_OK : LOAD_ERROR; + result->cleanup_local = true; + + async_cb(result, conf); + + return result; +} + int parser_request_url(struct discover_context *ctx, struct pb_url *url, char **buf, int *len) { |