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 }