wal-g
120 строк · 2.6 Кб
1package functests
2
3import (
4"os"
5"testing"
6
7"github.com/cucumber/godog"
8"github.com/cucumber/godog/colors"
9"github.com/spf13/pflag"
10"github.com/wal-g/tracelog"
11"github.com/wal-g/wal-g/tests_func/utils"
12)
13
14type TestOpts struct {
15test bool
16clean bool
17stop bool
18debug bool
19featurePrefix string
20database string
21}
22
23var (
24godogOpts = godog.Options{
25Output: colors.Colored(os.Stdout),
26Format: "pretty",
27StopOnFailure: true,
28Strict: true,
29}
30
31testOpts = TestOpts{}
32
33databases = map[string]bool{
34"mongodb": true,
35"redis": true,
36}
37)
38
39func init() {
40pflag.BoolVar(&testOpts.test, "tf.test", true, "run tests")
41pflag.BoolVar(&testOpts.stop, "tf.stop", true, "shutdown test environment")
42pflag.BoolVar(&testOpts.clean, "tf.clean", true, "delete test environment")
43pflag.BoolVar(&testOpts.debug, "tf.debug", false, "enable debug logging")
44pflag.StringVar(&testOpts.featurePrefix, "tf.featurePrefix", "", "features prefix")
45pflag.StringVar(&testOpts.database, "tf.database", "", "database name [mongodb|redis]")
46
47godog.BindCommandLineFlags("godog.", &godogOpts)
48}
49
50func TestMain(m *testing.M) {
51pflag.Parse()
52
53if _, ok := databases[testOpts.database]; !ok {
54tracelog.ErrorLogger.Fatalf("Database '%s' is not valid, please provide test database -tf.database=dbname\n",
55testOpts.database)
56}
57
58status, err := RunTestFeatures()
59
60tracelog.ErrorLogger.FatalOnError(err)
61os.Exit(status)
62}
63
64func RunTestFeatures() (status int, err error) {
65if testOpts.debug {
66err := tracelog.UpdateLogLevel(tracelog.DevelLogLevel)
67if err != nil {
68return -1, err
69}
70}
71
72tctx, err := CreateTestContex(testOpts.database)
73if err != nil {
74return -1, err
75}
76
77if testOpts.test {
78godogOpts.Paths, err = utils.FindFeaturePaths(testOpts.database, testOpts.featurePrefix)
79if err != nil {
80return -1, err
81}
82
83tracelog.InfoLogger.Printf("Starting testing environment: mongodb %s with features: %v",
84tctx.Version.Full, godogOpts.Paths)
85
86suite := godog.TestSuite{
87Name: "godogs",
88TestSuiteInitializer: func(ctx *godog.TestSuiteContext) {
89ctx.BeforeSuite(func() {
90err := tctx.LoadEnv()
91tracelog.ErrorLogger.FatalOnError(err)
92})
93},
94ScenarioInitializer: func(ctx *godog.ScenarioContext) {
95SetupCommonSteps(ctx, tctx)
96SetupMongodbSteps(ctx, tctx)
97SetupMongodbBinaryBackupSteps(ctx, tctx)
98SetupRedisSteps(ctx, tctx)
99},
100Options: &godogOpts,
101}
102status = suite.Run()
103}
104
105if testOpts.stop {
106err = tctx.StopEnv()
107if err != nil {
108return -1, err
109}
110}
111
112if testOpts.clean {
113err = tctx.CleanEnv()
114if err != nil {
115return -1, err
116}
117}
118
119return status, nil
120}
121