github.com/paybyphone/terraform@v0.9.5-0.20170613192930-9706042ddd51/terraform/util_test.go (about)

     1  package terraform
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  	"testing"
     7  	"time"
     8  )
     9  
    10  func TestSemaphore(t *testing.T) {
    11  	s := NewSemaphore(2)
    12  	timer := time.AfterFunc(time.Second, func() {
    13  		panic("deadlock")
    14  	})
    15  	defer timer.Stop()
    16  
    17  	s.Acquire()
    18  	if !s.TryAcquire() {
    19  		t.Fatalf("should acquire")
    20  	}
    21  	if s.TryAcquire() {
    22  		t.Fatalf("should not acquire")
    23  	}
    24  	s.Release()
    25  	s.Release()
    26  
    27  	// This release should panic
    28  	defer func() {
    29  		r := recover()
    30  		if r == nil {
    31  			t.Fatalf("should panic")
    32  		}
    33  	}()
    34  	s.Release()
    35  }
    36  
    37  func TestStrSliceContains(t *testing.T) {
    38  	if strSliceContains(nil, "foo") {
    39  		t.Fatalf("Bad")
    40  	}
    41  	if strSliceContains([]string{}, "foo") {
    42  		t.Fatalf("Bad")
    43  	}
    44  	if strSliceContains([]string{"bar"}, "foo") {
    45  		t.Fatalf("Bad")
    46  	}
    47  	if !strSliceContains([]string{"bar", "foo"}, "foo") {
    48  		t.Fatalf("Bad")
    49  	}
    50  }
    51  
    52  func TestUniqueStrings(t *testing.T) {
    53  	cases := []struct {
    54  		Input    []string
    55  		Expected []string
    56  	}{
    57  		{
    58  			[]string{},
    59  			[]string{},
    60  		},
    61  		{
    62  			[]string{"x"},
    63  			[]string{"x"},
    64  		},
    65  		{
    66  			[]string{"a", "b", "c"},
    67  			[]string{"a", "b", "c"},
    68  		},
    69  		{
    70  			[]string{"a", "a", "a"},
    71  			[]string{"a"},
    72  		},
    73  		{
    74  			[]string{"a", "b", "a", "b", "a", "a"},
    75  			[]string{"a", "b"},
    76  		},
    77  		{
    78  			[]string{"c", "b", "a", "c", "b"},
    79  			[]string{"a", "b", "c"},
    80  		},
    81  	}
    82  
    83  	for i, tc := range cases {
    84  		t.Run(fmt.Sprintf("unique-%d", i), func(t *testing.T) {
    85  			actual := uniqueStrings(tc.Input)
    86  			if !reflect.DeepEqual(tc.Expected, actual) {
    87  				t.Fatalf("Expected: %q\nGot: %q", tc.Expected, actual)
    88  			}
    89  		})
    90  	}
    91  }