// Calls AddVolumeNode() once with attached set to true. // Verifies a single volume/node entry exists. func Test_AddVolumeNode_Positive_NewVolumeNewNode(t *testing.T) { … } // Calls AddVolumeNode() once with attached set to false. // Verifies a single volume/node entry exists. // Then calls AddVolumeNode() with attached set to true // Verifies volume is attached to the node according to asw. func Test_AddVolumeNode_Positive_NewVolumeNewNodeWithFalseAttached(t *testing.T) { … } // Calls AddVolumeNode() once with attached set to false. // Verifies a single volume/node entry exists. // Then calls AddVolumeNode() to attach the volume to a different node with attached set to true // Verifies volume is attached to the node according to asw. func Test_AddVolumeNode_Positive_NewVolumeTwoNodesWithFalseAttached(t *testing.T) { … } // Calls AddVolumeNode() twice. Second time use a different node name. // Verifies two volume/node entries exist with the same volumeSpec. func Test_AddVolumeNode_Positive_ExistingVolumeNewNode(t *testing.T) { … } // Calls AddVolumeNode() twice. Uses the same volume and node both times. // Verifies a single volume/node entry exists. func Test_AddVolumeNode_Positive_ExistingVolumeExistingNode(t *testing.T) { … } // Populates data struct with one volume/node entry. // Calls DeleteVolumeNode() to delete volume/node. // Verifies no volume/node entries exists. func Test_DeleteVolumeNode_Positive_VolumeExistsNodeExists(t *testing.T) { … } // Calls DeleteVolumeNode() to delete volume/node on empty data struct // Verifies no volume/node entries exists. func Test_DeleteVolumeNode_Positive_VolumeDoesntExistNodeDoesntExist(t *testing.T) { … } // Populates data struct with two volume/node entries the second one using a // different node. // Calls DeleteVolumeNode() to delete first volume/node. // Verifies only second volume/node entry exists. func Test_DeleteVolumeNode_Positive_TwoNodesOneDeleted(t *testing.T) { … } // Populates data struct with one volume/node entry. // Calls GetAttachState() to verify entry. // Verifies the populated volume/node entry exists. func Test_VolumeNodeExists_Positive_VolumeExistsNodeExists(t *testing.T) { … } // Populates data struct with one volume1/node1 entry. // Calls GetAttachState() with volume1/node2. // Verifies requested entry does not exist, but populated entry does. func Test_VolumeNodeExists_Positive_VolumeExistsNodeDoesntExist(t *testing.T) { … } // Calls GetAttachState() on empty data struct. // Verifies requested entry does not exist. func Test_VolumeNodeExists_Positive_VolumeAndNodeDontExist(t *testing.T) { … } // Calls GetAttachedVolumes() on empty data struct. // Verifies no volume/node entries are returned. func Test_GetAttachedVolumes_Positive_NoVolumesOrNodes(t *testing.T) { … } // Populates data struct with one volume/node entry. // Calls GetAttachedVolumes() to get list of entries. // Verifies one volume/node entry is returned. func Test_GetAttachedVolumes_Positive_OneVolumeOneNode(t *testing.T) { … } // Populates data struct with two volume/node entries (different node and volume). // Calls GetAttachedVolumes() to get list of entries. // Verifies both volume/node entries are returned. func Test_GetAttachedVolumes_Positive_TwoVolumeTwoNodes(t *testing.T) { … } // Populates data struct with two volume/node entries (same volume different node). // Calls GetAttachedVolumes() to get list of entries. // Verifies both volume/node entries are returned. func Test_GetAttachedVolumes_Positive_OneVolumeTwoNodes(t *testing.T) { … } // Populates data struct with one volume/node entry. // Verifies mountedByNode is true and DetachRequestedTime is zero. func Test_SetVolumesMountedByNode_Positive_Set(t *testing.T) { … } // Populates data struct with one volume/node entry. // Calls SetVolumesMountedByNode twice, first setting mounted to true then false. // Verifies mountedByNode is false. func Test_SetVolumesMountedByNode_Positive_UnsetWithInitialSet(t *testing.T) { … } // Populates data struct with one volume/node entry. // Calls SetVolumesMountedByNode once, setting mounted to false. // Verifies mountedByNode is false because value is overwritten func Test_SetVolumesMountedByNode_Positive_UnsetWithoutInitialSet(t *testing.T) { … } // Populates data struct with one volume/node entry. // Calls SetVolumesMountedByNode twice, first setting mounted to true then false. // Calls AddVolumeNode to readd the same volume/node. // Verifies mountedByNode is false and detachRequestedTime is zero. func Test_SetVolumesMountedByNode_Positive_UnsetWithInitialSetAddVolumeNodeNotReset(t *testing.T) { … } // Populates data struct with one volume/node entry. // Calls RemoveVolumeFromReportAsAttached() once on volume/node entry. // Calls SetVolumesMountedByNode() twice, first setting mounted to true then false. // Verifies mountedByNode is false and detachRequestedTime is NOT zero. func Test_SetVolumesMountedByNode_Positive_UnsetWithInitialSetVerifyDetachRequestedTimePerserved(t *testing.T) { … } // Populates data struct with one volume/node entry. // Verifies mountedByNode is true and detachRequestedTime is zero (default values). func Test_RemoveVolumeFromReportAsAttached_Positive_Set(t *testing.T) { … } // Populates data struct with one volume/node entry. // Calls RemoveVolumeFromReportAsAttached() once on volume/node entry. // Verifies mountedByNode is true and detachRequestedTime is NOT zero. func Test_RemoveVolumeFromReportAsAttached_Positive_Marked(t *testing.T) { … } // Populates data struct with one volume/node entry. // Calls MarkDesireToDetach() once on volume/node entry. // Calls ResetDetachRequestTime() to reset the detach request time value back to 0. // Verifies mountedByNode is true and detachRequestedTime is reset to zero. func Test_MarkDesireToDetach_Positive_MarkedAddVolumeNodeReset(t *testing.T) { … } // Populates data struct with one volume/node entry. // Calls SetVolumesMountedByNode() twice, first setting mounted to true then false. // Calls RemoveVolumeFromReportAsAttached() once on volume/node entry. // Verifies mountedByNode is false and detachRequestedTime is NOT zero. func Test_RemoveVolumeFromReportAsAttached_Positive_UnsetWithInitialSetVolumesMountedByNodePreserved(t *testing.T) { … } // Populates data struct with one volume/node entry. // Calls RemoveVolumeFromReportAsAttached // Verifies there is no volume as reported as attached func Test_RemoveVolumeFromReportAsAttached(t *testing.T) { … } // Populates data struct with one volume/node entry. // Calls RemoveVolumeFromReportAsAttached // Calls AddVolumeToReportAsAttached to add volume back as attached // Verifies there is one volume as reported as attached func Test_RemoveVolumeFromReportAsAttached_AddVolumeToReportAsAttached_Positive(t *testing.T) { … } // Populates data struct with one volume/node entry. // Calls RemoveVolumeFromReportAsAttached // Calls DeleteVolumeNode // Calls AddVolumeNode // Verifies there is no volume as reported as attached func Test_RemoveVolumeFromReportAsAttached_Delete_AddVolumeNode(t *testing.T) { … } // Populates data struct with one volume/node entry. // Calls SetDetachRequestTime twice and sleep maxWaitTime (1 second) in between // The elapsed time returned from the first SetDetachRequestTime call should be smaller than maxWaitTime // The elapsed time returned from the second SetDetachRequestTime call should be larger than maxWaitTime func Test_SetDetachRequestTime_Positive(t *testing.T) { … } func Test_GetAttachedVolumesForNode_Positive_NoVolumesOrNodes(t *testing.T) { … } func Test_GetAttachedVolumesForNode_Positive_OneVolumeOneNode(t *testing.T) { … } func Test_GetAttachedVolumesForNode_Positive_TwoVolumeTwoNodes(t *testing.T) { … } func Test_GetAttachedVolumesForNode_Positive_OneVolumeTwoNodes(t *testing.T) { … } func Test_OneVolumeTwoNodes_TwoDevicePaths(t *testing.T) { … } // Test_SetNodeStatusUpdateNeededError expects the map nodesToUpdateStatusFor // to be empty if the SetNodeStatusUpdateNeeded is called on a node that // does not exist in the actual state of the world func Test_SetNodeStatusUpdateNeededError(t *testing.T) { … } // Test_updateNodeStatusUpdateNeeded expects statusUpdateNeeded to be properly updated if // updateNodeStatusUpdateNeeded is called on a node that exists in the actual state of the world func Test_updateNodeStatusUpdateNeeded(t *testing.T) { … } // Test_updateNodeStatusUpdateNeededError expects statusUpdateNeeded to report error if // updateNodeStatusUpdateNeeded is called on a node that does not exist in the actual state of the world func Test_updateNodeStatusUpdateNeededError(t *testing.T) { … } // Mark a volume as attached to a node. // Verify GetAttachState returns AttachedState // Verify GetAttachedVolumes return this volume func Test_MarkVolumeAsAttached(t *testing.T) { … } // Mark a volume as attachment as uncertain. // Verify GetAttachState returns UncertainState // Verify GetAttachedVolumes return this volume func Test_MarkVolumeAsUncertain(t *testing.T) { … } // Calls AddVolumeNode() once with attached set to true. // Verifies GetVolumesToReportAttachedForNode has an update for the node. // Call GetVolumesToReportAttachedForNode a second time for the node, verify it does not report // an update is needed any more // Then calls RemoveVolumeFromReportAsAttached() // Verifies GetVolumesToReportAttachedForNode reports an update is needed func Test_GetVolumesToReportAttachedForNode_Positive(t *testing.T) { … } // Verifies GetVolumesToReportAttachedForNode reports no update needed for an unknown node. func Test_GetVolumesToReportAttachedForNode_UnknownNode(t *testing.T) { … } func verifyAttachedVolume( t *testing.T, attachedVolumes []AttachedVolume, expectedVolumeName v1.UniqueVolumeName, expectedVolumeSpecName string, expectedNodeName types.NodeName, expectedDevicePath string, expectedMountedByNode, expectNonZeroDetachRequestedTime bool) { … }