github.com/spg/deis@v1.7.3/deisctl/backend/fleet/utils_test.go (about)

     1  package fleet
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  	"testing"
     7  
     8  	"github.com/coreos/fleet/machine"
     9  	"github.com/coreos/fleet/schema"
    10  )
    11  
    12  func TestNextComponent(t *testing.T) {
    13  	// test first component
    14  	num, err := nextUnitNum([]string{})
    15  	if err != nil {
    16  		t.Fatal(err)
    17  	}
    18  	if num != 1 {
    19  		t.Fatal("Invalid component number")
    20  	}
    21  	// test next component
    22  	num, err = nextUnitNum([]string{"deis-router@1.service"})
    23  	if err != nil {
    24  		t.Fatal(err)
    25  	}
    26  	if num != 2 {
    27  		t.Fatal("Invalid component number")
    28  	}
    29  	// test last component
    30  	num, err = nextUnitNum([]string{"deis-router@1.service", "deis-router@2.service"})
    31  	if err != nil {
    32  		t.Fatal(err)
    33  	}
    34  	if num != 3 {
    35  		t.Fatal("Invalid component number")
    36  	}
    37  	// test middle component
    38  	num, err = nextUnitNum([]string{"deis-router@3.service"})
    39  	if err != nil {
    40  		t.Fatal(err)
    41  	}
    42  	if num != 1 {
    43  		t.Fatal("Invalid component number")
    44  	}
    45  	num, err = nextUnitNum([]string{"deis-router@1.service", "deis-router@3.service"})
    46  	if err != nil {
    47  		t.Fatal(err)
    48  	}
    49  	if num != 2 {
    50  		t.Fatalf("Invalid component number: %v", num)
    51  	}
    52  	num, err = nextUnitNum([]string{"deis-router@1.service", "deis-router@2.service", "deis-router@3.service"})
    53  	if err != nil {
    54  		t.Fatal(err)
    55  	}
    56  	if num != 4 {
    57  		t.Fatal("Invalid component number")
    58  	}
    59  }
    60  
    61  func TestSplitJobName(t *testing.T) {
    62  	c, num, err := splitJobName("deis-router@1.service")
    63  	if err != nil {
    64  		t.Fatal(err)
    65  	}
    66  	if c != "router" || num != 1 {
    67  		t.Fatalf("Invalid values: %v %v", c, num)
    68  	}
    69  }
    70  
    71  func TestSplitTarget(t *testing.T) {
    72  	c, num, err := splitTarget("router")
    73  	if err != nil {
    74  		t.Fatal(err)
    75  	}
    76  	if c != "router" && num != 0 {
    77  		t.Fatalf("Invalid split on \"%v\": %v %v", "router", c, num)
    78  	}
    79  
    80  	c, num, err = splitTarget("router@3")
    81  	if err != nil {
    82  		t.Fatal(err)
    83  	}
    84  	if c != "router" || num != 3 {
    85  		t.Fatalf("Invalid split on \"%v\": %v %v", "router@3", c, num)
    86  	}
    87  
    88  	c, num, err = splitTarget("store-gateway")
    89  	if err != nil {
    90  		t.Fatal(err)
    91  	}
    92  	if c != "store-gateway" || num != 0 {
    93  		t.Fatalf("Invalid split on \"%v\": %v %v", "store-gateway", c, num)
    94  	}
    95  
    96  }
    97  
    98  type stubFleetClient struct{}
    99  
   100  var (
   101  	testUnits []*schema.Unit
   102  )
   103  
   104  func (c stubFleetClient) Machines() ([]machine.MachineState, error) {
   105  	return []machine.MachineState{}, nil
   106  }
   107  func (c stubFleetClient) Unit(string) (*schema.Unit, error) {
   108  	return nil, nil
   109  }
   110  func (c stubFleetClient) Units() ([]*schema.Unit, error) {
   111  	return testUnits, nil
   112  }
   113  func (c stubFleetClient) UnitStates() ([]*schema.UnitState, error) {
   114  	return []*schema.UnitState{}, nil
   115  }
   116  func (c stubFleetClient) SetUnitTargetState(name, target string) error {
   117  	return fmt.Errorf("SetUnitTargetState not implemented yet.")
   118  }
   119  func (c stubFleetClient) CreateUnit(*schema.Unit) error {
   120  	return fmt.Errorf("CreateUnit not implemented yet.")
   121  }
   122  func (c stubFleetClient) DestroyUnit(string) error {
   123  	return fmt.Errorf("DestroyUnit not implemented yet.")
   124  }
   125  
   126  var fc stubFleetClient
   127  
   128  func TestExpandTargets(t *testing.T) {
   129  	testUnits = []*schema.Unit{
   130  		&schema.Unit{
   131  			Name: "deis-router@1.service",
   132  		},
   133  		&schema.Unit{
   134  			Name: "deis-router@2.service",
   135  		},
   136  		&schema.Unit{
   137  			Name: "deis-store-gateway@1.service",
   138  		},
   139  		&schema.Unit{
   140  			Name: "deis-store-gateway@2.service",
   141  		},
   142  		&schema.Unit{
   143  			Name: "deis-controller.service",
   144  		},
   145  		&schema.Unit{
   146  			Name: "deis-registry@1.service",
   147  		},
   148  		&schema.Unit{
   149  			Name: "registry_v2.cmd.1.service",
   150  		},
   151  	}
   152  	c := &FleetClient{Fleet: fc}
   153  
   154  	targets := []string{"router@*", "deis-store-gateway@1", "deis-controller", "registry@*"}
   155  	expandedTargets, err := expandTargets(c, targets)
   156  	if err != nil {
   157  		t.Fatal(err)
   158  	}
   159  	expectedTargets := []string{
   160  		"deis-router@1.service",
   161  		"deis-router@2.service",
   162  		"deis-store-gateway@1",
   163  		"deis-controller",
   164  		"deis-registry@1.service",
   165  	}
   166  	if !reflect.DeepEqual(expandedTargets, expectedTargets) {
   167  		t.Fatal(expandedTargets)
   168  	}
   169  }