提交 93a3f516 编写于 作者: P Peter Krempa

tests: drivermodule: Make sure that all compiled storage backends can be loaded

Add a new storage driver registration function that will force the
backend code to fail if any of the storage backend modules can't be
loaded. This will make sure that they work and are present.
上级 0a6d3e51
......@@ -87,7 +87,8 @@ static size_t virStorageFileBackendsCount;
static int
virStorageDriverLoadBackendModule(const char *name,
const char *regfunc)
const char *regfunc,
bool forceload)
{
char *modfile = NULL;
int ret;
......@@ -100,7 +101,14 @@ virStorageDriverLoadBackendModule(const char *name,
"LIBVIRT_STORAGE_BACKEND_DIR")))
return 1;
ret = virDriverLoadModuleFull(modfile, regfunc, NULL);
if ((ret = virDriverLoadModuleFull(modfile, regfunc, NULL)) != 0) {
if (forceload) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("failed to load storage backend module '%s'"),
name);
ret = -1;
}
}
VIR_FREE(modfile);
......@@ -109,7 +117,7 @@ virStorageDriverLoadBackendModule(const char *name,
# define VIR_STORAGE_BACKEND_REGISTER(func, module) \
if (virStorageDriverLoadBackendModule(module, #func) < 0) \
if (virStorageDriverLoadBackendModule(module, #func, allbackends) < 0) \
return -1
#else
# define VIR_STORAGE_BACKEND_REGISTER(func, module) \
......@@ -118,7 +126,7 @@ virStorageDriverLoadBackendModule(const char *name,
#endif
int
virStorageBackendDriversRegister(void)
virStorageBackendDriversRegister(bool allbackends ATTRIBUTE_UNUSED)
{
#if WITH_STORAGE_DIR || WITH_STORAGE_FS
VIR_STORAGE_BACKEND_REGISTER(virStorageBackendFsRegister, "fs");
......
......@@ -198,7 +198,7 @@ struct _virStorageFileBackend {
virStorageFileBackendChown storageFileChown;
};
int virStorageBackendDriversRegister(void);
int virStorageBackendDriversRegister(bool allmodules);
int virStorageBackendRegister(virStorageBackendPtr backend);
int virStorageBackendFileRegister(virStorageFileBackendPtr backend);
......
......@@ -2838,9 +2838,10 @@ static virStateDriver stateDriver = {
.stateReload = storageStateReload,
};
int storageRegister(void)
static int
storageRegisterFull(bool allbackends)
{
if (virStorageBackendDriversRegister() < 0)
if (virStorageBackendDriversRegister(allbackends) < 0)
return -1;
if (virSetSharedStorageDriver(&storageDriver) < 0)
return -1;
......@@ -2850,6 +2851,20 @@ int storageRegister(void)
}
int
storageRegister(void)
{
return storageRegisterFull(false);
}
int
storageRegisterAll(void)
{
return storageRegisterFull(true);
}
/* ----------- file handlers cooperating with storage driver --------------- */
static bool
virStorageFileIsInitialized(const virStorageSource *src)
......
......@@ -70,5 +70,6 @@ char *virStoragePoolObjBuildTempFilePath(virStoragePoolObjPtr pool,
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
int storageRegister(void);
int storageRegisterAll(void);
#endif /* __VIR_STORAGE_DRIVER_H__ */
......@@ -71,7 +71,7 @@ mymain(void)
TEST("interface");
#endif
#ifdef WITH_STORAGE
TEST("storage");
TEST_FULL("storage", "storageRegisterAll");
#endif
#ifdef WITH_NODE_DEVICES
TEST("nodedev");
......
......@@ -732,7 +732,7 @@ mymain(void)
virStorageSourcePtr chain2; /* short for chain->backingStore */
virStorageSourcePtr chain3; /* short for chain2->backingStore */
if (virStorageBackendDriversRegister() < 0)
if (virStorageBackendDriversRegister(false) < 0)
return -1;
/* Prep some files with qemu-img; if that is not found on PATH, or
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册