wal-g

Форк
0
/
godogs_test.go 
120 строк · 2.6 Кб
1
package functests
2

3
import (
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

14
type TestOpts struct {
15
	test          bool
16
	clean         bool
17
	stop          bool
18
	debug         bool
19
	featurePrefix string
20
	database      string
21
}
22

23
var (
24
	godogOpts = godog.Options{
25
		Output:        colors.Colored(os.Stdout),
26
		Format:        "pretty",
27
		StopOnFailure: true,
28
		Strict:        true,
29
	}
30

31
	testOpts = TestOpts{}
32

33
	databases = map[string]bool{
34
		"mongodb": true,
35
		"redis":   true,
36
	}
37
)
38

39
func init() {
40
	pflag.BoolVar(&testOpts.test, "tf.test", true, "run tests")
41
	pflag.BoolVar(&testOpts.stop, "tf.stop", true, "shutdown test environment")
42
	pflag.BoolVar(&testOpts.clean, "tf.clean", true, "delete test environment")
43
	pflag.BoolVar(&testOpts.debug, "tf.debug", false, "enable debug logging")
44
	pflag.StringVar(&testOpts.featurePrefix, "tf.featurePrefix", "", "features prefix")
45
	pflag.StringVar(&testOpts.database, "tf.database", "", "database name [mongodb|redis]")
46

47
	godog.BindCommandLineFlags("godog.", &godogOpts)
48
}
49

50
func TestMain(m *testing.M) {
51
	pflag.Parse()
52

53
	if _, ok := databases[testOpts.database]; !ok {
54
		tracelog.ErrorLogger.Fatalf("Database '%s' is not valid, please provide test database -tf.database=dbname\n",
55
			testOpts.database)
56
	}
57

58
	status, err := RunTestFeatures()
59

60
	tracelog.ErrorLogger.FatalOnError(err)
61
	os.Exit(status)
62
}
63

64
func RunTestFeatures() (status int, err error) {
65
	if testOpts.debug {
66
		err := tracelog.UpdateLogLevel(tracelog.DevelLogLevel)
67
		if err != nil {
68
			return -1, err
69
		}
70
	}
71

72
	tctx, err := CreateTestContex(testOpts.database)
73
	if err != nil {
74
		return -1, err
75
	}
76

77
	if testOpts.test {
78
		godogOpts.Paths, err = utils.FindFeaturePaths(testOpts.database, testOpts.featurePrefix)
79
		if err != nil {
80
			return -1, err
81
		}
82

83
		tracelog.InfoLogger.Printf("Starting testing environment: mongodb %s with features: %v",
84
			tctx.Version.Full, godogOpts.Paths)
85

86
		suite := godog.TestSuite{
87
			Name: "godogs",
88
			TestSuiteInitializer: func(ctx *godog.TestSuiteContext) {
89
				ctx.BeforeSuite(func() {
90
					err := tctx.LoadEnv()
91
					tracelog.ErrorLogger.FatalOnError(err)
92
				})
93
			},
94
			ScenarioInitializer: func(ctx *godog.ScenarioContext) {
95
				SetupCommonSteps(ctx, tctx)
96
				SetupMongodbSteps(ctx, tctx)
97
				SetupMongodbBinaryBackupSteps(ctx, tctx)
98
				SetupRedisSteps(ctx, tctx)
99
			},
100
			Options: &godogOpts,
101
		}
102
		status = suite.Run()
103
	}
104

105
	if testOpts.stop {
106
		err = tctx.StopEnv()
107
		if err != nil {
108
			return -1, err
109
		}
110
	}
111

112
	if testOpts.clean {
113
		err = tctx.CleanEnv()
114
		if err != nil {
115
			return -1, err
116
		}
117
	}
118

119
	return status, nil
120
}
121

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.