diff --git a/pkg/volume/csi/nodeinfomanager/nodeinfomanager_test.go b/pkg/volume/csi/nodeinfomanager/nodeinfomanager_test.go index b211c3eba4c..c57e4d69a88 100644 --- a/pkg/volume/csi/nodeinfomanager/nodeinfomanager_test.go +++ b/pkg/volume/csi/nodeinfomanager/nodeinfomanager_test.go @@ -346,6 +346,45 @@ func TestInstallCSIDriver(t *testing.T) { return csiNode }(), }, + { + name: "pre-existing node info with driver, but owned by previous node", + existingNode: func() *v1.Node { + node := generateNode(nil /*nodeIDs*/, nil /*labels*/, nil /*capacity*/) + node.UID = types.UID("node1") + return node + }(), + existingCSINode: func() *storage.CSINode { + csiNode := generateCSINode( + nodeIDMap{ + "com.example.csi.old-driver": "com.example.csi/csi-node2", + }, + nil /*volumeLimits*/, nil, /*topologyKeys*/ + ) + csiNode.OwnerReferences[0].UID = types.UID("node2") + return csiNode + }(), + driverName: "com.example.csi.driver1", + inputNodeID: "com.example.csi/csi-node1", + expectedNode: &v1.Node{ + ObjectMeta: metav1.ObjectMeta{ + Name: "node1", + UID: types.UID("node1"), + Annotations: map[string]string{annotationKeyNodeID: marshall(nodeIDMap{"com.example.csi.driver1": "com.example.csi/csi-node1"})}, + }, + }, + expectedCSINode: &storage.CSINode{ + ObjectMeta: getCSINodeObjectMeta(), + Spec: storage.CSINodeSpec{ + Drivers: []storage.CSINodeDriver{ + { + // Only the new driver should be present because the old CSINode represented a previous node. + Name: "com.example.csi.driver1", + NodeID: "com.example.csi/csi-node1", + }, + }, + }, + }, + }, { name: "nil topology, empty node", driverName: "com.example.csi.driver1",