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  }