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 }