49a36cacb831e3c9c8df166075820f0e57a21749
[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 = map[string][]func(s *VethsSuite){}
20 var vethSoloTests = map[string][]func(s *VethsSuite){}
21
22 type VethsSuite struct {
23         HstSuite
24 }
25
26 func registerVethTests(tests ...func(s *VethsSuite)) {
27         vethTests[getTestFilename()] = tests
28 }
29 func registerSoloVethTests(tests ...func(s *VethsSuite)) {
30         vethSoloTests[getTestFilename()] = 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         serverVpp, err := serverContainer.newVppInstance(serverContainer.allocatedCpus, sessionConfig)
54         s.assertNotNil(serverVpp, fmt.Sprint(err))
55
56         s.setupServerVpp()
57
58         // ... For client
59         clientContainer := s.getContainerByName("client-vpp")
60
61         clientVpp, err := clientContainer.newVppInstance(clientContainer.allocatedCpus, sessionConfig)
62         s.assertNotNil(clientVpp, fmt.Sprint(err))
63
64         s.setupClientVpp()
65 }
66
67 func (s *VethsSuite) setupServerVpp() {
68         serverVpp := s.getContainerByName("server-vpp").vppInstance
69         s.assertNil(serverVpp.start())
70
71         serverVeth := s.getInterfaceByName(serverInterfaceName)
72         idx, err := serverVpp.createAfPacket(serverVeth)
73         s.assertNil(err, fmt.Sprint(err))
74         s.assertNotEqual(0, idx)
75 }
76
77 func (s *VethsSuite) setupClientVpp() {
78         clientVpp := s.getContainerByName("client-vpp").vppInstance
79         s.assertNil(clientVpp.start())
80
81         clientVeth := s.getInterfaceByName(clientInterfaceName)
82         idx, err := clientVpp.createAfPacket(clientVeth)
83         s.assertNil(err, fmt.Sprint(err))
84         s.assertNotEqual(0, idx)
85 }
86
87 var _ = Describe("VethsSuite", Ordered, ContinueOnFailure, func() {
88         var s VethsSuite
89         BeforeAll(func() {
90                 s.SetupSuite()
91         })
92         BeforeEach(func() {
93                 s.SetupTest()
94         })
95         AfterAll(func() {
96                 s.TearDownSuite()
97
98         })
99         AfterEach(func() {
100                 s.TearDownTest()
101         })
102
103         // https://onsi.github.io/ginkgo/#dynamically-generating-specs
104         for filename, tests := range vethTests {
105                 for _, test := range tests {
106                         test := test
107                         pc := reflect.ValueOf(test).Pointer()
108                         funcValue := runtime.FuncForPC(pc)
109                         testName := filename + "/" + strings.Split(funcValue.Name(), ".")[2]
110                         It(testName, func(ctx SpecContext) {
111                                 s.log(testName + ": BEGIN")
112                                 test(&s)
113                         }, SpecTimeout(suiteTimeout))
114                 }
115         }
116 })
117
118 var _ = Describe("VethsSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
119         var s VethsSuite
120         BeforeAll(func() {
121                 s.SetupSuite()
122         })
123         BeforeEach(func() {
124                 s.SetupTest()
125         })
126         AfterAll(func() {
127                 s.TearDownSuite()
128         })
129         AfterEach(func() {
130                 s.TearDownTest()
131         })
132
133         // https://onsi.github.io/ginkgo/#dynamically-generating-specs
134         for filename, tests := range vethSoloTests {
135                 for _, test := range tests {
136                         test := test
137                         pc := reflect.ValueOf(test).Pointer()
138                         funcValue := runtime.FuncForPC(pc)
139                         testName := filename + "/" + strings.Split(funcValue.Name(), ".")[2]
140                         It(testName, Label("SOLO"), func(ctx SpecContext) {
141                                 s.log(testName + ": BEGIN")
142                                 test(&s)
143                         }, SpecTimeout(suiteTimeout))
144                 }
145         }
146 })