@@ -2032,8 +2032,9 @@ func TestCreateVM_Isolated(t *testing.T) {
2032
2032
}
2033
2033
}
2034
2034
2035
- func TestPauseResumeVM_Isolated (t * testing.T ) {
2035
+ func TestPauseResume (t * testing.T ) {
2036
2036
prepareIntegTest (t )
2037
+
2037
2038
client , err := containerd .New (containerdSockPath , containerd .WithDefaultRuntime (firecrackerRuntime ))
2038
2039
require .NoError (t , err , "unable to create client to containerd service at %s, is containerd running?" , containerdSockPath )
2039
2040
defer client .Close ()
@@ -2045,25 +2046,74 @@ func TestPauseResumeVM_Isolated(t *testing.T) {
2045
2046
2046
2047
fcClient := fccontrol .NewFirecrackerClient (pluginClient .Client ())
2047
2048
2048
- type subtest struct {
2049
- name string
2050
- request proto.CreateVMRequest
2051
- validate func (* testing.T , error )
2052
- stopVM bool
2053
- }
2049
+ subtests := []struct {
2050
+ name string
2051
+ request * proto.CreateVMRequest
2052
+ state func (ctx context.Context , resp * proto.CreateVMResponse )
2053
+ }{
2054
+ {
2055
+ name : "PauseVM" ,
2056
+ request : & proto.CreateVMRequest {},
2057
+ state : func (ctx context.Context , resp * proto.CreateVMResponse ) {
2058
+ _ , err := fcClient .PauseVM (ctx , & proto.PauseVMRequest {VMID : resp .VMID })
2059
+ require .NoError (t , err )
2060
+ },
2061
+ },
2062
+ {
2063
+ name : "ResumeVM" ,
2064
+ request : & proto.CreateVMRequest {},
2065
+ state : func (ctx context.Context , resp * proto.CreateVMResponse ) {
2066
+ _ , err := fcClient .ResumeVM (ctx , & proto.ResumeVMRequest {VMID : resp .VMID })
2067
+ require .NoError (t , err )
2068
+ },
2069
+ },
2070
+ {
2071
+ name : "Consecutive PauseVM" ,
2072
+ request : & proto.CreateVMRequest {},
2073
+ state : func (ctx context.Context , resp * proto.CreateVMResponse ) {
2074
+ _ , err := fcClient .PauseVM (ctx , & proto.PauseVMRequest {VMID : resp .VMID })
2075
+ require .NoError (t , err )
2054
2076
2055
- subtests := []subtest {
2077
+ _ , err = fcClient .PauseVM (ctx , & proto.PauseVMRequest {VMID : resp .VMID })
2078
+ require .NoError (t , err )
2079
+ },
2080
+ },
2056
2081
{
2057
- name : "Happy Case" ,
2058
- request : proto.CreateVMRequest {},
2059
- validate : func (t * testing.T , err error ) {
2082
+ name : "Consecutive ResumeVM" ,
2083
+ request : & proto.CreateVMRequest {},
2084
+ state : func (ctx context.Context , resp * proto.CreateVMResponse ) {
2085
+ _ , err := fcClient .ResumeVM (ctx , & proto.ResumeVMRequest {VMID : resp .VMID })
2086
+ require .NoError (t , err )
2087
+
2088
+ _ , err = fcClient .ResumeVM (ctx , & proto.ResumeVMRequest {VMID : resp .VMID })
2089
+ require .NoError (t , err )
2090
+ },
2091
+ },
2092
+ {
2093
+ name : "PauseResume" ,
2094
+ request : & proto.CreateVMRequest {},
2095
+ state : func (ctx context.Context , resp * proto.CreateVMResponse ) {
2096
+ _ , err := fcClient .PauseVM (ctx , & proto.PauseVMRequest {VMID : resp .VMID })
2097
+ require .NoError (t , err )
2098
+
2099
+ _ , err = fcClient .ResumeVM (ctx , & proto.ResumeVMRequest {VMID : resp .VMID })
2100
+ require .NoError (t , err )
2101
+ },
2102
+ },
2103
+ {
2104
+ name : "ResumePause" ,
2105
+ request : & proto.CreateVMRequest {},
2106
+ state : func (ctx context.Context , resp * proto.CreateVMResponse ) {
2107
+ _ , err := fcClient .ResumeVM (ctx , & proto.ResumeVMRequest {VMID : resp .VMID })
2108
+ require .NoError (t , err )
2109
+
2110
+ _ , err = fcClient .PauseVM (ctx , & proto.PauseVMRequest {VMID : resp .VMID })
2060
2111
require .NoError (t , err )
2061
2112
},
2062
- stopVM : true ,
2063
2113
},
2064
2114
}
2065
2115
2066
- runTest := func (t * testing.T , request proto.CreateVMRequest , s subtest ) {
2116
+ runTest := func (t * testing.T , request * proto.CreateVMRequest , state func ( ctx context. Context , resp * proto. CreateVMResponse ) ) {
2067
2117
vmID := testNameToVMID (t .Name ())
2068
2118
2069
2119
tempDir , err := ioutil .TempDir ("" , vmID )
@@ -2077,48 +2127,43 @@ func TestPauseResumeVM_Isolated(t *testing.T) {
2077
2127
request .LogFifoPath = logFile
2078
2128
request .MetricsFifoPath = metricsFile
2079
2129
2080
- resp , createVMErr := fcClient .CreateVM (ctx , & request )
2130
+ resp , createVMErr := fcClient .CreateVM (ctx , request )
2081
2131
2082
2132
// Even CreateVM fails, the log file and the metrics file must have some data.
2083
2133
requireNonEmptyFifo (t , logFile )
2084
2134
requireNonEmptyFifo (t , metricsFile )
2085
2135
2086
- // Some test cases are expected to have an error, some are not.
2087
- s .validate (t , createVMErr )
2088
-
2089
- _ , errPause := fcClient .PauseVM (ctx , & proto.PauseVMRequest {VMID : request .VMID })
2090
- require .NoError (t , errPause )
2136
+ // Run test case
2137
+ state (ctx , resp )
2091
2138
2092
- _ , errResume := fcClient .ResumeVM (ctx , & proto.ResumeVMRequest {VMID : request .VMID })
2093
- require .NoError (t , errResume )
2139
+ // No VM to stop.
2140
+ if createVMErr != nil {
2141
+ return
2142
+ }
2094
2143
2095
- if createVMErr == nil && s .stopVM {
2096
- // Ensure the response fields are populated correctly
2097
- assert .Equal (t , request .VMID , resp .VMID )
2144
+ // Ensure the response fields are populated correctly
2145
+ assert .Equal (t , request .VMID , resp .VMID )
2098
2146
2099
- _ , err = fcClient .StopVM (ctx , & proto.StopVMRequest {VMID : request .VMID })
2100
- require .Equal (t , status .Code (err ), codes .OK )
2101
- }
2147
+ _ , err = fcClient .StopVM (ctx , & proto.StopVMRequest {VMID : request .VMID })
2148
+ require .Equal (t , status .Code (err ), codes .OK )
2102
2149
}
2103
2150
2104
- for _ , _s := range subtests {
2105
- s := _s
2106
- request := s .request
2107
- t .Run (s .name , func (t * testing.T ) {
2108
- runTest (t , request , s )
2151
+ for _ , subtest := range subtests {
2152
+ state := subtest .state
2153
+ t .Run (subtest .name , func (t * testing.T ) {
2154
+ runTest (t , subtest .request , state )
2109
2155
})
2110
2156
2111
- requestWithJailer := s .request
2157
+ requestWithJailer := subtest .request
2112
2158
requestWithJailer .JailerConfig = & proto.JailerConfig {
2113
2159
UID : 30000 ,
2114
2160
GID : 30000 ,
2115
2161
}
2116
- t .Run (s .name + "/Jailer" , func (t * testing.T ) {
2117
- runTest (t , requestWithJailer , s )
2162
+ t .Run (subtest .name + "/Jailer" , func (t * testing.T ) {
2163
+ runTest (t , requestWithJailer , state )
2118
2164
})
2119
2165
}
2120
2166
}
2121
-
2122
2167
func TestAttach_Isolated (t * testing.T ) {
2123
2168
prepareIntegTest (t )
2124
2169
0 commit comments