github.com/safing/portbase@v0.19.5/template/module_test.go (about)

     1  package template
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"testing"
     7  
     8  	_ "github.com/safing/portbase/database/dbmodule"
     9  	"github.com/safing/portbase/dataroot"
    10  	"github.com/safing/portbase/modules"
    11  )
    12  
    13  func TestMain(m *testing.M) {
    14  	// register base module, for database initialization
    15  	modules.Register("base", nil, nil, nil)
    16  
    17  	// enable module for testing
    18  	module.Enable()
    19  
    20  	// tmp dir for data root (db & config)
    21  	tmpDir, err := os.MkdirTemp("", "portbase-testing-")
    22  	if err != nil {
    23  		fmt.Fprintf(os.Stderr, "failed to create tmp dir: %s\n", err)
    24  		os.Exit(1)
    25  	}
    26  	// initialize data dir
    27  	err = dataroot.Initialize(tmpDir, 0o0755)
    28  	if err != nil {
    29  		fmt.Fprintf(os.Stderr, "failed to initialize data root: %s\n", err)
    30  		os.Exit(1)
    31  	}
    32  
    33  	// start modules
    34  	var exitCode int
    35  	err = modules.Start()
    36  	if err != nil {
    37  		// starting failed
    38  		fmt.Fprintf(os.Stderr, "failed to setup test: %s\n", err)
    39  		exitCode = 1
    40  	} else {
    41  		// run tests
    42  		exitCode = m.Run()
    43  	}
    44  
    45  	// shutdown
    46  	_ = modules.Shutdown()
    47  	if modules.GetExitStatusCode() != 0 {
    48  		exitCode = modules.GetExitStatusCode()
    49  		fmt.Fprintf(os.Stderr, "failed to cleanly shutdown test: %s\n", err)
    50  	}
    51  	// clean up and exit
    52  	_ = os.RemoveAll(tmpDir)
    53  	os.Exit(exitCode)
    54  }