@@ -2032,6 +2032,93 @@ func TestCreateVM_Isolated(t *testing.T) {
2032
2032
}
2033
2033
}
2034
2034
2035
+ func TestPauseResumeVM_Isolated (t * testing.T ) {
2036
+ prepareIntegTest (t )
2037
+ client , err := containerd .New (containerdSockPath , containerd .WithDefaultRuntime (firecrackerRuntime ))
2038
+ require .NoError (t , err , "unable to create client to containerd service at %s, is containerd running?" , containerdSockPath )
2039
+ defer client .Close ()
2040
+
2041
+ ctx := namespaces .WithNamespace (context .Background (), "default" )
2042
+
2043
+ pluginClient , err := ttrpcutil .NewClient (containerdSockPath + ".ttrpc" )
2044
+ require .NoError (t , err , "failed to create ttrpc client" )
2045
+
2046
+ fcClient := fccontrol .NewFirecrackerClient (pluginClient .Client ())
2047
+
2048
+ type subtest struct {
2049
+ name string
2050
+ request proto.CreateVMRequest
2051
+ validate func (* testing.T , error )
2052
+ stopVM bool
2053
+ }
2054
+
2055
+ subtests := []subtest {
2056
+ {
2057
+ name : "Happy Case" ,
2058
+ request : proto.CreateVMRequest {},
2059
+ validate : func (t * testing.T , err error ) {
2060
+ require .NoError (t , err )
2061
+ },
2062
+ stopVM : true ,
2063
+ },
2064
+ }
2065
+
2066
+ runTest := func (t * testing.T , request proto.CreateVMRequest , s subtest ) {
2067
+ vmID := testNameToVMID (t .Name ())
2068
+
2069
+ tempDir , err := ioutil .TempDir ("" , vmID )
2070
+ require .NoError (t , err )
2071
+ defer os .RemoveAll (tempDir )
2072
+
2073
+ logFile := filepath .Join (tempDir , "log.fifo" )
2074
+ metricsFile := filepath .Join (tempDir , "metrics.fifo" )
2075
+
2076
+ request .VMID = vmID
2077
+ request .LogFifoPath = logFile
2078
+ request .MetricsFifoPath = metricsFile
2079
+
2080
+ resp , createVMErr := fcClient .CreateVM (ctx , & request )
2081
+
2082
+ // Even CreateVM fails, the log file and the metrics file must have some data.
2083
+ requireNonEmptyFifo (t , logFile )
2084
+ requireNonEmptyFifo (t , metricsFile )
2085
+
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 )
2091
+
2092
+ _ , errResume := fcClient .ResumeVM (ctx , & proto.ResumeVMRequest {VMID : request .VMID })
2093
+ require .NoError (t , errResume )
2094
+
2095
+ if createVMErr == nil && s .stopVM {
2096
+ // Ensure the response fields are populated correctly
2097
+ assert .Equal (t , request .VMID , resp .VMID )
2098
+
2099
+ _ , err = fcClient .StopVM (ctx , & proto.StopVMRequest {VMID : request .VMID })
2100
+ require .Equal (t , status .Code (err ), codes .OK )
2101
+ }
2102
+ }
2103
+
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 )
2109
+ })
2110
+
2111
+ requestWithJailer := s .request
2112
+ requestWithJailer .JailerConfig = & proto.JailerConfig {
2113
+ UID : 30000 ,
2114
+ GID : 30000 ,
2115
+ }
2116
+ t .Run (s .name + "/Jailer" , func (t * testing.T ) {
2117
+ runTest (t , requestWithJailer , s )
2118
+ })
2119
+ }
2120
+ }
2121
+
2035
2122
func TestAttach_Isolated (t * testing.T ) {
2036
2123
prepareIntegTest (t )
2037
2124
0 commit comments