hs-test: add tests repeat option
[vpp.git] / extras / hs-test / suite_veth_test.go
1 package main
2
3 import (
4         "fmt"
5         "reflect"
6         "runtime"
7         "strings"
8         "time"
9
10         . "github.com/onsi/ginkgo/v2"
11 )
12
13 // These correspond to names used in yaml config
14 const (
15         serverInterfaceName = "srv"
16         clientInterfaceName = "cln"
17 )
18
19 var vethTests = []func(s *VethsSuite){}
20 var vethSoloTests = []func(s *VethsSuite){}
21
22 type VethsSuite struct {
23         HstSuite
24 }
25
26 func registerVethTests(tests ...func(s *VethsSuite)) {
27         vethTests = append(vethTests, tests...)
28 }
29 func registerSoloVethTests(tests ...func(s *VethsSuite)) {
30         vethSoloTests = append(vethSoloTests, tests...)
31 }
32
33 func (s *VethsSuite) SetupSuite() {
34         time.Sleep(1 * time.Second)
35         s.HstSuite.SetupSuite()
36         s.configureNetworkTopology("2peerVeth")
37         s.loadContainerTopology("2peerVeth")
38 }
39
40 func (s *VethsSuite) SetupTest() {
41         s.HstSuite.SetupTest()
42
43         // Setup test conditions
44         var sessionConfig Stanza
45         sessionConfig.
46                 newStanza("session").
47                 append("enable").
48                 append("use-app-socket-api").close()
49
50         // ... For server
51         serverContainer := s.getContainerByName("server-vpp")
52
53         cpus := s.AllocateCpus()
54         serverVpp, err := serverContainer.newVppInstance(cpus, sessionConfig)
55         s.assertNotNil(serverVpp, fmt.Sprint(err))
56
57         s.setupServerVpp()
58
59         // ... For client
60         clientContainer := s.getContainerByName("client-vpp")
61
62         cpus = s.AllocateCpus()
63         clientVpp, err := clientContainer.newVppInstance(cpus, sessionConfig)
64         s.assertNotNil(clientVpp, fmt.Sprint(err))
65
66         s.setupClientVpp()
67 }
68
69 func (s *VethsSuite) setupServerVpp() {
70         serverVpp := s.getContainerByName("server-vpp").vppInstance
71         s.assertNil(serverVpp.start())
72
73         serverVeth := s.getInterfaceByName(serverInterfaceName)
74         idx, err := serverVpp.createAfPacket(serverVeth)
75         s.assertNil(err, fmt.Sprint(err))
76         s.assertNotEqual(0, idx)
77 }
78
79 func (s *VethsSuite) setupClientVpp() {
80         clientVpp := s.getContainerByName("client-vpp").vppInstance
81         s.assertNil(clientVpp.start())
82
83         clientVeth := s.getInterfaceByName(clientInterfaceName)
84         idx, err := clientVpp.createAfPacket(clientVeth)
85         s.assertNil(err, fmt.Sprint(err))
86         s.assertNotEqual(0, idx)
87 }
88
89 var _ = Describe("VethsSuite", Ordered, ContinueOnFailure, func() {
90         var s VethsSuite
91         BeforeAll(func() {
92                 s.SetupSuite()
93         })
94         BeforeEach(func() {
95                 s.SetupTest()
96         })
97         AfterAll(func() {
98                 s.TearDownSuite()
99
100         })
101         AfterEach(func() {
102                 s.TearDownTest()
103         })
104
105         // https://onsi.github.io/ginkgo/#dynamically-generating-specs
106         for _, test := range vethTests {
107                 test := test
108                 pc := reflect.ValueOf(test).Pointer()
109                 funcValue := runtime.FuncForPC(pc)
110                 It(strings.Split(funcValue.Name(), ".")[2], func(ctx SpecContext) {
111                         test(&s)
112                 }, SpecTimeout(time.Minute*5))
113         }
114 })
115
116 var _ = Describe("VethsSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
117         var s VethsSuite
118         BeforeAll(func() {
119                 s.SetupSuite()
120         })
121         BeforeEach(func() {
122                 s.SetupTest()
123         })
124         AfterAll(func() {
125                 s.TearDownSuite()
126
127         })
128         AfterEach(func() {
129                 s.TearDownTest()
130         })
131
132         // https://onsi.github.io/ginkgo/#dynamically-generating-specs
133         for _, test := range vethSoloTests {
134                 test := test
135                 pc := reflect.ValueOf(test).Pointer()
136                 funcValue := runtime.FuncForPC(pc)
137                 It(strings.Split(funcValue.Name(), ".")[2], Label("SOLO"), func(ctx SpecContext) {
138                         test(&s)
139                 }, SpecTimeout(time.Minute*5))
140         }
141 })