hs-test: added filenames to test names
- It is now possible to only run tests that are in a certain file Type: test Change-Id: I41665dd2bc0942c283be36a5af3e560fd65e9d03 Signed-off-by: Adrian Villin <avillin@cisco.com>
This commit is contained in:

committed by
Dave Wallace

parent
3def24bc48
commit
681ff3a02a
@ -89,6 +89,30 @@ This can be put in file ``extras/hs-test/my_test.go`` and run with command ``mak
|
|||||||
s.log(result)
|
s.log(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Filtering test cases
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The framework allows us to filter test cases in a few different ways, using ``make test TEST=``:
|
||||||
|
* Suite name
|
||||||
|
* File name
|
||||||
|
* Test name
|
||||||
|
* All of the above as long as they are ordered properly, e.g. ``make test TEST=VethsSuite.http_test.go.HeaderServerTest``
|
||||||
|
|
||||||
|
**Names are case sensitive!**
|
||||||
|
|
||||||
|
Names don't have to be complete, as long as they are last:
|
||||||
|
This is valid and will run all tests in every ``http`` file (if there is more than one):
|
||||||
|
``make test TEST=VethsSuite.http``
|
||||||
|
This is not valid:
|
||||||
|
``make test TEST=Veths.http``
|
||||||
|
|
||||||
|
They can also be left out:
|
||||||
|
``make test TEST=http_test.go`` will run every test in ``http_test.go``
|
||||||
|
``make test TEST=Nginx`` will run everything that has 'Nginx' in its name - suites, files and tests.
|
||||||
|
``make test TEST=HeaderServerTest`` will only run the header server test
|
||||||
|
|
||||||
|
|
||||||
Modifying the framework
|
Modifying the framework
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"path/filepath"
|
||||||
|
"runtime"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -10,6 +12,11 @@ import (
|
|||||||
|
|
||||||
var suiteTimeout time.Duration
|
var suiteTimeout time.Duration
|
||||||
|
|
||||||
|
func getTestFilename() string {
|
||||||
|
_, filename, _, _ := runtime.Caller(2)
|
||||||
|
return filepath.Base(filename)
|
||||||
|
}
|
||||||
|
|
||||||
func TestHst(t *testing.T) {
|
func TestHst(t *testing.T) {
|
||||||
if *isVppDebug {
|
if *isVppDebug {
|
||||||
// 30 minute timeout so that the framework won't timeout while debugging
|
// 30 minute timeout so that the framework won't timeout while debugging
|
||||||
|
@ -17,18 +17,18 @@ const (
|
|||||||
mirroringServerInterfaceName = "hstsrv"
|
mirroringServerInterfaceName = "hstsrv"
|
||||||
)
|
)
|
||||||
|
|
||||||
var nginxTests = []func(s *NginxSuite){}
|
var nginxTests = map[string][]func(s *NginxSuite){}
|
||||||
var nginxSoloTests = []func(s *NginxSuite){}
|
var nginxSoloTests = map[string][]func(s *NginxSuite){}
|
||||||
|
|
||||||
type NginxSuite struct {
|
type NginxSuite struct {
|
||||||
HstSuite
|
HstSuite
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerNginxTests(tests ...func(s *NginxSuite)) {
|
func registerNginxTests(tests ...func(s *NginxSuite)) {
|
||||||
nginxTests = append(nginxTests, tests...)
|
nginxTests[getTestFilename()] = tests
|
||||||
}
|
}
|
||||||
func registerNginxSoloTests(tests ...func(s *NginxSuite)) {
|
func registerNginxSoloTests(tests ...func(s *NginxSuite)) {
|
||||||
nginxSoloTests = append(nginxSoloTests, tests...)
|
nginxSoloTests[getTestFilename()] = tests
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *NginxSuite) SetupSuite() {
|
func (s *NginxSuite) SetupSuite() {
|
||||||
@ -92,16 +92,19 @@ var _ = Describe("NginxSuite", Ordered, ContinueOnFailure, func() {
|
|||||||
AfterEach(func() {
|
AfterEach(func() {
|
||||||
s.TearDownTest()
|
s.TearDownTest()
|
||||||
})
|
})
|
||||||
for _, test := range nginxTests {
|
|
||||||
|
for filename, tests := range nginxTests {
|
||||||
|
for _, test := range tests {
|
||||||
test := test
|
test := test
|
||||||
pc := reflect.ValueOf(test).Pointer()
|
pc := reflect.ValueOf(test).Pointer()
|
||||||
funcValue := runtime.FuncForPC(pc)
|
funcValue := runtime.FuncForPC(pc)
|
||||||
testName := strings.Split(funcValue.Name(), ".")[2]
|
testName := filename + "/" + strings.Split(funcValue.Name(), ".")[2]
|
||||||
It(testName, func(ctx SpecContext) {
|
It(testName, func(ctx SpecContext) {
|
||||||
s.log(testName + ": BEGIN")
|
s.log(testName + ": BEGIN")
|
||||||
test(&s)
|
test(&s)
|
||||||
}, SpecTimeout(suiteTimeout))
|
}, SpecTimeout(suiteTimeout))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
var _ = Describe("NginxSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
|
var _ = Describe("NginxSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
|
||||||
@ -119,14 +122,16 @@ var _ = Describe("NginxSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
|
|||||||
s.TearDownTest()
|
s.TearDownTest()
|
||||||
})
|
})
|
||||||
|
|
||||||
for _, test := range nginxSoloTests {
|
for filename, tests := range nginxSoloTests {
|
||||||
|
for _, test := range tests {
|
||||||
test := test
|
test := test
|
||||||
pc := reflect.ValueOf(test).Pointer()
|
pc := reflect.ValueOf(test).Pointer()
|
||||||
funcValue := runtime.FuncForPC(pc)
|
funcValue := runtime.FuncForPC(pc)
|
||||||
testName := strings.Split(funcValue.Name(), ".")[2]
|
testName := filename + "/" + strings.Split(funcValue.Name(), ".")[2]
|
||||||
It(testName, Label("SOLO"), func(ctx SpecContext) {
|
It(testName, Label("SOLO"), func(ctx SpecContext) {
|
||||||
s.log(testName + ": BEGIN")
|
s.log(testName + ": BEGIN")
|
||||||
test(&s)
|
test(&s)
|
||||||
}, SpecTimeout(suiteTimeout))
|
}, SpecTimeout(suiteTimeout))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
@ -14,18 +14,18 @@ const (
|
|||||||
tapInterfaceName = "htaphost"
|
tapInterfaceName = "htaphost"
|
||||||
)
|
)
|
||||||
|
|
||||||
var noTopoTests = []func(s *NoTopoSuite){}
|
var noTopoTests = map[string][]func(s *NoTopoSuite){}
|
||||||
var noTopoSoloTests = []func(s *NoTopoSuite){}
|
var noTopoSoloTests = map[string][]func(s *NoTopoSuite){}
|
||||||
|
|
||||||
type NoTopoSuite struct {
|
type NoTopoSuite struct {
|
||||||
HstSuite
|
HstSuite
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerNoTopoTests(tests ...func(s *NoTopoSuite)) {
|
func registerNoTopoTests(tests ...func(s *NoTopoSuite)) {
|
||||||
noTopoTests = append(noTopoTests, tests...)
|
noTopoTests[getTestFilename()] = tests
|
||||||
}
|
}
|
||||||
func registerNoTopoSoloTests(tests ...func(s *NoTopoSuite)) {
|
func registerNoTopoSoloTests(tests ...func(s *NoTopoSuite)) {
|
||||||
noTopoSoloTests = append(noTopoSoloTests, tests...)
|
noTopoSoloTests[getTestFilename()] = tests
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *NoTopoSuite) SetupSuite() {
|
func (s *NoTopoSuite) SetupSuite() {
|
||||||
@ -68,16 +68,18 @@ var _ = Describe("NoTopoSuite", Ordered, ContinueOnFailure, func() {
|
|||||||
s.TearDownTest()
|
s.TearDownTest()
|
||||||
})
|
})
|
||||||
|
|
||||||
for _, test := range noTopoTests {
|
for filename, tests := range noTopoTests {
|
||||||
|
for _, test := range tests {
|
||||||
test := test
|
test := test
|
||||||
pc := reflect.ValueOf(test).Pointer()
|
pc := reflect.ValueOf(test).Pointer()
|
||||||
funcValue := runtime.FuncForPC(pc)
|
funcValue := runtime.FuncForPC(pc)
|
||||||
testName := strings.Split(funcValue.Name(), ".")[2]
|
testName := filename + "/" + strings.Split(funcValue.Name(), ".")[2]
|
||||||
It(testName, func(ctx SpecContext) {
|
It(testName, func(ctx SpecContext) {
|
||||||
s.log(testName + ": BEGIN")
|
s.log(testName + ": BEGIN")
|
||||||
test(&s)
|
test(&s)
|
||||||
}, SpecTimeout(suiteTimeout))
|
}, SpecTimeout(suiteTimeout))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
var _ = Describe("NoTopoSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
|
var _ = Describe("NoTopoSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
|
||||||
@ -95,14 +97,16 @@ var _ = Describe("NoTopoSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
|
|||||||
s.TearDownTest()
|
s.TearDownTest()
|
||||||
})
|
})
|
||||||
|
|
||||||
for _, test := range noTopoSoloTests {
|
for filename, tests := range noTopoSoloTests {
|
||||||
|
for _, test := range tests {
|
||||||
test := test
|
test := test
|
||||||
pc := reflect.ValueOf(test).Pointer()
|
pc := reflect.ValueOf(test).Pointer()
|
||||||
funcValue := runtime.FuncForPC(pc)
|
funcValue := runtime.FuncForPC(pc)
|
||||||
testName := strings.Split(funcValue.Name(), ".")[2]
|
testName := filename + "/" + strings.Split(funcValue.Name(), ".")[2]
|
||||||
It(testName, Label("SOLO"), func(ctx SpecContext) {
|
It(testName, Label("SOLO"), func(ctx SpecContext) {
|
||||||
s.log(testName + ": BEGIN")
|
s.log(testName + ": BEGIN")
|
||||||
test(&s)
|
test(&s)
|
||||||
}, SpecTimeout(suiteTimeout))
|
}, SpecTimeout(suiteTimeout))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
@ -15,18 +15,18 @@ const (
|
|||||||
serverInterface = "hsrvvpp"
|
serverInterface = "hsrvvpp"
|
||||||
)
|
)
|
||||||
|
|
||||||
var nsTests = []func(s *NsSuite){}
|
var nsTests = map[string][]func(s *NsSuite){}
|
||||||
var nsSoloTests = []func(s *NsSuite){}
|
var nsSoloTests = map[string][]func(s *NsSuite){}
|
||||||
|
|
||||||
type NsSuite struct {
|
type NsSuite struct {
|
||||||
HstSuite
|
HstSuite
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerNsTests(tests ...func(s *NsSuite)) {
|
func registerNsTests(tests ...func(s *NsSuite)) {
|
||||||
nsTests = append(nsTests, tests...)
|
nsTests[getTestFilename()] = tests
|
||||||
}
|
}
|
||||||
func registerNsSoloTests(tests ...func(s *NsSuite)) {
|
func registerNsSoloTests(tests ...func(s *NsSuite)) {
|
||||||
nsSoloTests = append(nsSoloTests, tests...)
|
nsSoloTests[getTestFilename()] = tests
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *NsSuite) SetupSuite() {
|
func (s *NsSuite) SetupSuite() {
|
||||||
@ -77,16 +77,18 @@ var _ = Describe("NsSuite", Ordered, ContinueOnFailure, func() {
|
|||||||
s.TearDownTest()
|
s.TearDownTest()
|
||||||
})
|
})
|
||||||
|
|
||||||
for _, test := range nsTests {
|
for filename, tests := range nsTests {
|
||||||
|
for _, test := range tests {
|
||||||
test := test
|
test := test
|
||||||
pc := reflect.ValueOf(test).Pointer()
|
pc := reflect.ValueOf(test).Pointer()
|
||||||
funcValue := runtime.FuncForPC(pc)
|
funcValue := runtime.FuncForPC(pc)
|
||||||
testName := strings.Split(funcValue.Name(), ".")[2]
|
testName := filename + "/" + strings.Split(funcValue.Name(), ".")[2]
|
||||||
It(testName, func(ctx SpecContext) {
|
It(testName, func(ctx SpecContext) {
|
||||||
s.log(testName + ": BEGIN")
|
s.log(testName + ": BEGIN")
|
||||||
test(&s)
|
test(&s)
|
||||||
}, SpecTimeout(suiteTimeout))
|
}, SpecTimeout(suiteTimeout))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
var _ = Describe("NsSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
|
var _ = Describe("NsSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
|
||||||
@ -104,14 +106,16 @@ var _ = Describe("NsSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
|
|||||||
s.TearDownTest()
|
s.TearDownTest()
|
||||||
})
|
})
|
||||||
|
|
||||||
for _, test := range nsSoloTests {
|
for filename, tests := range nsSoloTests {
|
||||||
|
for _, test := range tests {
|
||||||
test := test
|
test := test
|
||||||
pc := reflect.ValueOf(test).Pointer()
|
pc := reflect.ValueOf(test).Pointer()
|
||||||
funcValue := runtime.FuncForPC(pc)
|
funcValue := runtime.FuncForPC(pc)
|
||||||
testName := strings.Split(funcValue.Name(), ".")[2]
|
testName := filename + "/" + strings.Split(funcValue.Name(), ".")[2]
|
||||||
It(testName, Label("SOLO"), func(ctx SpecContext) {
|
It(testName, Label("SOLO"), func(ctx SpecContext) {
|
||||||
s.log(testName + ": BEGIN")
|
s.log(testName + ": BEGIN")
|
||||||
test(&s)
|
test(&s)
|
||||||
}, SpecTimeout(suiteTimeout))
|
}, SpecTimeout(suiteTimeout))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
@ -13,14 +13,14 @@ type TapSuite struct {
|
|||||||
HstSuite
|
HstSuite
|
||||||
}
|
}
|
||||||
|
|
||||||
var tapTests = []func(s *TapSuite){}
|
var tapTests = map[string][]func(s *TapSuite){}
|
||||||
var tapSoloTests = []func(s *TapSuite){}
|
var tapSoloTests = map[string][]func(s *TapSuite){}
|
||||||
|
|
||||||
func registerTapTests(tests ...func(s *TapSuite)) {
|
func registerTapTests(tests ...func(s *TapSuite)) {
|
||||||
tapTests = append(tapTests, tests...)
|
tapTests[getTestFilename()] = tests
|
||||||
}
|
}
|
||||||
func registerTapSoloTests(tests ...func(s *TapSuite)) {
|
func registerTapSoloTests(tests ...func(s *TapSuite)) {
|
||||||
tapSoloTests = append(tapSoloTests, tests...)
|
tapSoloTests[getTestFilename()] = tests
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *TapSuite) SetupSuite() {
|
func (s *TapSuite) SetupSuite() {
|
||||||
@ -44,16 +44,18 @@ var _ = Describe("TapSuite", Ordered, ContinueOnFailure, func() {
|
|||||||
s.TearDownTest()
|
s.TearDownTest()
|
||||||
})
|
})
|
||||||
|
|
||||||
for _, test := range tapTests {
|
for filename, tests := range tapTests {
|
||||||
|
for _, test := range tests {
|
||||||
test := test
|
test := test
|
||||||
pc := reflect.ValueOf(test).Pointer()
|
pc := reflect.ValueOf(test).Pointer()
|
||||||
funcValue := runtime.FuncForPC(pc)
|
funcValue := runtime.FuncForPC(pc)
|
||||||
testName := strings.Split(funcValue.Name(), ".")[2]
|
testName := filename + "/" + strings.Split(funcValue.Name(), ".")[2]
|
||||||
It(testName, func(ctx SpecContext) {
|
It(testName, func(ctx SpecContext) {
|
||||||
s.log(testName + ": BEGIN")
|
s.log(testName + ": BEGIN")
|
||||||
test(&s)
|
test(&s)
|
||||||
}, SpecTimeout(suiteTimeout))
|
}, SpecTimeout(suiteTimeout))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
var _ = Describe("TapSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
|
var _ = Describe("TapSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
|
||||||
@ -71,14 +73,16 @@ var _ = Describe("TapSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
|
|||||||
s.TearDownTest()
|
s.TearDownTest()
|
||||||
})
|
})
|
||||||
|
|
||||||
for _, test := range tapSoloTests {
|
for filename, tests := range tapSoloTests {
|
||||||
|
for _, test := range tests {
|
||||||
test := test
|
test := test
|
||||||
pc := reflect.ValueOf(test).Pointer()
|
pc := reflect.ValueOf(test).Pointer()
|
||||||
funcValue := runtime.FuncForPC(pc)
|
funcValue := runtime.FuncForPC(pc)
|
||||||
testName := strings.Split(funcValue.Name(), ".")[2]
|
testName := filename + "/" + strings.Split(funcValue.Name(), ".")[2]
|
||||||
It(testName, Label("SOLO"), func(ctx SpecContext) {
|
It(testName, Label("SOLO"), func(ctx SpecContext) {
|
||||||
s.log(testName + ": BEGIN")
|
s.log(testName + ": BEGIN")
|
||||||
test(&s)
|
test(&s)
|
||||||
}, SpecTimeout(suiteTimeout))
|
}, SpecTimeout(suiteTimeout))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
@ -16,18 +16,18 @@ const (
|
|||||||
clientInterfaceName = "cln"
|
clientInterfaceName = "cln"
|
||||||
)
|
)
|
||||||
|
|
||||||
var vethTests = []func(s *VethsSuite){}
|
var vethTests = map[string][]func(s *VethsSuite){}
|
||||||
var vethSoloTests = []func(s *VethsSuite){}
|
var vethSoloTests = map[string][]func(s *VethsSuite){}
|
||||||
|
|
||||||
type VethsSuite struct {
|
type VethsSuite struct {
|
||||||
HstSuite
|
HstSuite
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerVethTests(tests ...func(s *VethsSuite)) {
|
func registerVethTests(tests ...func(s *VethsSuite)) {
|
||||||
vethTests = append(vethTests, tests...)
|
vethTests[getTestFilename()] = tests
|
||||||
}
|
}
|
||||||
func registerSoloVethTests(tests ...func(s *VethsSuite)) {
|
func registerSoloVethTests(tests ...func(s *VethsSuite)) {
|
||||||
vethSoloTests = append(vethSoloTests, tests...)
|
vethSoloTests[getTestFilename()] = tests
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *VethsSuite) SetupSuite() {
|
func (s *VethsSuite) SetupSuite() {
|
||||||
@ -101,16 +101,18 @@ var _ = Describe("VethsSuite", Ordered, ContinueOnFailure, func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// https://onsi.github.io/ginkgo/#dynamically-generating-specs
|
// https://onsi.github.io/ginkgo/#dynamically-generating-specs
|
||||||
for _, test := range vethTests {
|
for filename, tests := range vethTests {
|
||||||
|
for _, test := range tests {
|
||||||
test := test
|
test := test
|
||||||
pc := reflect.ValueOf(test).Pointer()
|
pc := reflect.ValueOf(test).Pointer()
|
||||||
funcValue := runtime.FuncForPC(pc)
|
funcValue := runtime.FuncForPC(pc)
|
||||||
testName := strings.Split(funcValue.Name(), ".")[2]
|
testName := filename + "/" + strings.Split(funcValue.Name(), ".")[2]
|
||||||
It(testName, func(ctx SpecContext) {
|
It(testName, func(ctx SpecContext) {
|
||||||
s.log(testName + ": BEGIN")
|
s.log(testName + ": BEGIN")
|
||||||
test(&s)
|
test(&s)
|
||||||
}, SpecTimeout(suiteTimeout))
|
}, SpecTimeout(suiteTimeout))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
var _ = Describe("VethsSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
|
var _ = Describe("VethsSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
|
||||||
@ -129,14 +131,16 @@ var _ = Describe("VethsSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// https://onsi.github.io/ginkgo/#dynamically-generating-specs
|
// https://onsi.github.io/ginkgo/#dynamically-generating-specs
|
||||||
for _, test := range vethSoloTests {
|
for filename, tests := range vethSoloTests {
|
||||||
|
for _, test := range tests {
|
||||||
test := test
|
test := test
|
||||||
pc := reflect.ValueOf(test).Pointer()
|
pc := reflect.ValueOf(test).Pointer()
|
||||||
funcValue := runtime.FuncForPC(pc)
|
funcValue := runtime.FuncForPC(pc)
|
||||||
testName := strings.Split(funcValue.Name(), ".")[2]
|
testName := filename + "/" + strings.Split(funcValue.Name(), ".")[2]
|
||||||
It(testName, Label("SOLO"), func(ctx SpecContext) {
|
It(testName, Label("SOLO"), func(ctx SpecContext) {
|
||||||
s.log(testName + ": BEGIN")
|
s.log(testName + ": BEGIN")
|
||||||
test(&s)
|
test(&s)
|
||||||
}, SpecTimeout(suiteTimeout))
|
}, SpecTimeout(suiteTimeout))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user