@@ -2,12 +2,16 @@ package integrationtests
22
33import (
44 "context"
5+ "fmt"
6+ "math/rand"
57 "strconv"
68 "strings"
79 "testing"
10+ "time"
811
912 "github.com/kubernetes-csi/csi-proxy/client/api/disk/v1beta2"
1013 v1beta2client "github.com/kubernetes-csi/csi-proxy/client/groups/disk/v1beta2"
14+ "github.com/stretchr/testify/assert"
1115 "github.com/stretchr/testify/require"
1216)
1317
@@ -53,4 +57,61 @@ func TestDiskAPIGroup(t *testing.T) {
5357 }
5458 }
5559 })
60+
61+ t .Run ("Get/SetAttachState" , func (t * testing.T ) {
62+ skipTestOnCondition (t , isRunningOnGhActions ())
63+ client , err := v1beta2client .NewClient ()
64+ require .NoError (t , err )
65+
66+ defer client .Close ()
67+
68+ s1 := rand .NewSource (time .Now ().UTC ().UnixNano ())
69+ r1 := rand .New (s1 )
70+
71+ testPluginPath := fmt .Sprintf ("C:\\ var\\ lib\\ kubelet\\ plugins\\ testplugin-%d.csi.io\\ " , r1 .Intn (100 ))
72+ mountPath := fmt .Sprintf ("%smount-%d" , testPluginPath , r1 .Intn (100 ))
73+ vhdxPath := fmt .Sprintf ("%sdisk-%d.vhdx" , testPluginPath , r1 .Intn (100 ))
74+
75+ defer diskCleanup (t , vhdxPath , mountPath , testPluginPath )
76+ diskNum := diskInit (t , vhdxPath , mountPath , testPluginPath )
77+
78+ out , err := runPowershellCmd (fmt .Sprintf ("Get-Disk -Number %s | Set-Disk -IsOffline $true" , diskNum ))
79+ require .NoError (t , err , "failed setting disk offline, out=%v" , out )
80+
81+ getReq := & v1beta2.GetAttachStateRequest {DiskID : diskNum }
82+ getResp , err := client .GetAttachState (context .TODO (), getReq )
83+
84+ if assert .NoError (t , err ) {
85+ assert .False (t , getResp .IsOnline , "Expected disk to be offline" )
86+ }
87+
88+ setReq := & v1beta2.SetAttachStateRequest {DiskID : diskNum , IsOnline : true }
89+ _ , err = client .SetAttachState (context .TODO (), setReq )
90+ assert .NoError (t , err )
91+
92+ out , err = runPowershellCmd (fmt .Sprintf ("Get-Disk -Number %s | Select-Object -ExpandProperty IsOffline" , diskNum ))
93+ assert .NoError (t , err )
94+
95+ result , err := strconv .ParseBool (strings .TrimSpace (out ))
96+ assert .NoError (t , err )
97+ assert .False (t , result , "Expected disk to be online" )
98+
99+ getReq = & v1beta2.GetAttachStateRequest {DiskID : diskNum }
100+ getResp , err = client .GetAttachState (context .TODO (), getReq )
101+
102+ if assert .NoError (t , err ) {
103+ assert .True (t , getResp .IsOnline , "Expected disk is online" )
104+ }
105+
106+ setReq = & v1beta2.SetAttachStateRequest {DiskID : diskNum , IsOnline : false }
107+ _ , err = client .SetAttachState (context .TODO (), setReq )
108+ assert .NoError (t , err )
109+
110+ out , err = runPowershellCmd (fmt .Sprintf ("Get-Disk -Number %s | Select-Object -ExpandProperty IsOffline" , diskNum ))
111+ assert .NoError (t , err )
112+
113+ result , err = strconv .ParseBool (strings .TrimSpace (out ))
114+ assert .NoError (t , err )
115+ assert .True (t , result , "Expected disk to be offline" )
116+ })
56117}
0 commit comments