github.com/onflow/flow-go@v0.35.7-crescendo-preview.23-atree-inlining/utils/unittest/unittest_test.go (about)

     1  package unittest
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"testing"
     7  )
     8  
     9  // TestCrashTest_ErrorMessage tests that CrashTest() can check a function that crashed without any messages.
    10  func TestCrashTest_NoMessage(t *testing.T) {
    11  	f := func(t *testing.T) {
    12  		crash_NoMessage()
    13  	}
    14  
    15  	CrashTest(t, f, "")
    16  }
    17  
    18  // TestCrashTest_ErrorMessage tests that CrashTest() can read standard messages from stdout before a crash.
    19  func TestCrashTest_ErrorMessage(t *testing.T) {
    20  	f := func(t *testing.T) {
    21  		crash_ErrorMessage()
    22  	}
    23  	CrashTest(t, f, "about to crash")
    24  }
    25  
    26  // TestCrashTest_ExitCode tests that CrashTest() catches exit codes other than 1.
    27  func TestCrashTest_ExitCode(t *testing.T) {
    28  	f := func(t *testing.T) {
    29  		crash_ExitCode2()
    30  	}
    31  	CrashTestWithExpectedStatus(t, f, "exit code == 2", 2)
    32  }
    33  
    34  // TestCrashTest_ExitCodeExplicit tests that CrashTest() catches exit codes other than 1 w/ an explicit exit code.
    35  func TestCrashTest_ExitCodeExplicit(t *testing.T) {
    36  	f := func(t *testing.T) {
    37  		crash_ExitCode2()
    38  	}
    39  	CrashTestWithExpectedStatus(t, f, "exit code == 2", 4, 3, 2)
    40  }
    41  
    42  // TestCrashTest_Logger tests that CrashTest() can read fatal logger messages from stdout before a crash. This test
    43  // assumes that the logger uses a hook to send fatal messages to stdout.
    44  func TestCrashTest_Logger(t *testing.T) {
    45  	f := func(t *testing.T) {
    46  		crash_LoggerFatal()
    47  	}
    48  	CrashTest(t, f, "fatal crash from logger")
    49  }
    50  
    51  func crash_NoMessage() {
    52  	os.Exit(1)
    53  }
    54  
    55  func crash_ErrorMessage() {
    56  	fmt.Println("about to crash... crashing in 3...2...1...")
    57  	os.Exit(1)
    58  }
    59  
    60  func crash_ExitCode2() {
    61  	fmt.Println("crashing with a exit code == 2")
    62  	os.Exit(2)
    63  }
    64  
    65  func crash_LoggerFatal() {
    66  	// hook sends fatal messages to stdout, so they can be checked by CrashTest()
    67  	logger, _ := HookedLogger()
    68  
    69  	// calling Fatal() causes the process to exit
    70  	logger.Fatal().Msg("fatal crash from logger... crashing in 3...2...1...")
    71  }