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 }