github.com/richardbowden/terraform@v0.6.12-0.20160901200758-30ea22c25211/helper/resource/wait_test.go (about)

     1  package resource
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  	"time"
     7  )
     8  
     9  func TestRetry(t *testing.T) {
    10  	t.Parallel()
    11  
    12  	tries := 0
    13  	f := func() *RetryError {
    14  		tries++
    15  		if tries == 3 {
    16  			return nil
    17  		}
    18  
    19  		return RetryableError(fmt.Errorf("error"))
    20  	}
    21  
    22  	err := Retry(10*time.Second, f)
    23  	if err != nil {
    24  		t.Fatalf("err: %s", err)
    25  	}
    26  }
    27  
    28  func TestRetry_timeout(t *testing.T) {
    29  	t.Parallel()
    30  
    31  	f := func() *RetryError {
    32  		return RetryableError(fmt.Errorf("always"))
    33  	}
    34  
    35  	err := Retry(1*time.Second, f)
    36  	if err == nil {
    37  		t.Fatal("should error")
    38  	}
    39  }
    40  
    41  func TestRetry_hang(t *testing.T) {
    42  	t.Parallel()
    43  
    44  	f := func() *RetryError {
    45  		time.Sleep(2 * time.Second)
    46  		return nil
    47  	}
    48  
    49  	err := Retry(1*time.Second, f)
    50  	if err == nil {
    51  		t.Fatal("should error")
    52  	}
    53  }
    54  
    55  func TestRetry_error(t *testing.T) {
    56  	t.Parallel()
    57  
    58  	expected := fmt.Errorf("nope")
    59  	f := func() *RetryError {
    60  		return NonRetryableError(expected)
    61  	}
    62  
    63  	errCh := make(chan error)
    64  	go func() {
    65  		errCh <- Retry(1*time.Second, f)
    66  	}()
    67  
    68  	select {
    69  	case err := <-errCh:
    70  		if err != expected {
    71  			t.Fatalf("bad: %#v", err)
    72  		}
    73  	case <-time.After(5 * time.Second):
    74  		t.Fatal("timeout")
    75  	}
    76  }