[PATCH v2 1/4] test_driver: Implement virDomainGetJobInfo

Luke Yue posted 4 patches 4 years, 5 months ago
There is a newer version of this series
[PATCH v2 1/4] test_driver: Implement virDomainGetJobInfo
Posted by Luke Yue 4 years, 5 months ago
priv-jobState is used to store dummy job type, and priv->jobOperation is
used to store dummy job operation, they are initialized to
VIR_DOMAIN_JOB_NONE and VIR_DOMAIN_JOB_OPERATION_UNKNOWN, we can
just change them in other job related APIs as there is no real job in test
driver.

Signed-off-by: Luke Yue <lukedyue@gmail.com>
---
 src/test/test_driver.c | 89 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 89 insertions(+)

diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 00cc13511a..9306f0e104 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -380,6 +380,10 @@ struct _testDomainObjPrivate {
     /* used by get/set time APIs */
     long long seconds;
     unsigned int nseconds;
+
+    /* used by Job Info APIs */
+    unsigned int jobState;
+    unsigned int jobOperation;
 };
 
 
@@ -396,6 +400,9 @@ testDomainObjPrivateAlloc(void *opaque)
     priv->seconds = 627319920;
     priv->nseconds = 0;
 
+    priv->jobState = VIR_DOMAIN_JOB_NONE;
+    priv->jobOperation = VIR_DOMAIN_JOB_OPERATION_UNKNOWN;
+
     return priv;
 }
 
@@ -2681,6 +2688,87 @@ testDomainGetOSType(virDomainPtr dom G_GNUC_UNUSED)
     return ret;
 }
 
+static int
+testDomainGetJobInfoImpl(virDomainObj *dom,
+                         virDomainJobInfoPtr info)
+{
+    testDomainObjPrivate *priv = dom->privateData;
+
+    memset(info, 0, sizeof(*info));
+
+    info->type = priv->jobState;
+
+    switch (priv->jobState) {
+    case VIR_DOMAIN_JOB_NONE:
+        break;
+
+    case VIR_DOMAIN_JOB_BOUNDED:
+        info->dataTotal = 30 * 1024;
+        info->dataProcessed = 10 * 1024;
+        info->dataRemaining = 20 * 1024;
+        info->timeRemaining = 6000;
+        info->timeElapsed = 4000;
+        info->memTotal = 3 * 1024 * 1024;
+        info->memProcessed = 1024 * 1024;
+        info->memRemaining = 2 * 1024 * 1024;
+        info->fileTotal = 2 * 1024 * 1024;
+        info->fileProcessed = 1024 * 1024 / 2;
+        info->fileRemaining = 3 * 1024 * 1024 / 2;
+        break;
+
+    case VIR_DOMAIN_JOB_UNBOUNDED:
+        info->dataTotal = 30 * 1024;
+        info->dataProcessed = 10 * 1024;
+        info->dataRemaining = 20 * 1024;
+        info->timeElapsed = 4000;
+        info->memTotal = 3 * 1024 * 1024;
+        info->memProcessed = 1024 * 1024;
+        info->memRemaining = 2 * 1024 * 1024;
+        info->fileTotal = 2 * 1024 * 1024;
+        info->fileProcessed = 1024 * 1024 / 2;
+        info->fileRemaining = 3 * 1024 * 1024 / 2;
+        break;
+
+    case VIR_DOMAIN_JOB_COMPLETED:
+        info->timeElapsed = 10000;
+        info->dataTotal = 30 * 1024;
+        info->dataProcessed = 30 * 1024;
+        info->memTotal = 3 * 1024 * 1024;
+        info->memProcessed = 3 * 1024 * 1024;
+        info->fileTotal = 2 * 1024 * 1024;
+        info->fileProcessed = 2 * 1024 * 1024;
+        break;
+
+    case VIR_DOMAIN_JOB_FAILED:
+        break;
+
+    case VIR_DOMAIN_JOB_CANCELLED:
+        break;
+    }
+
+    return 0;
+}
+
+static int
+testDomainGetJobInfo(virDomainPtr dom,
+                     virDomainJobInfoPtr info)
+{
+    virDomainObj *vm;
+    int ret = -1;
+
+    if (!(vm = testDomObjFromDomain(dom)))
+        goto cleanup;
+
+    if (virDomainObjCheckActive(vm) < 0)
+        goto cleanup;
+
+    ret = testDomainGetJobInfoImpl(vm, info);
+
+ cleanup:
+    virDomainObjEndAPI(&vm);
+    return ret;
+}
+
 
 static int
 testDomainGetLaunchSecurityInfo(virDomainPtr domain G_GNUC_UNUSED,
@@ -9583,6 +9671,7 @@ static virHypervisorDriver testHypervisorDriver = {
     .domainMemoryPeek = testDomainMemoryPeek, /* 5.4.0 */
     .domainGetBlockInfo = testDomainGetBlockInfo, /* 5.7.0 */
     .domainSetLifecycleAction = testDomainSetLifecycleAction, /* 5.7.0 */
+    .domainGetJobInfo = testDomainGetJobInfo, /* 7.7.0 */
 
     .domainSnapshotNum = testDomainSnapshotNum, /* 1.1.4 */
     .domainSnapshotListNames = testDomainSnapshotListNames, /* 1.1.4 */
-- 
2.32.0

Re: [PATCH v2 1/4] test_driver: Implement virDomainGetJobInfo
Posted by Martin Kletzander 4 years, 5 months ago
On Mon, Aug 16, 2021 at 07:13:34PM +0800, Luke Yue wrote:
>priv-jobState is used to store dummy job type, and priv->jobOperation is
>used to store dummy job operation, they are initialized to
>VIR_DOMAIN_JOB_NONE and VIR_DOMAIN_JOB_OPERATION_UNKNOWN, we can
>just change them in other job related APIs as there is no real job in test
>driver.
>
>Signed-off-by: Luke Yue <lukedyue@gmail.com>
>---
> src/test/test_driver.c | 89 ++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 89 insertions(+)
>
>diff --git a/src/test/test_driver.c b/src/test/test_driver.c
>index 00cc13511a..9306f0e104 100644
>--- a/src/test/test_driver.c
>+++ b/src/test/test_driver.c
>@@ -380,6 +380,10 @@ struct _testDomainObjPrivate {
>     /* used by get/set time APIs */
>     long long seconds;
>     unsigned int nseconds;
>+
>+    /* used by Job Info APIs */
>+    unsigned int jobState;
>+    unsigned int jobOperation;
> };
>
>
>@@ -396,6 +400,9 @@ testDomainObjPrivateAlloc(void *opaque)
>     priv->seconds = 627319920;
>     priv->nseconds = 0;
>
>+    priv->jobState = VIR_DOMAIN_JOB_NONE;
>+    priv->jobOperation = VIR_DOMAIN_JOB_OPERATION_UNKNOWN;
>+
>     return priv;
> }
>
>@@ -2681,6 +2688,87 @@ testDomainGetOSType(virDomainPtr dom G_GNUC_UNUSED)
>     return ret;
> }
>
>+static int
>+testDomainGetJobInfoImpl(virDomainObj *dom,
>+                         virDomainJobInfoPtr info)
>+{
>+    testDomainObjPrivate *priv = dom->privateData;
>+
>+    memset(info, 0, sizeof(*info));
>+
>+    info->type = priv->jobState;
>+
>+    switch (priv->jobState) {
>+    case VIR_DOMAIN_JOB_NONE:
>+        break;
>+
>+    case VIR_DOMAIN_JOB_BOUNDED:
>+        info->dataTotal = 30 * 1024;
>+        info->dataProcessed = 10 * 1024;
>+        info->dataRemaining = 20 * 1024;
>+        info->timeRemaining = 6000;
>+        info->timeElapsed = 4000;
>+        info->memTotal = 3 * 1024 * 1024;
>+        info->memProcessed = 1024 * 1024;
>+        info->memRemaining = 2 * 1024 * 1024;
>+        info->fileTotal = 2 * 1024 * 1024;
>+        info->fileProcessed = 1024 * 1024 / 2;
>+        info->fileRemaining = 3 * 1024 * 1024 / 2;
>+        break;
>+
>+    case VIR_DOMAIN_JOB_UNBOUNDED:
>+        info->dataTotal = 30 * 1024;
>+        info->dataProcessed = 10 * 1024;
>+        info->dataRemaining = 20 * 1024;
>+        info->timeElapsed = 4000;
>+        info->memTotal = 3 * 1024 * 1024;
>+        info->memProcessed = 1024 * 1024;
>+        info->memRemaining = 2 * 1024 * 1024;
>+        info->fileTotal = 2 * 1024 * 1024;
>+        info->fileProcessed = 1024 * 1024 / 2;
>+        info->fileRemaining = 3 * 1024 * 1024 / 2;
>+        break;
>+
>+    case VIR_DOMAIN_JOB_COMPLETED:
>+        info->timeElapsed = 10000;
>+        info->dataTotal = 30 * 1024;
>+        info->dataProcessed = 30 * 1024;
>+        info->memTotal = 3 * 1024 * 1024;
>+        info->memProcessed = 3 * 1024 * 1024;
>+        info->fileTotal = 2 * 1024 * 1024;
>+        info->fileProcessed = 2 * 1024 * 1024;
>+        break;
>+

This could be cleared up with some constants and branch fallthroughs,
but that's a minor details, for now this is fine as it is.

Reviewed-by: Martin Kletzander <mkletzan@redhat.com>