github.com/Redstoneguy129/cli@v0.0.0-20230211220159-15dca4e91917/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/Redstoneguy129/cli/internal/utils" 11 "github.com/Redstoneguy129/cli/test/mocks/docker" 12 "github.com/Redstoneguy129/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 err := client.WithHost("tcp://127.0.0.1" + DockerPort)(utils.Docker) 41 if err != nil { 42 Logger.Fatal(err) 43 } 44 viper.Set("INTERNAL_API_HOST", "http://127.0.0.1"+SupabasePort) 45 os.Setenv("SUPABASE_ACCESS_TOKEN", supabase.AccessToken) 46 os.Setenv("HOME", TempDir) 47 48 // run tests 49 exitVal := m.Run() 50 51 Logger.Println("Global teardown") 52 os.RemoveAll(TempDir) 53 54 // exit process with tests exit code 55 os.Exit(exitVal) 56 } 57 58 func newDockerMock(Logger *log.Logger) *docker.Server { 59 dockerMock := docker.NewServer() 60 dockerRouter := dockerMock.NewRouter() 61 go func() { 62 err := dockerRouter.Run(DockerPort) 63 if err != nil { 64 Logger.Fatal(err) 65 } 66 }() 67 68 return dockerMock 69 } 70 71 func newSupabaseMock(Logger *log.Logger) *supabase.Server { 72 supaMock := supabase.NewServer() 73 supaRouter := supaMock.NewRouter() 74 go func() { 75 err := supaRouter.Run(SupabasePort) 76 if err != nil { 77 Logger.Fatal(err) 78 } 79 }() 80 81 return supaMock 82 } 83 84 func NewTempDir(Logger *log.Logger, baseDir string) string { 85 wd := baseDir 86 var err error 87 if baseDir == "" { 88 wd, err = os.Getwd() 89 } 90 if err != nil { 91 Logger.Fatal(err) 92 } 93 tempDir, err := os.MkdirTemp(wd, "cli-test-") 94 if err != nil { 95 Logger.Fatal(err) 96 } 97 err = os.Chdir(tempDir) 98 if err != nil { 99 Logger.Fatal(err) 100 } 101 return tempDir 102 }