From 61afce31767fc99549a258169198bdf644d4f1b0 Mon Sep 17 00:00:00 2001 From: Chethan Venkatesh Date: Sun, 5 Sep 2021 17:26:36 -0700 Subject: [PATCH] fix: Update CnsQueryAsync API request parameters to handle nil for QuerySelection Closes: #2575 --- cns/client.go | 4 +-- cns/client_test.go | 47 +++++++++++++++------------------ cns/simulator/simulator_test.go | 2 +- 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/cns/client.go b/cns/client.go index 90466b13a..e4097f908 100644 --- a/cns/client.go +++ b/cns/client.go @@ -190,11 +190,11 @@ func (c *Client) QueryAllVolume(ctx context.Context, queryFilter cnstypes.CnsQue } // QueryVolumeAsync calls the CNS QueryAsync API and return a task, from which we can extract CnsQueryResult -func (c *Client) QueryVolumeAsync(ctx context.Context, queryFilter cnstypes.CnsQueryFilter, querySelection cnstypes.CnsQuerySelection) (*object.Task, error) { +func (c *Client) QueryVolumeAsync(ctx context.Context, queryFilter cnstypes.CnsQueryFilter, querySelection *cnstypes.CnsQuerySelection) (*object.Task, error) { req := cnstypes.CnsQueryAsync{ This: CnsVolumeManagerInstance, Filter: queryFilter, - Selection: &querySelection, + Selection: querySelection, } res, err := methods.CnsQueryAsync(ctx, c, &req) if err != nil { diff --git a/cns/client_test.go b/cns/client_test.go index 706167587..01e580533 100644 --- a/cns/client_test.go +++ b/cns/client_test.go @@ -856,6 +856,28 @@ func TestClient(t *testing.T) { } t.Logf("Volume detached sucessfully") + // Test QueryVolumeAsync API only for vSphere version 7.0.3 onwards + if isvSphereVersion70U3orAbove(ctx, c.ServiceContent.About) { + queryVolumeAsyncTask, err := cnsClient.QueryVolumeAsync(ctx, queryFilter, nil) + if err != nil { + t.Errorf("Failed to query volumes with QueryVolumeAsync. Error: %+v \n", err) + } + queryVolumeAsyncTaskInfo, err := GetTaskInfo(ctx, queryVolumeAsyncTask) + if err != nil { + t.Errorf("Failed to query volumes with QueryVolumeAsync. Error: %+v \n", err) + } + queryVolumeAsyncTaskResults, err := GetTaskResultArray(ctx, queryVolumeAsyncTaskInfo) + if err != nil { + t.Errorf("Failed to query volumes with QueryVolumeAsync. Error: %+v \n", err) + } + for _, queryVolumeAsyncTaskResult := range queryVolumeAsyncTaskResults { + queryVolumeAsyncOperationRes := queryVolumeAsyncTaskResult.GetCnsVolumeOperationResult() + if queryVolumeAsyncOperationRes.Fault != nil { + t.Fatalf("Failed to query volumes with QueryVolumeAsync. fault=%+v", queryVolumeAsyncOperationRes.Fault) + } + t.Logf("Successfully queried Volume using queryAsync API. queryVolumeAsyncTaskResult: %+v", pretty.Sprint(queryVolumeAsyncTaskResult)) + } + } // Test DeleteVolume API t.Logf("Deleting volume: %+v", volumeIDList) deleteTask, err := cnsClient.DeleteVolume(ctx, volumeIDList, true) @@ -1197,31 +1219,6 @@ func TestClient(t *testing.T) { } t.Logf("volume:%q deleted sucessfully", volumeID) } - // Test QueryVolumeAsync API only for vSphere version 7.0.3++ - if isvSphereVersion70U3orAbove(ctx, c.ServiceContent.About) { - queryVolumeAsyncTask, err := cnsClient.QueryVolumeAsync(ctx, queryFilter, querySelection) - if err != nil { - t.Errorf("Failed to query volumes with QueryVolumeAsync. Error: %+v \n", err) - t.Fatal(err) - } - queryVolumeAsyncTaskInfo, err := GetTaskInfo(ctx, queryVolumeAsyncTask) - if err != nil { - t.Errorf("Failed to query volumes with QueryVolumeAsync. Error: %+v \n", err) - t.Fatal(err) - } - queryVolumeAsyncTaskResults, err := GetTaskResultArray(ctx, queryVolumeAsyncTaskInfo) - if err != nil { - t.Errorf("Failed to query volumes with QueryVolumeAsync. Error: %+v \n", err) - t.Fatal(err) - } - for _, queryVolumeAsyncTaskResult := range queryVolumeAsyncTaskResults { - queryVolumeAsyncOperationRes := queryVolumeAsyncTaskResult.GetCnsVolumeOperationResult() - if queryVolumeAsyncOperationRes.Fault != nil { - t.Fatalf("Failed to query volumes with QueryVolumeAsync. fault=%+v", queryVolumeAsyncOperationRes.Fault) - } - t.Logf("Successfully queried Volume using queryAsync API. queryVolumeAsyncTaskResult: %+v", pretty.Sprint(queryVolumeAsyncTaskResult)) - } - } } // isvSphereVersion70U3orAbove checks if specified version is 7.0 Update 3 or higher diff --git a/cns/simulator/simulator_test.go b/cns/simulator/simulator_test.go index ac6615c1c..d41a64fd2 100644 --- a/cns/simulator/simulator_test.go +++ b/cns/simulator/simulator_test.go @@ -290,7 +290,7 @@ func TestSimulator(t *testing.T) { // QueryAsync queryFilter = cnstypes.CnsQueryFilter{} querySelection := cnstypes.CnsQuerySelection{} - queryVolumeAsyncTask, err := cnsClient.QueryVolumeAsync(ctx, queryFilter, querySelection) + queryVolumeAsyncTask, err := cnsClient.QueryVolumeAsync(ctx, queryFilter, &querySelection) if err != nil { t.Fatal(err) }