github.com/kardianos/nomad@v0.1.3-0.20151022182107-b13df73ee850/nomad/util_test.go (about)

     1  package nomad
     2  
     3  import (
     4  	"net"
     5  	"reflect"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/hashicorp/nomad/nomad/structs"
    10  	"github.com/hashicorp/serf/serf"
    11  )
    12  
    13  func TestIsNomadServer(t *testing.T) {
    14  	m := serf.Member{
    15  		Name: "foo",
    16  		Addr: net.IP([]byte{127, 0, 0, 1}),
    17  		Tags: map[string]string{
    18  			"role":   "nomad",
    19  			"region": "aws",
    20  			"dc":     "east-aws",
    21  			"port":   "10000",
    22  			"vsn":    "1",
    23  		},
    24  	}
    25  	valid, parts := isNomadServer(m)
    26  	if !valid || parts.Region != "aws" ||
    27  		parts.Datacenter != "east-aws" || parts.Port != 10000 {
    28  		t.Fatalf("bad: %v %v", valid, parts)
    29  	}
    30  	if parts.Name != "foo" {
    31  		t.Fatalf("bad: %v", parts)
    32  	}
    33  	if parts.Bootstrap {
    34  		t.Fatalf("unexpected bootstrap")
    35  	}
    36  	if parts.Expect != 0 {
    37  		t.Fatalf("bad: %v", parts.Expect)
    38  	}
    39  
    40  	m.Tags["bootstrap"] = "1"
    41  	valid, parts = isNomadServer(m)
    42  	if !valid || !parts.Bootstrap {
    43  		t.Fatalf("expected bootstrap")
    44  	}
    45  	if parts.Addr.String() != "127.0.0.1:10000" {
    46  		t.Fatalf("bad addr: %v", parts.Addr)
    47  	}
    48  	if parts.Version != 1 {
    49  		t.Fatalf("bad: %v", parts)
    50  	}
    51  
    52  	m.Tags["expect"] = "3"
    53  	delete(m.Tags, "bootstrap")
    54  	valid, parts = isNomadServer(m)
    55  	if !valid || parts.Expect != 3 {
    56  		t.Fatalf("bad: %v", parts.Expect)
    57  	}
    58  }
    59  
    60  func TestRandomStagger(t *testing.T) {
    61  	intv := time.Minute
    62  	for i := 0; i < 10; i++ {
    63  		stagger := randomStagger(intv)
    64  		if stagger < 0 || stagger >= intv {
    65  			t.Fatalf("Bad: %v", stagger)
    66  		}
    67  	}
    68  }
    69  
    70  func TestShuffleStrings(t *testing.T) {
    71  	// Generate input
    72  	inp := make([]string, 10)
    73  	for idx := range inp {
    74  		inp[idx] = structs.GenerateUUID()
    75  	}
    76  
    77  	// Copy the input
    78  	orig := make([]string, len(inp))
    79  	copy(orig, inp)
    80  
    81  	// Shuffle
    82  	shuffleStrings(inp)
    83  
    84  	// Ensure order is not the same
    85  	if reflect.DeepEqual(inp, orig) {
    86  		t.Fatalf("shuffle failed")
    87  	}
    88  }
    89  
    90  func TestMaxUint64(t *testing.T) {
    91  	if maxUint64(1, 2) != 2 {
    92  		t.Fatalf("bad")
    93  	}
    94  	if maxUint64(2, 2) != 2 {
    95  		t.Fatalf("bad")
    96  	}
    97  	if maxUint64(2, 1) != 2 {
    98  		t.Fatalf("bad")
    99  	}
   100  }
   101  
   102  func TestRateScaledInterval(t *testing.T) {
   103  	min := 1 * time.Second
   104  	rate := 200.0
   105  	if v := rateScaledInterval(rate, min, 0); v != min {
   106  		t.Fatalf("Bad: %v", v)
   107  	}
   108  	if v := rateScaledInterval(rate, min, 100); v != min {
   109  		t.Fatalf("Bad: %v", v)
   110  	}
   111  	if v := rateScaledInterval(rate, min, 200); v != 1*time.Second {
   112  		t.Fatalf("Bad: %v", v)
   113  	}
   114  	if v := rateScaledInterval(rate, min, 1000); v != 5*time.Second {
   115  		t.Fatalf("Bad: %v", v)
   116  	}
   117  	if v := rateScaledInterval(rate, min, 5000); v != 25*time.Second {
   118  		t.Fatalf("Bad: %v", v)
   119  	}
   120  	if v := rateScaledInterval(rate, min, 10000); v != 50*time.Second {
   121  		t.Fatalf("Bad: %v", v)
   122  	}
   123  }