github.com/supabase/cli@v1.168.1/test/main_test.go (about)

     1  package integration
     2  
     3  import (
     4  	"log"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/docker/docker/client"
     9  	"github.com/spf13/viper"
    10  	"github.com/supabase/cli/internal/utils"
    11  	"github.com/supabase/cli/test/mocks/docker"
    12  	"github.com/supabase/cli/test/mocks/supabase"
    13  )
    14  
    15  const (
    16  	DockerPort   = ":2375"
    17  	SupabasePort = ":2376"
    18  )
    19  
    20  var (
    21  	TempDir string
    22  )
    23  
    24  var (
    25  	Logger     *log.Logger
    26  	DockerMock *docker.Server
    27  	SupaMock   *supabase.Server
    28  )
    29  
    30  func TestMain(m *testing.M) {
    31  	Logger := log.New(os.Stdout, "", 0)
    32  
    33  	Logger.Println("Global tests setup")
    34  
    35  	DockerMock = newDockerMock(Logger)
    36  	SupaMock = newSupabaseMock(Logger)
    37  	TempDir = NewTempDir(Logger, "")
    38  
    39  	// redirect clients to mock servers
    40  	os.Setenv("DOCKER_HOST", "tcp://127.0.0.1"+DockerPort)
    41  	utils.Docker = utils.NewDocker()
    42  	if err := client.WithVersion(docker.APIVersion)(utils.Docker); err != nil {
    43  		Logger.Fatal(err)
    44  	}
    45  	viper.Set("INTERNAL_API_HOST", "http://127.0.0.1"+SupabasePort)
    46  	os.Setenv("SUPABASE_ACCESS_TOKEN", supabase.AccessToken)
    47  	os.Setenv("HOME", TempDir)
    48  
    49  	// run tests
    50  	exitVal := m.Run()
    51  
    52  	Logger.Println("Global teardown")
    53  	os.RemoveAll(TempDir)
    54  
    55  	// exit process with tests exit code
    56  	os.Exit(exitVal)
    57  }
    58  
    59  func newDockerMock(Logger *log.Logger) *docker.Server {
    60  	dockerMock := docker.NewServer()
    61  	dockerRouter := dockerMock.NewRouter()
    62  	go func() {
    63  		err := dockerRouter.Run(DockerPort)
    64  		if err != nil {
    65  			Logger.Fatal(err)
    66  		}
    67  	}()
    68  
    69  	return dockerMock
    70  }
    71  
    72  func newSupabaseMock(Logger *log.Logger) *supabase.Server {
    73  	supaMock := supabase.NewServer()
    74  	supaRouter := supaMock.NewRouter()
    75  	go func() {
    76  		err := supaRouter.Run(SupabasePort)
    77  		if err != nil {
    78  			Logger.Fatal(err)
    79  		}
    80  	}()
    81  
    82  	return supaMock
    83  }
    84  
    85  func NewTempDir(Logger *log.Logger, baseDir string) string {
    86  	wd := baseDir
    87  	var err error
    88  	if baseDir == "" {
    89  		wd, err = os.Getwd()
    90  	}
    91  	if err != nil {
    92  		Logger.Fatal(err)
    93  	}
    94  	tempDir, err := os.MkdirTemp(wd, "cli-test-")
    95  	if err != nil {
    96  		Logger.Fatal(err)
    97  	}
    98  	err = os.Chdir(tempDir)
    99  	if err != nil {
   100  		Logger.Fatal(err)
   101  	}
   102  	return tempDir
   103  }