提交 c6b6e737 编写于 作者: M Michal Privoznik

test driver: Deny some operations on inactive domains

Some operations like reboot, save, coreDump, blockStats,
ifaceStats make sense iff domain is running. While it is
technically possible for our test driver to return success
regardless of domain state, we should copy constraints from
other drivers and thus deny these operations over inactive
domains.
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
上级 f694f3ff
...@@ -1867,6 +1867,12 @@ static int testDomainReboot(virDomainPtr domain, ...@@ -1867,6 +1867,12 @@ static int testDomainReboot(virDomainPtr domain,
if (!(privdom = testDomObjFromDomain(domain))) if (!(privdom = testDomObjFromDomain(domain)))
goto cleanup; goto cleanup;
if (!virDomainObjIsActive(privdom)) {
virReportError(VIR_ERR_OPERATION_INVALID,
"%s", _("domain is not running"));
goto cleanup;
}
virDomainObjSetState(privdom, VIR_DOMAIN_SHUTDOWN, virDomainObjSetState(privdom, VIR_DOMAIN_SHUTDOWN,
VIR_DOMAIN_SHUTDOWN_USER); VIR_DOMAIN_SHUTDOWN_USER);
...@@ -1987,6 +1993,12 @@ testDomainSaveFlags(virDomainPtr domain, const char *path, ...@@ -1987,6 +1993,12 @@ testDomainSaveFlags(virDomainPtr domain, const char *path,
if (!(privdom = testDomObjFromDomain(domain))) if (!(privdom = testDomObjFromDomain(domain)))
goto cleanup; goto cleanup;
if (!virDomainObjIsActive(privdom)) {
virReportError(VIR_ERR_OPERATION_INVALID,
"%s", _("domain is not running"));
goto cleanup;
}
xml = virDomainDefFormat(privdom->def, privconn->caps, xml = virDomainDefFormat(privdom->def, privconn->caps,
VIR_DOMAIN_DEF_FORMAT_SECURE); VIR_DOMAIN_DEF_FORMAT_SECURE);
...@@ -2185,6 +2197,12 @@ static int testDomainCoreDumpWithFormat(virDomainPtr domain, ...@@ -2185,6 +2197,12 @@ static int testDomainCoreDumpWithFormat(virDomainPtr domain,
if (!(privdom = testDomObjFromDomain(domain))) if (!(privdom = testDomObjFromDomain(domain)))
goto cleanup; goto cleanup;
if (!virDomainObjIsActive(privdom)) {
virReportError(VIR_ERR_OPERATION_INVALID,
"%s", _("domain is not running"));
goto cleanup;
}
if ((fd = open(to, O_CREAT|O_TRUNC|O_WRONLY, S_IRUSR|S_IWUSR)) < 0) { if ((fd = open(to, O_CREAT|O_TRUNC|O_WRONLY, S_IRUSR|S_IWUSR)) < 0) {
virReportSystemError(errno, virReportSystemError(errno,
_("domain '%s' coredump: failed to open %s"), _("domain '%s' coredump: failed to open %s"),
...@@ -3064,6 +3082,12 @@ static int testDomainBlockStats(virDomainPtr domain, ...@@ -3064,6 +3082,12 @@ static int testDomainBlockStats(virDomainPtr domain,
if (!(privdom = testDomObjFromDomain(domain))) if (!(privdom = testDomObjFromDomain(domain)))
return ret; return ret;
if (!virDomainObjIsActive(privdom)) {
virReportError(VIR_ERR_OPERATION_INVALID,
"%s", _("domain is not running"));
goto error;
}
if (virDomainDiskIndexByName(privdom->def, path, false) < 0) { if (virDomainDiskIndexByName(privdom->def, path, false) < 0) {
virReportError(VIR_ERR_INVALID_ARG, virReportError(VIR_ERR_INVALID_ARG,
_("invalid path: %s"), path); _("invalid path: %s"), path);
...@@ -3103,6 +3127,12 @@ static int testDomainInterfaceStats(virDomainPtr domain, ...@@ -3103,6 +3127,12 @@ static int testDomainInterfaceStats(virDomainPtr domain,
if (!(privdom = testDomObjFromDomain(domain))) if (!(privdom = testDomObjFromDomain(domain)))
return -1; return -1;
if (!virDomainObjIsActive(privdom)) {
virReportError(VIR_ERR_OPERATION_INVALID,
"%s", _("domain is not running"));
goto error;
}
for (i = 0; i < privdom->def->nnets; i++) { for (i = 0; i < privdom->def->nnets; i++) {
if (privdom->def->nets[i]->ifname && if (privdom->def->nets[i]->ifname &&
STREQ(privdom->def->nets[i]->ifname, path)) { STREQ(privdom->def->nets[i]->ifname, path)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册