3
3
package tests
4
4
5
5
import (
6
+ "errors"
6
7
"fmt"
7
8
"time"
8
9
@@ -26,7 +27,7 @@ import (
26
27
clientset "k8s.io/client-go/kubernetes"
27
28
)
28
29
29
- var _ = ginkgo .Describe ("Establish BGP session with EnableGracefulRestart" , func () {
30
+ var _ = ginkgo .FDescribe ("Establish BGP session with EnableGracefulRestart" , func () {
30
31
var (
31
32
cs clientset.Interface
32
33
updater * config.Updater
@@ -103,19 +104,17 @@ var _ = ginkgo.Describe("Establish BGP session with EnableGracefulRestart", func
103
104
err := updater .Update (peersConfig .Secrets , frrConfigCR )
104
105
Expect (err ).NotTo (HaveOccurred (), "apply the CR in k8s api failed" )
105
106
106
- check := func () error {
107
+ Eventually ( func () error {
107
108
for _ , p := range peersConfig .Peers () {
108
109
err := routes .CheckNeighborHasPrefix (p .FRR , p .FRR .RouterConfig .VRF , prefix , nodes )
109
110
if err != nil {
110
111
return fmt .Errorf ("Neigh %s does not have prefix %s: %w" , p .FRR .Name , prefix , err )
111
112
}
112
113
}
113
114
return nil
114
- }
115
-
116
- Eventually (check , time .Minute , time .Second ).ShouldNot (HaveOccurred (),
117
- "route should exist before we restart frr-k8s" )
115
+ }, time .Minute , time .Second ).ShouldNot (HaveOccurred (), "route should exist before we restart frr-k8s" )
118
116
117
+ time .Sleep (5 * time .Second )
119
118
c := make (chan struct {})
120
119
go func () { // go restart frr-k8s while Consistently check that route exists
121
120
defer ginkgo .GinkgoRecover ()
@@ -124,12 +123,32 @@ var _ = ginkgo.Describe("Establish BGP session with EnableGracefulRestart", func
124
123
close (c )
125
124
}()
126
125
126
+ check := func () error {
127
+ var returnError error
128
+
129
+ for _ , p := range peersConfig .Peers () {
130
+ err = routes .CheckNeighborHasPrefix (p .FRR , p .FRR .RouterConfig .VRF , prefix , nodes )
131
+ if err != nil {
132
+ returnError = errors .Join (returnError , fmt .Errorf ("Neigh %s does not have prefix %s: %w" , p .FRR .Name , prefix , err ))
133
+ for i := 0 ; i < 5 ; i ++ {
134
+ if err := routes .CheckNeighborHasPrefix (p .FRR , p .FRR .RouterConfig .VRF , prefix , nodes ); err != nil {
135
+ ginkgo .By (fmt .Sprintf ("%d Neigh %s does not have prefix %s: %s" , i , p .FRR .Name , prefix , err ))
136
+ time .Sleep (time .Second )
137
+ } else {
138
+ ginkgo .By (fmt .Sprintf ("%d Neigh %s does have prefix %s: %s" , i , p .FRR .Name , prefix , err ))
139
+ }
140
+ }
141
+ }
142
+ }
143
+ return returnError
144
+ }
145
+
127
146
// 2*time.Minute is important because that is the Graceful Restart timer.
128
147
Consistently (check , 2 * time .Minute , time .Second ).ShouldNot (HaveOccurred ())
129
148
Eventually (c , time .Minute , time .Second ).Should (BeClosed (), "restart FRRK8s pods are not yet ready" )
130
149
},
131
- ginkgo .Entry ("IPV4" , ipfamily .IPv4 , "192.168.2.0/24 " ),
132
- ginkgo .Entry ("IPV6" , ipfamily .IPv6 , "fc00:f853:ccd:e799::/64 " ),
150
+ ginkgo .Entry ("IPV4" , ipfamily .IPv4 , "5.5.5.5/32 " ),
151
+ ginkgo .Entry ("IPV6" , ipfamily .IPv6 , "2001:db8:5555::5/128 " ),
133
152
)
134
153
})
135
154
})
0 commit comments