@@ -2012,3 +2012,231 @@ func NewMockConvergedClient(ctrl *gomock.Controller) *MockConvergedClientWrapper
20122012 MockTasks : mockTasks ,
20132013 }
20142014}
2015+
2016+ func TestGetTaskUUIDFromVM (t * testing.T ) {
2017+ tests := []struct {
2018+ name string
2019+ clientBuilder func () * v4Converged.Client
2020+ vmId string
2021+ want string
2022+ wantErr bool
2023+ errorMessage string
2024+ }{
2025+ {
2026+ name : "empty vmId returns error" ,
2027+ clientBuilder : func () * v4Converged.Client {
2028+ mockctrl := gomock .NewController (t )
2029+ convergedClient := NewMockConvergedClient (mockctrl )
2030+ return convergedClient .Client
2031+ },
2032+ vmId : "" ,
2033+ want : "" ,
2034+ wantErr : true ,
2035+ errorMessage : "cannot extract task uuid for empty vm id" ,
2036+ },
2037+ {
2038+ name : "successful task UUID retrieval with running task" ,
2039+ clientBuilder : func () * v4Converged.Client {
2040+ mockctrl := gomock .NewController (t )
2041+ convergedClient := NewMockConvergedClient (mockctrl )
2042+ taskUUID := "ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d58f"
2043+ tasks := []prismModels.Task {
2044+ {
2045+ ExtId : ptr .To (taskUUID ),
2046+ },
2047+ }
2048+ convergedClient .MockTasks .EXPECT ().List (gomock .Any (), gomock .Any ()).Return (tasks , nil )
2049+ return convergedClient .Client
2050+ },
2051+ vmId : "vm-uuid-456" ,
2052+ want : "ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d58f" ,
2053+ wantErr : false ,
2054+ },
2055+ {
2056+ name : "no running tasks returns empty string" ,
2057+ clientBuilder : func () * v4Converged.Client {
2058+ mockctrl := gomock .NewController (t )
2059+ convergedClient := NewMockConvergedClient (mockctrl )
2060+ tasks := []prismModels.Task {}
2061+ convergedClient .MockTasks .EXPECT ().List (gomock .Any (), gomock .Any ()).Return (tasks , nil )
2062+ return convergedClient .Client
2063+ },
2064+ vmId : "vm-uuid-456" ,
2065+ want : "" ,
2066+ wantErr : false ,
2067+ },
2068+ {
2069+ name : "multiple running tasks returns first task UUID" ,
2070+ clientBuilder : func () * v4Converged.Client {
2071+ mockctrl := gomock .NewController (t )
2072+ convergedClient := NewMockConvergedClient (mockctrl )
2073+ tasks := []prismModels.Task {
2074+ {
2075+ ExtId : ptr .To ("ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d58f" ),
2076+ },
2077+ {
2078+ ExtId : ptr .To ("ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d590" ),
2079+ },
2080+ }
2081+ convergedClient .MockTasks .EXPECT ().List (gomock .Any (), gomock .Any ()).Return (tasks , nil )
2082+ return convergedClient .Client
2083+ },
2084+ vmId : "vm-uuid-456" ,
2085+ want : "ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d58f" ,
2086+ wantErr : false ,
2087+ },
2088+ {
2089+ name : "API error returns error" ,
2090+ clientBuilder : func () * v4Converged.Client {
2091+ mockctrl := gomock .NewController (t )
2092+ convergedClient := NewMockConvergedClient (mockctrl )
2093+ convergedClient .MockTasks .EXPECT ().List (gomock .Any (), gomock .Any ()).Return (nil , errors .New ("API connection failed" ))
2094+ return convergedClient .Client
2095+ },
2096+ vmId : "vm-uuid-456" ,
2097+ want : "" ,
2098+ wantErr : true ,
2099+ errorMessage : "API connection failed" ,
2100+ },
2101+ }
2102+
2103+ for _ , tt := range tests {
2104+ t .Run (tt .name , func (t * testing.T ) {
2105+ t .Log ("Running test case " , tt .name )
2106+ ctx := context .Background ()
2107+ got , err := GetTaskUUIDFromVM (ctx , tt .clientBuilder (), tt .vmId )
2108+ if (err != nil ) != tt .wantErr {
2109+ t .Errorf ("GetTaskUUIDFromVM() error = %v, wantErr %v" , err , tt .wantErr )
2110+ return
2111+ }
2112+ if got != tt .want {
2113+ t .Errorf ("GetTaskUUIDFromVM() = %v, want %v" , got , tt .want )
2114+ }
2115+ if tt .errorMessage != "" && err != nil {
2116+ if ! strings .Contains (err .Error (), tt .errorMessage ) {
2117+ t .Errorf ("GetTaskUUIDFromVM() error message = %v, want to contain %v" , err .Error (), tt .errorMessage )
2118+ }
2119+ }
2120+ })
2121+ }
2122+ }
2123+
2124+ func TestHasTaskInProgress (t * testing.T ) {
2125+ tests := []struct {
2126+ name string
2127+ clientBuilder func () * v4Converged.Client
2128+ taskUUID string
2129+ want bool
2130+ wantErr bool
2131+ errorMessage string
2132+ }{
2133+ {
2134+ name : "task succeeded returns false" ,
2135+ clientBuilder : func () * v4Converged.Client {
2136+ mockctrl := gomock .NewController (t )
2137+ convergedClient := NewMockConvergedClient (mockctrl )
2138+ taskStatus := prismModels .TASKSTATUS_SUCCEEDED
2139+ convergedClient .MockTasks .EXPECT ().Get (gomock .Any (), "ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d58f" ).Return (& prismModels.Task {
2140+ Status : & taskStatus ,
2141+ }, nil )
2142+ return convergedClient .Client
2143+ },
2144+ taskUUID : "ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d58f" ,
2145+ want : false ,
2146+ wantErr : false ,
2147+ },
2148+ {
2149+ name : "task running returns true" ,
2150+ clientBuilder : func () * v4Converged.Client {
2151+ mockctrl := gomock .NewController (t )
2152+ convergedClient := NewMockConvergedClient (mockctrl )
2153+ taskStatus := prismModels .TASKSTATUS_RUNNING
2154+ convergedClient .MockTasks .EXPECT ().Get (gomock .Any (), "ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d58f" ).Return (& prismModels.Task {
2155+ Status : & taskStatus ,
2156+ }, nil )
2157+ return convergedClient .Client
2158+ },
2159+ taskUUID : "ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d58f" ,
2160+ want : true ,
2161+ wantErr : false ,
2162+ },
2163+ {
2164+ name : "task queued returns true" ,
2165+ clientBuilder : func () * v4Converged.Client {
2166+ mockctrl := gomock .NewController (t )
2167+ convergedClient := NewMockConvergedClient (mockctrl )
2168+ taskStatus := prismModels .TASKSTATUS_QUEUED
2169+ convergedClient .MockTasks .EXPECT ().Get (gomock .Any (), "ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d58f" ).Return (& prismModels.Task {
2170+ Status : & taskStatus ,
2171+ }, nil )
2172+ return convergedClient .Client
2173+ },
2174+ taskUUID : "ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d58f" ,
2175+ want : true ,
2176+ wantErr : false ,
2177+ },
2178+ {
2179+ name : "task failed returns false (no error in v4 implementation)" ,
2180+ clientBuilder : func () * v4Converged.Client {
2181+ mockctrl := gomock .NewController (t )
2182+ convergedClient := NewMockConvergedClient (mockctrl )
2183+ taskStatus := prismModels .TASKSTATUS_FAILED
2184+ convergedClient .MockTasks .EXPECT ().Get (gomock .Any (), "ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d58f" ).Return (& prismModels.Task {
2185+ Status : & taskStatus ,
2186+ }, nil )
2187+ return convergedClient .Client
2188+ },
2189+ taskUUID : "ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d58f" ,
2190+ want : false ,
2191+ wantErr : false ,
2192+ },
2193+ {
2194+ name : "task suspended returns false" ,
2195+ clientBuilder : func () * v4Converged.Client {
2196+ mockctrl := gomock .NewController (t )
2197+ convergedClient := NewMockConvergedClient (mockctrl )
2198+ taskStatus := prismModels .TASKSTATUS_SUSPENDED
2199+ convergedClient .MockTasks .EXPECT ().Get (gomock .Any (), "ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d58f" ).Return (& prismModels.Task {
2200+ Status : & taskStatus ,
2201+ }, nil )
2202+ return convergedClient .Client
2203+ },
2204+ taskUUID : "ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d58f" ,
2205+ want : false ,
2206+ wantErr : false ,
2207+ },
2208+ {
2209+ name : "API error returns error" ,
2210+ clientBuilder : func () * v4Converged.Client {
2211+ mockctrl := gomock .NewController (t )
2212+ convergedClient := NewMockConvergedClient (mockctrl )
2213+ convergedClient .MockTasks .EXPECT ().Get (gomock .Any (), "ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d58f" ).Return (nil , errors .New ("API error" ))
2214+ return convergedClient .Client
2215+ },
2216+ taskUUID : "ZXJnb24=:b4b17e07-b81c-43f4-9bf5-62149975d58f" ,
2217+ want : false ,
2218+ wantErr : true ,
2219+ errorMessage : "API error" ,
2220+ },
2221+ }
2222+
2223+ for _ , tt := range tests {
2224+ t .Run (tt .name , func (t * testing.T ) {
2225+ t .Log ("Running test case " , tt .name )
2226+ ctx := context .Background ()
2227+ got , err := HasTaskInProgress (ctx , tt .clientBuilder (), tt .taskUUID )
2228+ if (err != nil ) != tt .wantErr {
2229+ t .Errorf ("HasTaskInProgress() error = %v, wantErr %v" , err , tt .wantErr )
2230+ return
2231+ }
2232+ if got != tt .want {
2233+ t .Errorf ("HasTaskInProgress() = %v, want %v" , got , tt .want )
2234+ }
2235+ if tt .errorMessage != "" && err != nil {
2236+ if ! strings .Contains (err .Error (), tt .errorMessage ) {
2237+ t .Errorf ("HasTaskInProgress() error message = %v, want to contain %v" , err .Error (), tt .errorMessage )
2238+ }
2239+ }
2240+ })
2241+ }
2242+ }
0 commit comments