@@ -19,6 +19,7 @@ import (
1919 "errors"
2020 "flag"
2121 "fmt"
22+ "github.com/vishvananda/netns"
2223 "io"
2324 "io/ioutil"
2425 "net"
@@ -799,6 +800,71 @@ func testStopVMM(ctx context.Context, t *testing.T, m *Machine) {
799800 }
800801}
801802
803+ func TestStopVMMCleanup (t * testing.T ) {
804+ fctesting .RequiresKVM (t )
805+ fctesting .RequiresRoot (t )
806+
807+ socketPath , cleanup := makeSocketPath (t )
808+ defer cleanup ()
809+
810+ dir , err := ioutil .TempDir ("" , t .Name ())
811+ require .NoError (t , err )
812+ defer os .RemoveAll (dir )
813+
814+ cniConfDir := filepath .Join (dir , "cni.conf" )
815+ err = os .MkdirAll (cniConfDir , 0777 )
816+ require .NoError (t , err )
817+
818+ cniBinPath := []string {testDataBin }
819+
820+ const networkName = "fcnet"
821+ const ifName = "veth0"
822+
823+ networkMask := "/24"
824+ subnet := "10.168.0.0" + networkMask
825+
826+ cniConfPath := fmt .Sprintf ("%s/%s.conflist" , cniConfDir , networkName )
827+ err = writeCNIConfWithHostLocalSubnet (cniConfPath , networkName , subnet )
828+ require .NoError (t , err )
829+ defer os .Remove (cniConfPath )
830+
831+ networkInterface := NetworkInterface {
832+ CNIConfiguration : & CNIConfiguration {
833+ NetworkName : networkName ,
834+ IfName : ifName ,
835+ ConfDir : cniConfDir ,
836+ BinPath : cniBinPath ,
837+ VMIfName : "eth0" ,
838+ },
839+ }
840+
841+ cfg := Config {
842+ SocketPath : socketPath ,
843+ DisableValidation : true ,
844+ KernelImagePath : getVmlinuxPath (t ),
845+ NetworkInterfaces : []NetworkInterface {networkInterface },
846+ MachineCfg : models.MachineConfiguration {
847+ VcpuCount : Int64 (1 ),
848+ MemSizeMib : Int64 (64 ),
849+ CPUTemplate : models .CPUTemplate (models .CPUTemplateT2 ),
850+ Smt : Bool (false ),
851+ },
852+ }
853+ ctx := context .Background ()
854+ cmd := VMCommandBuilder {}.
855+ WithSocketPath (cfg .SocketPath ).
856+ WithBin (getFirecrackerBinaryPath ()).
857+ Build (ctx )
858+ m , err := NewMachine (ctx , cfg , WithProcessRunner (cmd ), WithLogger (fctesting .NewLogEntry (t )))
859+ require .NoError (t , err )
860+ err = m .Start (ctx )
861+ require .NoError (t , err )
862+ err = m .stopVMM ()
863+ require .NoError (t , err )
864+ _ , err = netns .GetFromName (m .Cfg .VMID )
865+ require .Error (t , err )
866+ }
867+
802868func testShutdown (ctx context.Context , t * testing.T , m * Machine ) {
803869 err := m .Shutdown (ctx )
804870 if err != nil {
0 commit comments