diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c index 9ce92dc690..189279dbe5 100644 --- a/src/openvz/openvz_conf.c +++ b/src/openvz/openvz_conf.c @@ -58,8 +58,10 @@ static char *openvzLocateConfDir(void); static int openvzGetVPSUUID(int vpsid, char *uuidstr, size_t len); -static int openvzLocateConfFile(int vpsid, char **conffile, const char *ext); static int openvzAssignUUIDs(void); +static int openvzLocateConfFileDefault(int vpsid, char **conffile, const char *ext); + +openvzLocateConfFileFunc openvzLocateConfFile = openvzLocateConfFileDefault; int strtoI(const char *str) @@ -171,7 +173,7 @@ no_memory: } -static int +int openvzReadNetworkConf(virDomainDefPtr def, int veid) { int ret; @@ -801,13 +803,12 @@ cleanup: } /* Locate config file of container -* return -1 - error -* 0 - OK -*/ + * return -1 - error + * 0 - OK */ static int -openvzLocateConfFile(int vpsid, char **conffile, const char *ext) +openvzLocateConfFileDefault(int vpsid, char **conffile, const char *ext) { - char * confdir; + char *confdir; int ret = 0; confdir = openvzLocateConfDir(); @@ -824,8 +825,8 @@ openvzLocateConfFile(int vpsid, char **conffile, const char *ext) return ret; } -static char -*openvzLocateConfDir(void) +static char * +openvzLocateConfDir(void) { const char *conf_dir_list[] = {"/etc/vz/conf", "/usr/local/etc/conf", NULL}; int i=0; diff --git a/src/openvz/openvz_conf.h b/src/openvz/openvz_conf.h index d5a57a6160..9f2245f5c4 100644 --- a/src/openvz/openvz_conf.h +++ b/src/openvz/openvz_conf.h @@ -53,6 +53,11 @@ struct openvz_driver { int version; }; +typedef int (*openvzLocateConfFileFunc)(int vpsid, char **conffile, const char *ext); + +/* this allows the testsuite to replace the conf file locator function */ +extern openvzLocateConfFileFunc openvzLocateConfFile; + int openvz_readline(int fd, char *ptr, int maxlen); int openvzExtractVersion(struct openvz_driver *driver); int openvzReadVPSConfigParam(int vpsid, const char *param, char **value); @@ -66,5 +71,6 @@ int strtoI(const char *str); int openvzSetDefinedUUID(int vpsid, unsigned char *uuid); unsigned int openvzGetNodeCPUs(void); int openvzGetVEID(const char *name); +int openvzReadNetworkConf(virDomainDefPtr def, int veid); #endif /* OPENVZ_CONF_H */ diff --git a/tests/openvzutilstest.c b/tests/openvzutilstest.c index fe6a2ea7fd..f04ddbbce3 100644 --- a/tests/openvzutilstest.c +++ b/tests/openvzutilstest.c @@ -12,6 +12,13 @@ # include "util.h" # include "openvz/openvz_conf.h" +static int +testLocateConfFile(int vpsid ATTRIBUTE_UNUSED, char **conffile, + const char *ext ATTRIBUTE_UNUSED) +{ + return virAsprintf(conffile, "%s/openvzutilstest.conf", abs_srcdir); +} + struct testConfigParam { const char *param; const char *value; @@ -61,11 +68,81 @@ cleanup: return result; } +static int +testReadNetworkConf(const void *data ATTRIBUTE_UNUSED) +{ + int result = -1; + virDomainDefPtr def = NULL; + char *actual = NULL; + virErrorPtr err = NULL; + const char *expected = + "\n" + " 00000000-0000-0000-0000-000000000000\n" + " 0\n" + " 0\n" + " 0\n" + " \n" + " exe\n" + " /sbin/init\n" + " \n" + " \n" + " destroy\n" + " destroy\n" + " destroy\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n"; + + if (VIR_ALLOC(def) < 0 || + !(def->os.type = strdup("exe")) || + !(def->os.init = strdup("/sbin/init"))) + goto cleanup; + + def->virtType = VIR_DOMAIN_VIRT_OPENVZ; + + if (openvzReadNetworkConf(def, 1) < 0) { + err = virGetLastError(); + fprintf(stderr, "ERROR: %s\n", err != NULL ? err->message : ""); + goto cleanup; + } + + actual = virDomainDefFormat(def, VIR_DOMAIN_XML_INACTIVE); + + if (actual == NULL) { + err = virGetLastError(); + fprintf(stderr, "ERROR: %s\n", err != NULL ? err->message : ""); + goto cleanup; + } + + if (STRNEQ(expected, actual)) { + virtTestDifference(stderr, expected, actual); + goto cleanup; + } + + result = 0; + +cleanup: + VIR_FREE(actual); + virDomainDefFree(def); + + return result; +} + static int mymain(void) { int result = 0; + openvzLocateConfFile = testLocateConfFile; + # define DO_TEST(_name) \ do { \ if (virtTestRun("OpenVZ "#_name, 1, test##_name, \ @@ -75,6 +152,7 @@ mymain(void) } while (0) DO_TEST(ReadConfigParam); + DO_TEST(ReadNetworkConf); return result == 0 ? EXIT_SUCCESS : EXIT_FAILURE; } diff --git a/tests/openvzutilstest.conf b/tests/openvzutilstest.conf index a1b93b7c88..c5d048c5f6 100644 --- a/tests/openvzutilstest.conf +++ b/tests/openvzutilstest.conf @@ -39,3 +39,4 @@ QUOTATIME="" DISK_QUOTA=no OSTEMPLATE="rhel-5-lystor" IP_ADDRESS="194.44.18.88" +NETIF="ifname=eth10,mac=00:18:51:C1:05:EE,host_ifname=veth105.10,host_mac=00:18:51:8F:D9:F3