blob: 49a36cacb831e3c9c8df166075820f0e57a21749 [file] [log] [blame]
Maros Ondrejickadb823ed2022-12-14 16:30:04 +01001package main
2
3import (
Adrian Villincee15aa2024-03-14 11:42:55 -04004 "fmt"
5 "reflect"
6 "runtime"
7 "strings"
Maros Ondrejickadb823ed2022-12-14 16:30:04 +01008 "time"
Adrian Villincee15aa2024-03-14 11:42:55 -04009
10 . "github.com/onsi/ginkgo/v2"
Maros Ondrejickadb823ed2022-12-14 16:30:04 +010011)
12
adrianvillin28bd8f02024-02-13 06:00:02 -050013// These correspond to names used in yaml config
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010014const (
adrianvillinfbf5f2b2024-02-13 03:26:25 -050015 serverInterfaceName = "srv"
16 clientInterfaceName = "cln"
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010017)
18
Adrian Villin681ff3a2024-06-07 06:45:48 -040019var vethTests = map[string][]func(s *VethsSuite){}
20var vethSoloTests = map[string][]func(s *VethsSuite){}
Adrian Villincee15aa2024-03-14 11:42:55 -040021
Maros Ondrejickadb823ed2022-12-14 16:30:04 +010022type VethsSuite struct {
23 HstSuite
24}
25
Adrian Villincee15aa2024-03-14 11:42:55 -040026func registerVethTests(tests ...func(s *VethsSuite)) {
Adrian Villin681ff3a2024-06-07 06:45:48 -040027 vethTests[getTestFilename()] = tests
Adrian Villincee15aa2024-03-14 11:42:55 -040028}
29func registerSoloVethTests(tests ...func(s *VethsSuite)) {
Adrian Villin681ff3a2024-06-07 06:45:48 -040030 vethSoloTests[getTestFilename()] = tests
Adrian Villincee15aa2024-03-14 11:42:55 -040031}
32
Maros Ondrejickadb823ed2022-12-14 16:30:04 +010033func (s *VethsSuite) SetupSuite() {
34 time.Sleep(1 * time.Second)
Filip Tehlar608d0062023-04-28 10:29:47 +020035 s.HstSuite.SetupSuite()
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010036 s.configureNetworkTopology("2peerVeth")
Maros Ondrejickadb823ed2022-12-14 16:30:04 +010037 s.loadContainerTopology("2peerVeth")
38}
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010039
40func (s *VethsSuite) SetupTest() {
Filip Tehlar608d0062023-04-28 10:29:47 +020041 s.HstSuite.SetupTest()
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010042
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010043 // Setup test conditions
Filip Tehlar608d0062023-04-28 10:29:47 +020044 var sessionConfig Stanza
45 sessionConfig.
Maros Ondrejickae7625d02023-02-28 16:55:01 +010046 newStanza("session").
47 append("enable").
48 append("use-app-socket-api").close()
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010049
50 // ... For server
51 serverContainer := s.getContainerByName("server-vpp")
52
Adrian Villinb9464cd2024-05-27 09:52:59 -040053 serverVpp, err := serverContainer.newVppInstance(serverContainer.allocatedCpus, sessionConfig)
Adrian Villincee15aa2024-03-14 11:42:55 -040054 s.assertNotNil(serverVpp, fmt.Sprint(err))
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010055
56 s.setupServerVpp()
57
58 // ... For client
59 clientContainer := s.getContainerByName("client-vpp")
60
Adrian Villinb9464cd2024-05-27 09:52:59 -040061 clientVpp, err := clientContainer.newVppInstance(clientContainer.allocatedCpus, sessionConfig)
Adrian Villincee15aa2024-03-14 11:42:55 -040062 s.assertNotNil(clientVpp, fmt.Sprint(err))
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010063
64 s.setupClientVpp()
65}
66
67func (s *VethsSuite) setupServerVpp() {
68 serverVpp := s.getContainerByName("server-vpp").vppInstance
Filip Tehlar56e17cf2024-01-11 17:17:33 +010069 s.assertNil(serverVpp.start())
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010070
adrianvillin28bd8f02024-02-13 06:00:02 -050071 serverVeth := s.getInterfaceByName(serverInterfaceName)
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010072 idx, err := serverVpp.createAfPacket(serverVeth)
Adrian Villincee15aa2024-03-14 11:42:55 -040073 s.assertNil(err, fmt.Sprint(err))
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010074 s.assertNotEqual(0, idx)
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010075}
76
77func (s *VethsSuite) setupClientVpp() {
78 clientVpp := s.getContainerByName("client-vpp").vppInstance
Filip Tehlar56e17cf2024-01-11 17:17:33 +010079 s.assertNil(clientVpp.start())
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010080
adrianvillin28bd8f02024-02-13 06:00:02 -050081 clientVeth := s.getInterfaceByName(clientInterfaceName)
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010082 idx, err := clientVpp.createAfPacket(clientVeth)
Adrian Villincee15aa2024-03-14 11:42:55 -040083 s.assertNil(err, fmt.Sprint(err))
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010084 s.assertNotEqual(0, idx)
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010085}
Adrian Villincee15aa2024-03-14 11:42:55 -040086
87var _ = 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
Adrian Villin681ff3a2024-06-07 06:45:48 -0400104 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 }
Adrian Villincee15aa2024-03-14 11:42:55 -0400115 }
116})
117
118var _ = 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()
Adrian Villincee15aa2024-03-14 11:42:55 -0400128 })
129 AfterEach(func() {
130 s.TearDownTest()
131 })
132
133 // https://onsi.github.io/ginkgo/#dynamically-generating-specs
Adrian Villin681ff3a2024-06-07 06:45:48 -0400134 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 }
Adrian Villincee15aa2024-03-14 11:42:55 -0400145 }
146})