@@ -23,15 +23,29 @@ import (
23
23
"os"
24
24
"testing"
25
25
26
+ "github.com/gophercloud/gophercloud/openstack/blockstorage/v3/volumes"
27
+ "github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
28
+ "github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/loadbalancers"
29
+ "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups"
30
+ "github.com/gophercloud/gophercloud/openstack/networking/v2/networks"
26
31
. "github.com/onsi/ginkgo/v2"
27
32
. "github.com/onsi/gomega"
28
33
"k8s.io/klog/v2"
34
+ "k8s.io/utils/pointer"
29
35
ctrl "sigs.k8s.io/controller-runtime"
30
36
31
37
"sigs.k8s.io/cluster-api-provider-openstack/test/e2e/shared"
32
38
)
33
39
34
- var e2eCtx * shared.E2EContext
40
+ var (
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
48
+ )
35
49
36
50
func init () {
37
51
e2eCtx = shared .NewE2EContext ()
@@ -55,10 +69,57 @@ var _ = SynchronizedBeforeSuite(func() []byte {
55
69
return data
56
70
}, func (data []byte ) {
57
71
shared .AllNodesBeforeSuite (e2eCtx , data )
72
+ initialServers , err = shared .DumpOpenStackServers (e2eCtx , servers.ListOpts {})
73
+ Expect (err ).NotTo (HaveOccurred ())
74
+ initialNetworks , err = shared .DumpOpenStackNetworks (e2eCtx , networks.ListOpts {})
75
+ Expect (err ).NotTo (HaveOccurred ())
76
+ initialSecurityGroups , err = shared .DumpOpenStackSecurityGroups (e2eCtx , groups.ListOpts {})
77
+ Expect (err ).NotTo (HaveOccurred ())
78
+ initialLoadBalancers , err = shared .DumpOpenStackLoadBalancers (e2eCtx , loadbalancers.ListOpts {})
79
+ Expect (err ).NotTo (HaveOccurred ())
80
+ initialVolumes , err = shared .DumpOpenStackVolumes (e2eCtx , volumes.ListOpts {})
81
+ Expect (err ).NotTo (HaveOccurred ())
58
82
})
59
83
84
+ func CheckResourceCleanup [T any , L any ](f func (* shared.E2EContext , L ) ([]T , error ), l L , initialResources []T ) * string {
85
+ endResources , err := f (e2eCtx , l )
86
+
87
+ if err != nil {
88
+ return pointer .String (err .Error ())
89
+ }
90
+
91
+ matcher := ConsistOfIDs (initialResources )
92
+ success , err := matcher .Match (endResources )
93
+ if err != nil {
94
+ return pointer .String (err .Error ())
95
+ }
96
+ if ! success {
97
+ return pointer .String (matcher .FailureMessage (endResources ))
98
+ }
99
+
100
+ return nil
101
+ }
102
+
60
103
var _ = SynchronizedAfterSuite (func () {
61
104
shared .AllNodesAfterSuite (e2eCtx )
62
105
}, func () {
106
+ failed := false
107
+ for _ , error := range []* string {
108
+ CheckResourceCleanup (shared .DumpOpenStackServers , servers.ListOpts {}, initialServers ),
109
+ CheckResourceCleanup (shared .DumpOpenStackNetworks , networks.ListOpts {}, initialNetworks ),
110
+ CheckResourceCleanup (shared .DumpOpenStackSecurityGroups , groups.ListOpts {}, initialSecurityGroups ),
111
+ CheckResourceCleanup (shared .DumpOpenStackLoadBalancers , loadbalancers.ListOpts {}, initialLoadBalancers ),
112
+ CheckResourceCleanup (shared .DumpOpenStackVolumes , volumes.ListOpts {}, initialVolumes ),
113
+ } {
114
+ if error != nil {
115
+ GinkgoWriter .Println (* error )
116
+ failed = true
117
+ }
118
+ }
119
+
63
120
shared .Node1AfterSuite (e2eCtx )
121
+
122
+ if failed {
123
+ Fail ("Not all resources were cleaned up" )
124
+ }
64
125
})
0 commit comments