]> xenbits.xensource.com Git - people/iwj/ring3-xl-test.git/commitdiff
init_domain_config: honour XLTEST_CFG_<name-of-guest> json-domain-config
authorIan Jackson <ian.jackson@eu.citrix.com>
Fri, 26 Jun 2015 14:16:04 +0000 (15:16 +0100)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Fri, 26 Jun 2015 14:16:04 +0000 (15:16 +0100)
Look for an environment variable XLTEST_CFG_<name-of-guest>.  If it
exists, do not use whatever configuration is hardcoded in the test
program.

Instead, open the file named in the variable.  The file needs to
contain a JSON marshalled libxl_domain_config.  Such a thing can be
produced using `xl -N create' (right now, it is necessary to massage
the output from xl, pending a proposal to change xl's output format).

Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
testcase_utils.c

index 8e09d2380b1eb8afd3454215017fcc9c4433d328..0fe37cc84e68468783dd7f2a1d58048833576087 100644 (file)
@@ -25,6 +25,31 @@ init_domain_config(libxl_ctx *ctx,
     libxl_device_disk *disk;
 
     libxl_domain_config_init(dc);
+    char *env_var_name = 0;
+    void *data = 0;
+
+    asprintf(&env_var_name, "XLTEST_CFG_%s", name);
+    const char *file_name = getenv(env_var_name);
+    if (file_name) {
+        int datalen;
+        errno = libxl_read_file_contents(ctx, file_name, &data, &datalen);
+        if (errno) {
+            fprintf(stderr,"config (%s): %s: %s\n",
+                    env_var_name, file_name, strerror(errno));
+            exit(-1);
+        }
+        char *config = data = realloc(data, datalen+1);
+        config[datalen] = 0;
+        int rc = libxl_domain_config_from_json(ctx, dc, config);
+        if (rc) {
+            fprintf(stderr,"config (%s): %s: rc=%d\n",
+                    env_var_name, file_name, rc);
+            exit(-1);
+        }
+        printf("got domain config (%s) from %s (%d bytes)\n",
+               env_var_name, file_name, datalen);
+        goto out;
+    }
 
     dc->c_info.name = strdup(name);
     dc->c_info.type = LIBXL_DOMAIN_TYPE_PV;
@@ -56,6 +81,10 @@ init_domain_config(libxl_ctx *ctx,
     disk->format = LIBXL_DISK_FORMAT_RAW;
     disk->removable = 1;
     disk->is_cdrom = 1;
+
+ out:
+    free(env_var_name);
+    free(data);
 }
 
 void generic_callback(libxl_ctx * ctx