github.com/coreos/mantle@v0.13.0/kola/tests/coretest/fleet.go (about) 1 package coretest 2 3 import ( 4 "fmt" 5 "io" 6 "os" 7 "path" 8 "strings" 9 "syscall" 10 "time" 11 12 "github.com/coreos/mantle/util" 13 ) 14 15 const ( 16 serviceData = `[Unit] 17 Description=Hello World 18 [Service] 19 ExecStart=/bin/bash -c "while true; do echo \"Hello, world\"; sleep 1; done" 20 ` 21 ) 22 23 // TestFleetctlRunService tests that fleetctl could start, unload and destroy 24 // unit file. 25 func TestFleetctlRunService() error { 26 serviceName := "hello.service" 27 28 serviceFile, err := os.Create(path.Join(os.TempDir(), serviceName)) 29 if err != nil { 30 return fmt.Errorf("Failed creating %v: %v", serviceName, err) 31 } 32 defer syscall.Unlink(serviceFile.Name()) 33 34 if _, err := io.WriteString(serviceFile, serviceData); err != nil { 35 return fmt.Errorf("Failed writing %v: %v", serviceFile.Name(), err) 36 } 37 38 myid := MachineID() 39 40 fleetChecker := func() error { 41 stdout, stderr, err := Run("fleetctl", "list-machines", "-no-legend", "-l", "-fields", "machine") 42 if err != nil { 43 return fmt.Errorf("fleetctl list-machines failed with error: %v\nstdout: %s\nstderr: %s", err, stdout, stderr) 44 } 45 46 if !strings.Contains(stdout, myid) { 47 return fmt.Errorf("fleetctl list-machines: machine ID %q missing from output\nstdout: %v\nstderr: %v", myid, stdout, stderr) 48 } 49 50 return nil 51 } 52 53 if err := util.Retry(5, 5*time.Second, fleetChecker); err != nil { 54 return err 55 } 56 57 stdout, stderr, err := Run("fleetctl", "start", "-block-attempts", "20", serviceFile.Name()) 58 if err != nil { 59 return fmt.Errorf("fleetctl start failed with error: %v\nstdout: %s\nstderr: %s", err, stdout, stderr) 60 } 61 62 stdout, stderr, err = Run("fleetctl", "unload", "-block-attempts", "20", serviceName) 63 if err != nil { 64 return fmt.Errorf("fleetctl unload failed with error: %v\nstdout: %s\nstderr: %s", err, stdout, stderr) 65 } 66 67 stdout, stderr, err = Run("fleetctl", "destroy", serviceName) 68 if err != nil { 69 return fmt.Errorf("fleetctl destroy failed with error: %v\nstdout: %s\nstderr: %s", err, stdout, stderr) 70 } 71 72 return nil 73 }