@@ -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,56 @@ 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
+ if err != nil {
87
+ return pointer .String (err .Error ())
88
+ }
89
+
90
+ matcher := ConsistOfIDs (initialResources )
91
+ success , err := matcher .Match (endResources )
92
+ if err != nil {
93
+ return pointer .String (err .Error ())
94
+ }
95
+ if ! success {
96
+ return pointer .String (matcher .FailureMessage (endResources ))
97
+ }
98
+
99
+ return nil
100
+ }
101
+
60
102
var _ = SynchronizedAfterSuite (func () {
61
103
shared .AllNodesAfterSuite (e2eCtx )
62
104
}, func () {
105
+ failed := false
106
+ for _ , error := range []* string {
107
+ CheckResourceCleanup (shared .DumpOpenStackServers , servers.ListOpts {}, initialServers ),
108
+ CheckResourceCleanup (shared .DumpOpenStackNetworks , networks.ListOpts {}, initialNetworks ),
109
+ CheckResourceCleanup (shared .DumpOpenStackSecurityGroups , groups.ListOpts {}, initialSecurityGroups ),
110
+ CheckResourceCleanup (shared .DumpOpenStackLoadBalancers , loadbalancers.ListOpts {}, initialLoadBalancers ),
111
+ CheckResourceCleanup (shared .DumpOpenStackVolumes , volumes.ListOpts {}, initialVolumes ),
112
+ } {
113
+ if error != nil {
114
+ GinkgoWriter .Println (* error )
115
+ failed = true
116
+ }
117
+ }
118
+
63
119
shared .Node1AfterSuite (e2eCtx )
120
+
121
+ if failed {
122
+ Fail ("Not all resources were cleaned up" )
123
+ }
64
124
})
0 commit comments