@@ -18,6 +18,7 @@ package property_test
18
18
19
19
import (
20
20
"context"
21
+ "fmt"
21
22
"testing"
22
23
"time"
23
24
@@ -110,6 +111,64 @@ func TestWaitForUpdatesEx(t *testing.T) {
110
111
}, model )
111
112
}
112
113
114
+ func TestWaitForUpdatesExEmptyUpdateSet (t * testing.T ) {
115
+ model := simulator .VPX ()
116
+ model .Datacenter = 1
117
+ model .Cluster = 0
118
+ model .Pool = 0
119
+ model .Machine = 0
120
+ model .Autostart = false
121
+
122
+ simulator .Test (func (ctx context.Context , c * vim25.Client ) {
123
+ // Set up the finder and get a VM.
124
+ finder := find .NewFinder (c , true )
125
+ datacenter , err := finder .DefaultDatacenter (ctx )
126
+ if err != nil {
127
+ t .Fatalf ("default datacenter not found: %s" , err .Error ())
128
+ }
129
+ finder .SetDatacenter (datacenter )
130
+ vmList , err := finder .VirtualMachineList (ctx , "*" )
131
+ if len (vmList ) != 0 {
132
+ t .Fatalf ("vmList != 0" )
133
+ }
134
+
135
+ pc , err := property .DefaultCollector (c ).Create (ctx )
136
+ if err != nil {
137
+ t .Fatalf ("failed to create new property collector: %s" , err .Error ())
138
+ }
139
+
140
+ // Start a goroutine to wait for updates on any VMs.
141
+ // Since there are no VMs in the filter set, we expect to
142
+ // receive an empty update set.
143
+ chanResult := make (chan error )
144
+ cancelCtx , cancel := context .WithCancel (ctx )
145
+ go func () {
146
+ defer close (chanResult )
147
+ _ = pc .WaitForUpdatesEx (
148
+ cancelCtx ,
149
+ & property.WaitOptions {},
150
+ func (updates []types.ObjectUpdate ) bool {
151
+ var err error
152
+ if len (updates ) > 0 {
153
+ err = fmt .Errorf ("unexpected update" )
154
+ }
155
+ chanResult <- err
156
+ cancel ()
157
+ return true
158
+ })
159
+ }()
160
+
161
+ select {
162
+ case <- ctx .Done ():
163
+ t .Fatalf ("timed out while waiting for updates" )
164
+ case err := <- chanResult :
165
+ if err != nil {
166
+ t .Fatalf ("error while waiting for updates: %s" , err .Error ())
167
+ }
168
+ }
169
+ }, model )
170
+ }
171
+
113
172
func TestRetrievePropertiesOneAtATime (t * testing.T ) {
114
173
model := simulator .VPX ()
115
174
model .Datacenter = 1
0 commit comments