summaryrefslogtreecommitdiff
path: root/runner
diff options
context:
space:
mode:
authorArkadiusz Hiler <arkadiusz.hiler@intel.com>2019-04-01 09:32:34 +0300
committerArkadiusz Hiler <arkadiusz.hiler@intel.com>2019-04-01 14:52:01 +0300
commit93cbe569582626793f79e5626970703059f88933 (patch)
tree8cb706c5a9c38e853424a1019aab1dfc089e2094 /runner
parent7cadc6105b00f8d8ef166929118a95ce69221603 (diff)
runner: Refactor metadata parsing
To aid testing function parsing metadata.txt is split into outer helper that operates on dirfd and inner function that operates on FILE*. This allows us to test the parsing using fmemopen(), limiting the amount of necessary boilerplate. Signed-off-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com> Reviewed-by: Petri Latvala <petri.latvala@intel.com>
Diffstat (limited to 'runner')
-rw-r--r--runner/executor.c2
-rw-r--r--runner/resultgen.c2
-rw-r--r--runner/runner_tests.c2
-rw-r--r--runner/settings.c41
-rw-r--r--runner/settings.h4
5 files changed, 33 insertions, 18 deletions
diff --git a/runner/executor.c b/runner/executor.c
index a40e2dd1..0e91b7ab 100644
--- a/runner/executor.c
+++ b/runner/executor.c
@@ -1112,7 +1112,7 @@ bool initialize_execute_state_from_resume(int dirfd,
memset(state, 0, sizeof(*state));
state->resuming = true;
- if (!read_settings(settings, dirfd) ||
+ if (!read_settings_from_dir(settings, dirfd) ||
!read_job_list(list, dirfd)) {
close(dirfd);
return false;
diff --git a/runner/resultgen.c b/runner/resultgen.c
index 23eb8903..42297d8a 100644
--- a/runner/resultgen.c
+++ b/runner/resultgen.c
@@ -1085,7 +1085,7 @@ struct json_object *generate_results_json(int dirfd)
init_settings(&settings);
init_job_list(&job_list);
- if (!read_settings(&settings, dirfd)) {
+ if (!read_settings_from_dir(&settings, dirfd)) {
fprintf(stderr, "resultgen: Cannot parse settings\n");
return NULL;
}
diff --git a/runner/runner_tests.c b/runner/runner_tests.c
index e46568ac..06725536 100644
--- a/runner/runner_tests.c
+++ b/runner/runner_tests.c
@@ -680,7 +680,7 @@ igt_main
"Opening %s/metadata.txt failed\n", dirname);
close(fd);
- igt_assert_f(read_settings(&cmp_settings, dirfd), "Reading settings failed\n");
+ igt_assert_f(read_settings_from_dir(&cmp_settings, dirfd), "Reading settings failed\n");
assert_settings_equal(&settings, &cmp_settings);
}
diff --git a/runner/settings.c b/runner/settings.c
index e64244e6..95f74076 100644
--- a/runner/settings.c
+++ b/runner/settings.c
@@ -540,7 +540,7 @@ bool serialize_settings(struct settings *settings)
#undef SERIALIZE_LINE
}
-bool read_settings(struct settings *settings, int dirfd)
+bool read_settings_from_file(struct settings *settings, FILE *f)
{
#define PARSE_LINE(s, name, val, field, write) \
if (!strcmp(name, #field)) { \
@@ -551,20 +551,8 @@ bool read_settings(struct settings *settings, int dirfd)
continue; \
}
- int fd;
- FILE *f;
char *name = NULL, *val = NULL;
- free_settings(settings);
-
- if ((fd = openat(dirfd, settings_filename, O_RDONLY)) < 0)
- return false;
-
- f = fdopen(fd, "r");
- if (!f) {
- close(fd);
- return false;
- }
while (fscanf(f, "%ms : %ms", &name, &val) == 2) {
int numval = atoi(val);
@@ -592,9 +580,34 @@ bool read_settings(struct settings *settings, int dirfd)
free(name);
free(val);
- fclose(f);
return true;
#undef PARSE_LINE
}
+
+bool read_settings_from_dir(struct settings *settings, int dirfd)
+{
+ int fd;
+ FILE *f;
+
+ free_settings(settings);
+
+ if ((fd = openat(dirfd, settings_filename, O_RDONLY)) < 0)
+ return false;
+
+ f = fdopen(fd, "r");
+ if (!f) {
+ close(fd);
+ return false;
+ }
+
+ if (!read_settings_from_file(settings, f)) {
+ fclose(f);
+ return false;
+ }
+
+ fclose(f);
+
+ return true;
+}
diff --git a/runner/settings.h b/runner/settings.h
index 267d72cf..ae90897c 100644
--- a/runner/settings.h
+++ b/runner/settings.h
@@ -5,6 +5,7 @@
#include <stddef.h>
#include <sys/types.h>
#include <regex.h>
+#include <stdio.h>
enum {
LOG_LEVEL_NORMAL = 0,
@@ -114,6 +115,7 @@ char *absolute_path(char *path);
*/
bool serialize_settings(struct settings *settings);
-bool read_settings(struct settings *settings, int dirfd);
+bool read_settings_from_file(struct settings *settings, FILE* f);
+bool read_settings_from_dir(struct settings *settings, int dirfd);
#endif