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