1- // Copyright 2025 NetApp, Inc. All Rights Reserved.
1+ // Copyright 2026 NetApp, Inc. All Rights Reserved.
22
33package ontap
44
@@ -6614,6 +6614,11 @@ func TestPublishLun(t *testing.T) {
66146614
66156615 config .SANType = sa .ISCSI
66166616
6617+ publishVolCfg := func (fileSystem , formatOptions string ) * storage.VolumeConfig {
6618+ return & storage.VolumeConfig {FileSystem : fileSystem , FormatOptions : formatOptions }
6619+ }
6620+ volNoFsOrFmt := publishVolCfg ("" , "" )
6621+
66176622 publishInfo := & tridentmodels.VolumePublishInfo {
66186623 BackendUUID : "fakeBackendUUID" ,
66196624 Localhost : false ,
@@ -6630,7 +6635,7 @@ func TestPublishLun(t *testing.T) {
66306635 mockAPI .EXPECT ().LunMapGetReportingNodes (ctx , igroupName , lunPath ).Return ([]string {"Node1" }, nil )
66316636 mockAPI .EXPECT ().GetSLMDataLifs (ctx , ips , []string {"Node1" }).Return ([]string {}, nil )
66326637
6633- err := PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName )
6638+ err := PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName , volNoFsOrFmt )
66346639
66356640 assert .NoError (t , err )
66366641
@@ -6639,7 +6644,7 @@ func TestPublishLun(t *testing.T) {
66396644 publishInfo .Localhost = false
66406645 publishInfo .HostIQN = []string {}
66416646
6642- err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName )
6647+ err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName , volNoFsOrFmt )
66436648
66446649 assert .Error (t , err )
66456650
@@ -6654,11 +6659,12 @@ func TestPublishLun(t *testing.T) {
66546659 mockAPI .EXPECT ().LunMapGetReportingNodes (ctx , igroupName , lunPath ).Return ([]string {"Node1" }, nil )
66556660 mockAPI .EXPECT ().GetSLMDataLifs (ctx , ips , []string {"Node1" }).Return ([]string {}, nil )
66566661
6657- err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName )
6662+ err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName , volNoFsOrFmt )
66586663
66596664 assert .NoError (t , err )
6665+ assert .Equal (t , drivers .DefaultFileSystemType , publishInfo .FilesystemType )
66606666
6661- // Test 4 - LunGetFSType returns error
6667+ // Test 4 - LunGetAttribute returns error (fstype still from LUN)
66626668 mockAPI = mockapi .NewMockOntapAPI (mockCtrl )
66636669 publishInfo .HostIQN = []string {"host_iqn" }
66646670 mockAPI .EXPECT ().LunGetFSType (ctx , lunPath ).Return ("fsType" , nil )
@@ -6669,9 +6675,10 @@ func TestPublishLun(t *testing.T) {
66696675 mockAPI .EXPECT ().LunMapGetReportingNodes (ctx , igroupName , lunPath ).Return ([]string {"Node1" }, nil )
66706676 mockAPI .EXPECT ().GetSLMDataLifs (ctx , ips , []string {"Node1" }).Return ([]string {}, nil )
66716677
6672- err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName )
6678+ err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName , volNoFsOrFmt )
66736679
66746680 assert .NoError (t , err )
6681+ assert .Equal (t , "fsType" , publishInfo .FilesystemType )
66756682
66766683 // Test 5 - No target node found
66776684 mockAPI = mockapi .NewMockOntapAPI (mockCtrl )
@@ -6681,7 +6688,7 @@ func TestPublishLun(t *testing.T) {
66816688 mockAPI .EXPECT ().LunGetAttribute (ctx , lunPath , "formatOptions" ).Return ("formatOptions" , nil )
66826689 mockAPI .EXPECT ().LunGetByName (ctx , lunPath ).Return (dummyLun , nil )
66836690
6684- err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName )
6691+ err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName , volNoFsOrFmt )
66856692
66866693 assert .Error (t , err )
66876694
@@ -6699,7 +6706,7 @@ func TestPublishLun(t *testing.T) {
66996706 mockAPI .EXPECT ().EnsureIgroupAdded (ctx , igroupName ,
67006707 gomock .Any ()).Return (errors .New ("EnsureIgroupAdded returned error" ))
67016708
6702- err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName )
6709+ err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName , volNoFsOrFmt )
67036710
67046711 assert .Error (t , err )
67056712
@@ -6711,7 +6718,7 @@ func TestPublishLun(t *testing.T) {
67116718 errors .New ("EnsureLunMapped returned error" ))
67126719 mockAPI .EXPECT ().EnsureIgroupAdded (ctx , igroupName , gomock .Any ()).Return (nil )
67136720
6714- err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName )
6721+ err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName , volNoFsOrFmt )
67156722
67166723 assert .Error (t , err )
67176724
@@ -6720,7 +6727,7 @@ func TestPublishLun(t *testing.T) {
67206727 mockAPI .EXPECT ().LunGetAttribute (ctx , lunPath , "formatOptions" ).Return ("formatOptions" , nil )
67216728 mockAPI .EXPECT ().LunGetByName (ctx , lunPath ).Return (dummyLun , errors .New ("LunGetByName returned error" ))
67226729
6723- err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName )
6730+ err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName , volNoFsOrFmt )
67246731
67256732 assert .Error (t , err )
67266733
@@ -6729,7 +6736,7 @@ func TestPublishLun(t *testing.T) {
67296736 mockAPI .EXPECT ().LunGetAttribute (ctx , lunPath , "formatOptions" ).Return ("formatOptions" , nil )
67306737 mockAPI .EXPECT ().LunGetByName (ctx , lunPath ).Return (dummyLunNoSerial , nil )
67316738
6732- err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName )
6739+ err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName , volNoFsOrFmt )
67336740
67346741 assert .Error (t , err )
67356742
@@ -6750,9 +6757,102 @@ func TestPublishLun(t *testing.T) {
67506757 mockAPI .EXPECT ().LunMapGetReportingNodes (ctx , igroupName , lunPath ).Return ([]string {"Node1" }, nil )
67516758 mockAPI .EXPECT ().GetSLMDataLifs (ctx , ips , []string {"Node1" }).Return ([]string {}, nil )
67526759
6753- err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName )
6760+ err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName , volNoFsOrFmt )
67546761 assert .NoError (t , err )
67556762 assert .Equal (t , tempFormatOptions , publishInfo .FormatOptions )
6763+
6764+ // Test 11 - volume FileSystem (volConfig) is "xfs", LunGetFSType should NOT be called
6765+ mockAPI = mockapi .NewMockOntapAPI (mockCtrl )
6766+ publishInfo = & tridentmodels.VolumePublishInfo {
6767+ BackendUUID : "fakeBackendUUID" ,
6768+ Localhost : false ,
6769+ Unmanaged : true ,
6770+ Nodes : nodeList ,
6771+ HostIQN : []string {"host_iqn" },
6772+ }
6773+ config .FileSystemType = ""
6774+ mockAPI .EXPECT ().LunGetAttribute (ctx , lunPath , "formatOptions" ).Return ("formatOptions" , nil )
6775+ mockAPI .EXPECT ().LunGetByName (ctx , lunPath ).Return (dummyLun , nil )
6776+ mockAPI .EXPECT ().EnsureIgroupAdded (ctx , igroupName , publishInfo .HostIQN [0 ])
6777+ mockAPI .EXPECT ().EnsureLunMapped (ctx , igroupName , lunPath ).Return (1111 , nil )
6778+ mockAPI .EXPECT ().LunMapGetReportingNodes (ctx , igroupName , lunPath ).Return ([]string {"Node1" }, nil )
6779+ mockAPI .EXPECT ().GetSLMDataLifs (ctx , ips , []string {"Node1" }).Return ([]string {}, nil )
6780+
6781+ err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName ,
6782+ publishVolCfg ("xfs" , "" ))
6783+
6784+ assert .NoError (t , err )
6785+ assert .Equal (t , "xfs" , publishInfo .FilesystemType )
6786+ assert .Contains (t , publishInfo .MountOptions , "nouuid" )
6787+
6788+ // Test 11b - FileSystem and FormatOptions from vol (as after Create); no LunGetFSType or LunGetAttribute
6789+ mockAPI = mockapi .NewMockOntapAPI (mockCtrl )
6790+ publishInfo = & tridentmodels.VolumePublishInfo {
6791+ BackendUUID : "fakeBackendUUID" ,
6792+ Localhost : false ,
6793+ Unmanaged : true ,
6794+ Nodes : nodeList ,
6795+ HostIQN : []string {"host_iqn" },
6796+ }
6797+ volFmtOpts := "-b 4096 -T stride=256"
6798+ mockAPI .EXPECT ().LunGetByName (ctx , lunPath ).Return (dummyLun , nil )
6799+ mockAPI .EXPECT ().EnsureIgroupAdded (ctx , igroupName , publishInfo .HostIQN [0 ])
6800+ mockAPI .EXPECT ().EnsureLunMapped (ctx , igroupName , lunPath ).Return (1111 , nil )
6801+ mockAPI .EXPECT ().LunMapGetReportingNodes (ctx , igroupName , lunPath ).Return ([]string {"Node1" }, nil )
6802+ mockAPI .EXPECT ().GetSLMDataLifs (ctx , ips , []string {"Node1" }).Return ([]string {}, nil )
6803+
6804+ err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName ,
6805+ publishVolCfg ("xfs" , volFmtOpts ))
6806+ assert .NoError (t , err )
6807+ assert .Equal (t , "xfs" , publishInfo .FilesystemType )
6808+ assert .Equal (t , volFmtOpts , publishInfo .FormatOptions )
6809+ assert .Contains (t , publishInfo .MountOptions , "nouuid" )
6810+
6811+ // Test 12 - volume fstype empty, LunGetFSType returns empty string with no error, use default
6812+ mockAPI = mockapi .NewMockOntapAPI (mockCtrl )
6813+ publishInfo = & tridentmodels.VolumePublishInfo {
6814+ BackendUUID : "fakeBackendUUID" ,
6815+ Localhost : false ,
6816+ Unmanaged : true ,
6817+ Nodes : nodeList ,
6818+ HostIQN : []string {"host_iqn" },
6819+ }
6820+ config .FileSystemType = ""
6821+ mockAPI .EXPECT ().LunGetFSType (ctx , lunPath ).Return ("" , nil )
6822+ mockAPI .EXPECT ().LunGetAttribute (ctx , lunPath , "formatOptions" ).Return ("formatOptions" , nil )
6823+ mockAPI .EXPECT ().LunGetByName (ctx , lunPath ).Return (dummyLun , nil )
6824+ mockAPI .EXPECT ().EnsureIgroupAdded (ctx , igroupName , publishInfo .HostIQN [0 ])
6825+ mockAPI .EXPECT ().EnsureLunMapped (ctx , igroupName , lunPath ).Return (1111 , nil )
6826+ mockAPI .EXPECT ().LunMapGetReportingNodes (ctx , igroupName , lunPath ).Return ([]string {"Node1" }, nil )
6827+ mockAPI .EXPECT ().GetSLMDataLifs (ctx , ips , []string {"Node1" }).Return ([]string {}, nil )
6828+
6829+ err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName , volNoFsOrFmt )
6830+
6831+ assert .NoError (t , err )
6832+ assert .Equal (t , drivers .DefaultFileSystemType , publishInfo .FilesystemType )
6833+
6834+ // Test 13 - volume fstype empty, LunGetFSType returns error, use default
6835+ mockAPI = mockapi .NewMockOntapAPI (mockCtrl )
6836+ publishInfo = & tridentmodels.VolumePublishInfo {
6837+ BackendUUID : "fakeBackendUUID" ,
6838+ Localhost : false ,
6839+ Unmanaged : true ,
6840+ Nodes : nodeList ,
6841+ HostIQN : []string {"host_iqn" },
6842+ }
6843+ config .FileSystemType = ""
6844+ mockAPI .EXPECT ().LunGetFSType (ctx , lunPath ).Return ("" , errors .New ("LunGetFSType returned error" ))
6845+ mockAPI .EXPECT ().LunGetAttribute (ctx , lunPath , "formatOptions" ).Return ("formatOptions" , nil )
6846+ mockAPI .EXPECT ().LunGetByName (ctx , lunPath ).Return (dummyLun , nil )
6847+ mockAPI .EXPECT ().EnsureIgroupAdded (ctx , igroupName , publishInfo .HostIQN [0 ])
6848+ mockAPI .EXPECT ().EnsureLunMapped (ctx , igroupName , lunPath ).Return (1111 , nil )
6849+ mockAPI .EXPECT ().LunMapGetReportingNodes (ctx , igroupName , lunPath ).Return ([]string {"Node1" }, nil )
6850+ mockAPI .EXPECT ().GetSLMDataLifs (ctx , ips , []string {"Node1" }).Return ([]string {}, nil )
6851+
6852+ err = PublishLUN (ctx , mockAPI , config , ips , publishInfo , lunPath , igroupName , iSCSINodeName , volNoFsOrFmt )
6853+
6854+ assert .NoError (t , err )
6855+ assert .Equal (t , drivers .DefaultFileSystemType , publishInfo .FilesystemType )
67566856}
67576857
67586858func TestValidateSANDriver (t * testing.T ) {
0 commit comments