github.com/smithx10/nomad@v0.9.1-rc1/e2e/framework/case.go (about)

     1  package framework
     2  
     3  import (
     4  	"fmt"
     5  
     6  	capi "github.com/hashicorp/consul/api"
     7  	"github.com/hashicorp/nomad/api"
     8  )
     9  
    10  // TestSuite defines a set of test cases and under what conditions to run them
    11  type TestSuite struct {
    12  	Component string // Name of the component/system/feature tested
    13  
    14  	CanRunLocal bool        // Flags if the cases are safe to run on a local nomad cluster
    15  	Cases       []TestCase  // Cases to run
    16  	Constraints Constraints // Environment constraints to follow
    17  	Parallel    bool        // If true, will run test cases in parallel
    18  	Slow        bool        // Slow test suites don't run by default
    19  
    20  	// API Clients
    21  	Consul bool
    22  	Vault  bool
    23  }
    24  
    25  // Constraints that must be satisfied for a TestSuite to run
    26  type Constraints struct {
    27  	Provider    string   // Cloud provider ex. 'aws', 'azure', 'gcp'
    28  	OS          string   // Operating system ex. 'windows', 'linux'
    29  	Arch        string   // CPU architecture ex. 'amd64', 'arm64'
    30  	Environment string   // Environment name ex. 'simple'
    31  	Tags        []string // Generic tags that must all exist in the environment
    32  }
    33  
    34  func (c Constraints) matches(env Environment) error {
    35  	if len(c.Provider) != 0 && c.Provider != env.Provider {
    36  		return fmt.Errorf("provider constraint does not match environment")
    37  	}
    38  
    39  	if len(c.OS) != 0 && c.OS != env.OS {
    40  		return fmt.Errorf("os constraint does not match environment")
    41  	}
    42  
    43  	if len(c.Arch) != 0 && c.Arch != env.Arch {
    44  		return fmt.Errorf("arch constraint does not match environment")
    45  	}
    46  
    47  	if len(c.Environment) != 0 && c.Environment != env.Name {
    48  		return fmt.Errorf("environment constraint does not match environment name")
    49  	}
    50  
    51  	for _, t := range c.Tags {
    52  		if _, ok := env.Tags[t]; !ok {
    53  			return fmt.Errorf("tags constraint failed, tag '%s' is not included in environment", t)
    54  		}
    55  	}
    56  	return nil
    57  }
    58  
    59  // TC is the base test case which should be embedded in TestCase implementations.
    60  type TC struct {
    61  	cluster *ClusterInfo
    62  }
    63  
    64  // Nomad returns a configured nomad api client
    65  func (tc *TC) Nomad() *api.Client {
    66  	return tc.cluster.NomadClient
    67  }
    68  
    69  // Consul returns a configured consul api client
    70  func (tc *TC) Consul() *capi.Client {
    71  	return tc.cluster.ConsulClient
    72  }
    73  
    74  // Name returns the name of the test case which is set to the name of the
    75  // implementing type.
    76  func (tc *TC) Name() string {
    77  	return tc.cluster.Name
    78  }
    79  
    80  func (tc *TC) setClusterInfo(info *ClusterInfo) {
    81  	tc.cluster = info
    82  }