mirror of https://gitee.com/openkylin/libvirt.git
openvz: Add simple test for openvzReadNetworkConf
Convert openvzLocateConfFile to a replaceable function pointer to allow testing the config file parsing without rewriting the whole OpenVZ config parsing to a more testable structure.
This commit is contained in:
parent
d173c12fe0
commit
d6caacd1e4
|
@ -58,8 +58,10 @@
|
||||||
|
|
||||||
static char *openvzLocateConfDir(void);
|
static char *openvzLocateConfDir(void);
|
||||||
static int openvzGetVPSUUID(int vpsid, char *uuidstr, size_t len);
|
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 openvzAssignUUIDs(void);
|
||||||
|
static int openvzLocateConfFileDefault(int vpsid, char **conffile, const char *ext);
|
||||||
|
|
||||||
|
openvzLocateConfFileFunc openvzLocateConfFile = openvzLocateConfFileDefault;
|
||||||
|
|
||||||
int
|
int
|
||||||
strtoI(const char *str)
|
strtoI(const char *str)
|
||||||
|
@ -171,7 +173,7 @@ no_memory:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
int
|
||||||
openvzReadNetworkConf(virDomainDefPtr def,
|
openvzReadNetworkConf(virDomainDefPtr def,
|
||||||
int veid) {
|
int veid) {
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -801,13 +803,12 @@ cleanup:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Locate config file of container
|
/* Locate config file of container
|
||||||
* return -1 - error
|
* return -1 - error
|
||||||
* 0 - OK
|
* 0 - OK */
|
||||||
*/
|
|
||||||
static int
|
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;
|
int ret = 0;
|
||||||
|
|
||||||
confdir = openvzLocateConfDir();
|
confdir = openvzLocateConfDir();
|
||||||
|
@ -824,8 +825,8 @@ openvzLocateConfFile(int vpsid, char **conffile, const char *ext)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char
|
static char *
|
||||||
*openvzLocateConfDir(void)
|
openvzLocateConfDir(void)
|
||||||
{
|
{
|
||||||
const char *conf_dir_list[] = {"/etc/vz/conf", "/usr/local/etc/conf", NULL};
|
const char *conf_dir_list[] = {"/etc/vz/conf", "/usr/local/etc/conf", NULL};
|
||||||
int i=0;
|
int i=0;
|
||||||
|
|
|
@ -53,6 +53,11 @@ struct openvz_driver {
|
||||||
int version;
|
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 openvz_readline(int fd, char *ptr, int maxlen);
|
||||||
int openvzExtractVersion(struct openvz_driver *driver);
|
int openvzExtractVersion(struct openvz_driver *driver);
|
||||||
int openvzReadVPSConfigParam(int vpsid, const char *param, char **value);
|
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);
|
int openvzSetDefinedUUID(int vpsid, unsigned char *uuid);
|
||||||
unsigned int openvzGetNodeCPUs(void);
|
unsigned int openvzGetNodeCPUs(void);
|
||||||
int openvzGetVEID(const char *name);
|
int openvzGetVEID(const char *name);
|
||||||
|
int openvzReadNetworkConf(virDomainDefPtr def, int veid);
|
||||||
|
|
||||||
#endif /* OPENVZ_CONF_H */
|
#endif /* OPENVZ_CONF_H */
|
||||||
|
|
|
@ -12,6 +12,13 @@
|
||||||
# include "util.h"
|
# include "util.h"
|
||||||
# include "openvz/openvz_conf.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 {
|
struct testConfigParam {
|
||||||
const char *param;
|
const char *param;
|
||||||
const char *value;
|
const char *value;
|
||||||
|
@ -61,11 +68,81 @@ cleanup:
|
||||||
return result;
|
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 =
|
||||||
|
"<domain type='openvz'>\n"
|
||||||
|
" <uuid>00000000-0000-0000-0000-000000000000</uuid>\n"
|
||||||
|
" <memory>0</memory>\n"
|
||||||
|
" <currentMemory>0</currentMemory>\n"
|
||||||
|
" <vcpu>0</vcpu>\n"
|
||||||
|
" <os>\n"
|
||||||
|
" <type>exe</type>\n"
|
||||||
|
" <init>/sbin/init</init>\n"
|
||||||
|
" </os>\n"
|
||||||
|
" <clock offset='utc'/>\n"
|
||||||
|
" <on_poweroff>destroy</on_poweroff>\n"
|
||||||
|
" <on_reboot>destroy</on_reboot>\n"
|
||||||
|
" <on_crash>destroy</on_crash>\n"
|
||||||
|
" <devices>\n"
|
||||||
|
" <interface type='ethernet'>\n"
|
||||||
|
" <mac address='00:00:00:00:00:00'/>\n"
|
||||||
|
" <ip address='194.44.18.88'/>\n"
|
||||||
|
" </interface>\n"
|
||||||
|
" <interface type='bridge'>\n"
|
||||||
|
" <mac address='00:18:51:c1:05:ee'/>\n"
|
||||||
|
" <target dev='veth105.10'/>\n"
|
||||||
|
" </interface>\n"
|
||||||
|
" </devices>\n"
|
||||||
|
"</domain>\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 : "<unknown>");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
actual = virDomainDefFormat(def, VIR_DOMAIN_XML_INACTIVE);
|
||||||
|
|
||||||
|
if (actual == NULL) {
|
||||||
|
err = virGetLastError();
|
||||||
|
fprintf(stderr, "ERROR: %s\n", err != NULL ? err->message : "<unknown>");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (STRNEQ(expected, actual)) {
|
||||||
|
virtTestDifference(stderr, expected, actual);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
VIR_FREE(actual);
|
||||||
|
virDomainDefFree(def);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
mymain(void)
|
mymain(void)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
|
openvzLocateConfFile = testLocateConfFile;
|
||||||
|
|
||||||
# define DO_TEST(_name) \
|
# define DO_TEST(_name) \
|
||||||
do { \
|
do { \
|
||||||
if (virtTestRun("OpenVZ "#_name, 1, test##_name, \
|
if (virtTestRun("OpenVZ "#_name, 1, test##_name, \
|
||||||
|
@ -75,6 +152,7 @@ mymain(void)
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
DO_TEST(ReadConfigParam);
|
DO_TEST(ReadConfigParam);
|
||||||
|
DO_TEST(ReadNetworkConf);
|
||||||
|
|
||||||
return result == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
return result == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,3 +39,4 @@ QUOTATIME=""
|
||||||
DISK_QUOTA=no
|
DISK_QUOTA=no
|
||||||
OSTEMPLATE="rhel-5-lystor"
|
OSTEMPLATE="rhel-5-lystor"
|
||||||
IP_ADDRESS="194.44.18.88"
|
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
|
||||||
|
|
Loading…
Reference in New Issue