github.com/opentofu/opentofu@v1.7.1/internal/helper/slowmessage/slowmessage_test.go (about)

     1  // Copyright (c) The OpenTofu Authors
     2  // SPDX-License-Identifier: MPL-2.0
     3  // Copyright (c) 2023 HashiCorp, Inc.
     4  // SPDX-License-Identifier: MPL-2.0
     5  
     6  package slowmessage
     7  
     8  import (
     9  	"errors"
    10  	"testing"
    11  	"time"
    12  )
    13  
    14  func TestDo(t *testing.T) {
    15  	var sfErr error
    16  	cbCalled := false
    17  	sfCalled := false
    18  	sfSleep := 0 * time.Second
    19  
    20  	reset := func() {
    21  		cbCalled = false
    22  		sfCalled = false
    23  		sfErr = nil
    24  	}
    25  	sf := func() error {
    26  		sfCalled = true
    27  		time.Sleep(sfSleep)
    28  		return sfErr
    29  	}
    30  	cb := func() { cbCalled = true }
    31  
    32  	// SF is not slow
    33  	reset()
    34  	if err := Do(10*time.Millisecond, sf, cb); err != nil {
    35  		t.Fatalf("err: %s", err)
    36  	}
    37  
    38  	if !sfCalled {
    39  		t.Fatal("should call")
    40  	}
    41  	if cbCalled {
    42  		t.Fatal("should not call")
    43  	}
    44  
    45  	// SF is not slow (with error)
    46  	reset()
    47  	sfErr = errors.New("error")
    48  	if err := Do(10*time.Millisecond, sf, cb); err == nil {
    49  		t.Fatalf("err: %s", err)
    50  	}
    51  
    52  	if !sfCalled {
    53  		t.Fatal("should call")
    54  	}
    55  	if cbCalled {
    56  		t.Fatal("should not call")
    57  	}
    58  
    59  	// SF is slow
    60  	reset()
    61  	sfSleep = 50 * time.Millisecond
    62  	if err := Do(10*time.Millisecond, sf, cb); err != nil {
    63  		t.Fatalf("err: %s", err)
    64  	}
    65  
    66  	if !sfCalled {
    67  		t.Fatal("should call")
    68  	}
    69  	if !cbCalled {
    70  		t.Fatal("should call")
    71  	}
    72  
    73  	// SF is slow (with error)
    74  	reset()
    75  	sfErr = errors.New("error")
    76  	sfSleep = 50 * time.Millisecond
    77  	if err := Do(10*time.Millisecond, sf, cb); err == nil {
    78  		t.Fatalf("err: %s", err)
    79  	}
    80  
    81  	if !sfCalled {
    82  		t.Fatal("should call")
    83  	}
    84  	if !cbCalled {
    85  		t.Fatal("should call")
    86  	}
    87  }