blob: d7bfa55acd08489510f26f89aea24d2f754c2080 [file] [log] [blame]
Adrian Villin4677d922024-06-14 09:32:39 +02001package hst
Maros Ondrejickadb823ed2022-12-14 16:30:04 +01002
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 (
Adrian Villin4677d922024-06-14 09:32:39 +020015 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 Villin4677d922024-06-14 09:32:39 +020026func RegisterVethTests(tests ...func(s *VethsSuite)) {
Adrian Villin681ff3a2024-06-07 06:45:48 -040027 vethTests[getTestFilename()] = tests
Adrian Villincee15aa2024-03-14 11:42:55 -040028}
Adrian Villin4677d922024-06-14 09:32:39 +020029func 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()
Adrian Villin4677d922024-06-14 09:32:39 +020036 s.ConfigureNetworkTopology("2peerVeth")
37 s.LoadContainerTopology("2peerVeth")
Maros Ondrejickadb823ed2022-12-14 16:30:04 +010038}
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.
Adrian Villin4677d922024-06-14 09:32:39 +020046 NewStanza("session").
47 Append("enable").
48 Append("use-app-socket-api").Close()
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010049
50 // ... For server
Adrian Villin4677d922024-06-14 09:32:39 +020051 serverContainer := s.GetContainerByName("server-vpp")
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010052
Adrian Villin4677d922024-06-14 09:32:39 +020053 serverVpp, err := serverContainer.newVppInstance(serverContainer.AllocatedCpus, sessionConfig)
54 s.AssertNotNil(serverVpp, fmt.Sprint(err))
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010055
Adrian Villin4677d922024-06-14 09:32:39 +020056 s.SetupServerVpp()
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010057
58 // ... For client
Adrian Villin4677d922024-06-14 09:32:39 +020059 clientContainer := s.GetContainerByName("client-vpp")
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010060
Adrian Villin4677d922024-06-14 09:32:39 +020061 clientVpp, err := clientContainer.newVppInstance(clientContainer.AllocatedCpus, sessionConfig)
62 s.AssertNotNil(clientVpp, fmt.Sprint(err))
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010063
64 s.setupClientVpp()
65}
66
Adrian Villin4677d922024-06-14 09:32:39 +020067func (s *VethsSuite) SetupServerVpp() {
68 serverVpp := s.GetContainerByName("server-vpp").VppInstance
69 s.AssertNil(serverVpp.Start())
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010070
Adrian Villin4677d922024-06-14 09:32:39 +020071 serverVeth := s.GetInterfaceByName(ServerInterfaceName)
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010072 idx, err := serverVpp.createAfPacket(serverVeth)
Adrian Villin4677d922024-06-14 09:32:39 +020073 s.AssertNil(err, fmt.Sprint(err))
74 s.AssertNotEqual(0, idx)
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010075}
76
77func (s *VethsSuite) setupClientVpp() {
Adrian Villin4677d922024-06-14 09:32:39 +020078 clientVpp := s.GetContainerByName("client-vpp").VppInstance
79 s.AssertNil(clientVpp.Start())
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010080
Adrian Villin4677d922024-06-14 09:32:39 +020081 clientVeth := s.GetInterfaceByName(ClientInterfaceName)
Maros Ondrejickaffa3f602023-01-26 10:07:29 +010082 idx, err := clientVpp.createAfPacket(clientVeth)
Adrian Villin4677d922024-06-14 09:32:39 +020083 s.AssertNil(err, fmt.Sprint(err))
84 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) {
Adrian Villin4677d922024-06-14 09:32:39 +0200111 s.Log(testName + ": BEGIN")
Adrian Villin681ff3a2024-06-07 06:45:48 -0400112 test(&s)
Adrian Villin4677d922024-06-14 09:32:39 +0200113 }, SpecTimeout(SuiteTimeout))
Adrian Villin681ff3a2024-06-07 06:45:48 -0400114 }
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) {
Adrian Villin4677d922024-06-14 09:32:39 +0200141 s.Log(testName + ": BEGIN")
Adrian Villin681ff3a2024-06-07 06:45:48 -0400142 test(&s)
Adrian Villin4677d922024-06-14 09:32:39 +0200143 }, SpecTimeout(SuiteTimeout))
Adrian Villin681ff3a2024-06-07 06:45:48 -0400144 }
Adrian Villincee15aa2024-03-14 11:42:55 -0400145 }
146})