@@ -20,6 +20,7 @@ limitations under the License.
2020package e2e
2121
2222import (
23+ "errors"
2324 "os"
2425 "testing"
2526
@@ -31,20 +32,14 @@ import (
3132 . "github.com/onsi/ginkgo/v2"
3233 . "github.com/onsi/gomega"
3334 "k8s.io/klog/v2"
34- "k8s.io/utils/ptr"
3535 ctrl "sigs.k8s.io/controller-runtime"
3636
3737 "sigs.k8s.io/cluster-api-provider-openstack/test/e2e/shared"
3838)
3939
4040var (
41- e2eCtx * shared.E2EContext
42- initialServers []servers.Server
43- initialNetworks []networks.Network
44- initialSecurityGroups []groups.SecGroup
45- initialLoadBalancers []loadbalancers.LoadBalancer
46- initialVolumes []volumes.Volume
47- err error
41+ e2eCtx * shared.E2EContext
42+ err error
4843)
4944
5045func init () {
@@ -66,38 +61,50 @@ func TestE2E(t *testing.T) {
6661
6762var _ = SynchronizedBeforeSuite (func () []byte {
6863 data := shared .Node1BeforeSuite (e2eCtx )
69- return data
70- }, func (data []byte ) {
71- shared .AllNodesBeforeSuite (e2eCtx , data )
72- initialServers , err = shared .DumpOpenStackServers (e2eCtx , servers.ListOpts {})
64+
65+ initialServers , err := shared .DumpOpenStackServers (e2eCtx , servers.ListOpts {})
7366 Expect (err ).NotTo (HaveOccurred ())
74- initialNetworks , err = shared .DumpOpenStackNetworks (e2eCtx , networks.ListOpts {})
67+ initialNetworks , err : = shared .DumpOpenStackNetworks (e2eCtx , networks.ListOpts {})
7568 Expect (err ).NotTo (HaveOccurred ())
76- initialSecurityGroups , err = shared .DumpOpenStackSecurityGroups (e2eCtx , groups.ListOpts {})
69+ initialSecurityGroups , err : = shared .DumpOpenStackSecurityGroups (e2eCtx , groups.ListOpts {})
7770 Expect (err ).NotTo (HaveOccurred ())
78- initialLoadBalancers , err = shared .DumpOpenStackLoadBalancers (e2eCtx , loadbalancers.ListOpts {})
71+ initialLoadBalancers , err : = shared .DumpOpenStackLoadBalancers (e2eCtx , loadbalancers.ListOpts {})
7972 Expect (err ).NotTo (HaveOccurred ())
80- initialVolumes , err = shared .DumpOpenStackVolumes (e2eCtx , volumes.ListOpts {})
73+ initialVolumes , err : = shared .DumpOpenStackVolumes (e2eCtx , volumes.ListOpts {})
8174 Expect (err ).NotTo (HaveOccurred ())
75+
76+ DeferCleanup (func () error {
77+ return errors .Join (
78+ CheckResourceCleanup (shared .DumpOpenStackServers , servers.ListOpts {}, initialServers ),
79+ CheckResourceCleanup (shared .DumpOpenStackNetworks , networks.ListOpts {}, initialNetworks ),
80+ CheckResourceCleanup (shared .DumpOpenStackSecurityGroups , groups.ListOpts {}, initialSecurityGroups ),
81+ CheckResourceCleanup (shared .DumpOpenStackLoadBalancers , loadbalancers.ListOpts {}, initialLoadBalancers ),
82+ CheckResourceCleanup (shared .DumpOpenStackVolumes , volumes.ListOpts {}, initialVolumes ),
83+ )
84+ })
85+
86+ return data
87+ }, func (data []byte ) {
88+ shared .AllNodesBeforeSuite (e2eCtx , data )
8289})
8390
8491// CheckResourceCleanup checks if all resources created during the test are cleaned up by comparing the resources
8592// before and after the test.
8693// The function f is used to list the resources of type T, whose list opts is of type L.
8794// The list of resources is then compared to the initialResources, using the ConsistOfIDs custom matcher.
88- func CheckResourceCleanup [T any , L any ](f func (* shared.E2EContext , L ) ([]T , error ), l L , initialResources []T ) * string {
95+ func CheckResourceCleanup [T any , L any ](f func (* shared.E2EContext , L ) ([]T , error ), l L , initialResources []T ) error {
8996 endResources , err := f (e2eCtx , l )
9097 if err != nil {
91- return ptr . To ( err . Error ())
98+ return err
9299 }
93100
94101 matcher := ConsistOfIDs (initialResources )
95102 success , err := matcher .Match (endResources )
96103 if err != nil {
97- return ptr . To ( err . Error ())
104+ return err
98105 }
99106 if ! success {
100- return ptr . To (matcher .FailureMessage (endResources ))
107+ return errors . New (matcher .FailureMessage (endResources ))
101108 }
102109
103110 return nil
@@ -106,23 +113,5 @@ func CheckResourceCleanup[T any, L any](f func(*shared.E2EContext, L) ([]T, erro
106113var _ = SynchronizedAfterSuite (func () {
107114 shared .AllNodesAfterSuite (e2eCtx )
108115}, func () {
109- failed := false
110- for _ , error := range []* string {
111- CheckResourceCleanup (shared .DumpOpenStackServers , servers.ListOpts {}, initialServers ),
112- CheckResourceCleanup (shared .DumpOpenStackNetworks , networks.ListOpts {}, initialNetworks ),
113- CheckResourceCleanup (shared .DumpOpenStackSecurityGroups , groups.ListOpts {}, initialSecurityGroups ),
114- CheckResourceCleanup (shared .DumpOpenStackLoadBalancers , loadbalancers.ListOpts {}, initialLoadBalancers ),
115- CheckResourceCleanup (shared .DumpOpenStackVolumes , volumes.ListOpts {}, initialVolumes ),
116- } {
117- if error != nil {
118- GinkgoWriter .Println (* error )
119- failed = true
120- }
121- }
122-
123116 shared .Node1AfterSuite (e2eCtx )
124-
125- if failed {
126- Fail ("Not all resources were cleaned up" )
127- }
128117})
0 commit comments