Skip to content

Commit 196cc1c

Browse files
committed
test(unit): fix TestAPIMultiOwnerSet_PopAPIKey tests
1 parent 4e6d85c commit 196cc1c

File tree

2 files changed

+30
-20
lines changed

2 files changed

+30
-20
lines changed

pkg/controller/registry/resolver/operators_test.go

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,10 @@ func TestAPIMultiOwnerSet_PopAPIKey(t *testing.T) {
4747
tests := []struct {
4848
name string
4949
s APIMultiOwnerSet
50-
want *opregistry.APIKey
5150
}{
5251
{
5352
name: "Empty",
5453
s: EmptyAPIMultiOwnerSet(),
55-
want: nil,
5654
},
5755
{
5856
name: "OneApi/OneOwner",
@@ -61,7 +59,6 @@ func TestAPIMultiOwnerSet_PopAPIKey(t *testing.T) {
6159
"owner1": &Operator{name: "op1"},
6260
},
6361
},
64-
want: &opregistry.APIKey{"g", "v", "k", "p"},
6562
},
6663
{
6764
name: "OneApi/MultiOwner",
@@ -71,7 +68,6 @@ func TestAPIMultiOwnerSet_PopAPIKey(t *testing.T) {
7168
"owner2": &Operator{name: "op2"},
7269
},
7370
},
74-
want: &opregistry.APIKey{"g", "v", "k", "p"},
7571
},
7672
{
7773
name: "MultipleApi/MultiOwner",
@@ -85,24 +81,20 @@ func TestAPIMultiOwnerSet_PopAPIKey(t *testing.T) {
8581
"owner2": &Operator{name: "op2"},
8682
},
8783
},
88-
want: &opregistry.APIKey{"g", "v", "k", "p"},
8984
},
9085
}
9186
for _, tt := range tests {
9287
t.Run(tt.name, func(t *testing.T) {
9388
startLen := len(tt.s)
94-
require.Equal(t, tt.s.PopAPIKey(), tt.want)
9589

96-
// Verify entry removed once popped
97-
if tt.want != nil {
98-
_, ok := tt.s[*tt.want]
99-
require.False(t, ok)
100-
}
90+
popped := tt.s.PopAPIKey()
10191

102-
// Verify len has decreased
10392
if startLen == 0 {
93+
require.Nil(t, popped, "popped key from empty MultiOwnerSet should be nil")
10494
require.Equal(t, 0, len(tt.s))
10595
} else {
96+
_, found := tt.s[*popped]
97+
require.False(t, found, "popped key should not still exist in set")
10698
require.Equal(t, startLen-1, len(tt.s))
10799
}
108100
})

pkg/package-server/provider/registry.go

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"google.golang.org/grpc/connectivity"
1515
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1616
"k8s.io/apimachinery/pkg/labels"
17+
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
1718
"k8s.io/client-go/tools/cache"
1819
"k8s.io/client-go/util/workqueue"
1920

@@ -100,18 +101,17 @@ func (p *RegistryProvider) setClient(client registryClient, key sourceKey) {
100101
p.clients[key] = client
101102
}
102103

103-
func (p *RegistryProvider) removeClient(key sourceKey) bool {
104+
func (p *RegistryProvider) removeClient(key sourceKey) (registryClient, bool) {
104105
p.mu.Lock()
105106
defer p.mu.Unlock()
106107

107108
client, ok := p.clients[key]
108109
if !ok {
109-
return false
110+
return registryClient{}, false
110111
}
111112

112-
client.conn.Close()
113113
delete(p.clients, key)
114-
return true
114+
return client, true
115115
}
116116

117117
func (p *RegistryProvider) syncCatalogSource(obj interface{}) (syncError error) {
@@ -144,6 +144,7 @@ func (p *RegistryProvider) syncCatalogSource(obj interface{}) (syncError error)
144144
if !changed {
145145
logger.Debugf("grpc connection reset timeout")
146146
syncError = fmt.Errorf("grpc connection reset timeout")
147+
return
147148
}
148149

149150
logger.Info("grpc connection reset")
@@ -165,10 +166,21 @@ func (p *RegistryProvider) syncCatalogSource(obj interface{}) (syncError error)
165166
}
166167

167168
func (p *RegistryProvider) catalogSourceDeleted(obj interface{}) {
168-
catsrc, ok := obj.(*operatorsv1alpha1.CatalogSource)
169+
catsrc, ok := obj.(metav1.Object)
169170
if !ok {
170-
logrus.Errorf("catalogsource type assertion failed: wrong type: %#v", obj)
171-
return
171+
if !ok {
172+
tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
173+
if !ok {
174+
utilruntime.HandleError(fmt.Errorf("couldn't get object from tombstone %#v", obj))
175+
return
176+
}
177+
178+
catsrc, ok = tombstone.Obj.(metav1.Object)
179+
if !ok {
180+
utilruntime.HandleError(fmt.Errorf("tombstone contained object that is not a Namespace %#v", obj))
181+
return
182+
}
183+
}
172184
}
173185

174186
logger := logrus.WithFields(logrus.Fields{
@@ -179,8 +191,14 @@ func (p *RegistryProvider) catalogSourceDeleted(obj interface{}) {
179191
logger.Debugf("attempting to remove grpc connection")
180192

181193
key := sourceKey{catsrc.GetName(), catsrc.GetNamespace()}
182-
removed := p.removeClient(key)
194+
client, removed := p.removeClient(key)
183195
if removed {
196+
err := client.conn.Close()
197+
if err != nil {
198+
logger.WithField("err", err.Error()).Error("error closing connection")
199+
utilruntime.HandleError(fmt.Errorf("error closing connection %s", err.Error()))
200+
return
201+
}
184202
logger.Debug("grpc connection removed")
185203
return
186204
}

0 commit comments

Comments
 (0)