Skip to content

Commit 218a6bb

Browse files
ankitathomastmshort
authored andcommitted
unpack retry e2e tests
Signed-off-by: Ankita Thomas <[email protected]>
1 parent 07d8b91 commit 218a6bb

File tree

8 files changed

+346
-15
lines changed

8 files changed

+346
-15
lines changed

Diff for: pkg/controller/bundle/bundle_unpacker.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"k8s.io/apimachinery/pkg/api/resource"
1919
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2020
k8slabels "k8s.io/apimachinery/pkg/labels"
21+
"k8s.io/apiserver/pkg/storage/names"
2122
"k8s.io/client-go/kubernetes"
2223
listersbatchv1 "k8s.io/client-go/listers/batch/v1"
2324
listerscorev1 "k8s.io/client-go/listers/core/v1"
@@ -96,6 +97,7 @@ func (c *ConfigMapUnpacker) job(cmRef *corev1.ObjectReference, bundlePath string
9697
ObjectMeta: metav1.ObjectMeta{
9798
Labels: map[string]string{
9899
install.OLMManagedLabelKey: install.OLMManagedLabelValue,
100+
bundleUnpackRefLabel: cmRef.Name,
99101
},
100102
},
101103
Spec: batchv1.JobSpec{
@@ -254,7 +256,6 @@ func (c *ConfigMapUnpacker) job(cmRef *corev1.ObjectReference, bundlePath string
254256
}
255257
job.SetNamespace(cmRef.Namespace)
256258
job.SetName(cmRef.Name)
257-
job.SetLabels(map[string]string{bundleUnpackRefLabel: cmRef.Name})
258259
job.SetOwnerReferences([]metav1.OwnerReference{ownerRef(cmRef)})
259260
if c.runAsUser > 0 {
260261
job.Spec.Template.Spec.SecurityContext.RunAsUser = &c.runAsUser
@@ -695,10 +696,10 @@ func (c *ConfigMapUnpacker) ensureJob(cmRef *corev1.ObjectReference, bundlePath
695696

696697
if failed {
697698
if time.Now().After(lastFailureTime.Add(unpackRetryInterval)) {
698-
fresh.SetName(fmt.Sprintf("%s-%d", fresh.GetName(), len(jobs)))
699+
fresh.SetName(names.SimpleNameGenerator.GenerateName(fresh.GetName()))
699700
job, err = c.client.BatchV1().Jobs(fresh.GetNamespace()).Create(context.TODO(), fresh, metav1.CreateOptions{})
700-
return
701701
}
702+
return
702703
}
703704
}
704705
}
@@ -890,7 +891,7 @@ func OperatorGroupBundleUnpackRetryInterval(ogLister v1listers.OperatorGroupName
890891

891892
d, err := time.ParseDuration(timeoutStr)
892893
if err != nil {
893-
return 0, fmt.Errorf("failed to parse unpack timeout annotation(%s: %s): %w", BundleUnpackRetryMinimumIntervalAnnotationKey, timeoutStr, err)
894+
return 0, fmt.Errorf("failed to parse unpack retry annotation(%s: %s): %w", BundleUnpackRetryMinimumIntervalAnnotationKey, timeoutStr, err)
894895
}
895896

896897
return d, nil

Diff for: pkg/controller/bundle/bundle_unpacker_test.go

+113-1
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ func TestConfigMapUnpacker(t *testing.T) {
208208
ObjectMeta: metav1.ObjectMeta{
209209
Name: pathHash,
210210
Namespace: "ns-a",
211-
Labels: map[string]string{install.OLMManagedLabelKey: install.OLMManagedLabelValue},
211+
Labels: map[string]string{install.OLMManagedLabelKey: install.OLMManagedLabelValue, bundleUnpackRefLabel: pathHash},
212212
OwnerReferences: []metav1.OwnerReference{
213213
{
214214
APIVersion: "v1",
@@ -1839,3 +1839,115 @@ func TestOperatorGroupBundleUnpackTimeout(t *testing.T) {
18391839
})
18401840
}
18411841
}
1842+
1843+
func TestOperatorGroupBundleUnpackRetryInterval(t *testing.T) {
1844+
nsName := "fake-ns"
1845+
1846+
for _, tc := range []struct {
1847+
name string
1848+
operatorGroups []*operatorsv1.OperatorGroup
1849+
expectedTimeout time.Duration
1850+
expectedError error
1851+
}{
1852+
{
1853+
name: "No operator groups exist",
1854+
expectedTimeout: 0,
1855+
expectedError: errors.New("found 0 operatorGroups, expected 1"),
1856+
},
1857+
{
1858+
name: "Multiple operator groups exist",
1859+
operatorGroups: []*operatorsv1.OperatorGroup{
1860+
{
1861+
TypeMeta: metav1.TypeMeta{
1862+
Kind: operatorsv1.OperatorGroupKind,
1863+
APIVersion: operatorsv1.GroupVersion.String(),
1864+
},
1865+
ObjectMeta: metav1.ObjectMeta{
1866+
Name: "og1",
1867+
Namespace: nsName,
1868+
},
1869+
},
1870+
{
1871+
TypeMeta: metav1.TypeMeta{
1872+
Kind: operatorsv1.OperatorGroupKind,
1873+
APIVersion: operatorsv1.GroupVersion.String(),
1874+
},
1875+
ObjectMeta: metav1.ObjectMeta{
1876+
Name: "og2",
1877+
Namespace: nsName,
1878+
},
1879+
},
1880+
},
1881+
expectedTimeout: 0,
1882+
expectedError: errors.New("found 2 operatorGroups, expected 1"),
1883+
},
1884+
{
1885+
name: "One operator group exists with valid unpack retry annotation",
1886+
operatorGroups: []*operatorsv1.OperatorGroup{
1887+
{
1888+
TypeMeta: metav1.TypeMeta{
1889+
Kind: operatorsv1.OperatorGroupKind,
1890+
APIVersion: operatorsv1.GroupVersion.String(),
1891+
},
1892+
ObjectMeta: metav1.ObjectMeta{
1893+
Name: "og",
1894+
Namespace: nsName,
1895+
Annotations: map[string]string{BundleUnpackRetryMinimumIntervalAnnotationKey: "1m"},
1896+
},
1897+
},
1898+
},
1899+
expectedTimeout: 1 * time.Minute,
1900+
expectedError: nil,
1901+
},
1902+
{
1903+
name: "One operator group exists with no unpack retry annotation",
1904+
operatorGroups: []*operatorsv1.OperatorGroup{
1905+
{
1906+
TypeMeta: metav1.TypeMeta{
1907+
Kind: operatorsv1.OperatorGroupKind,
1908+
APIVersion: operatorsv1.GroupVersion.String(),
1909+
},
1910+
ObjectMeta: metav1.ObjectMeta{
1911+
Name: "og",
1912+
Namespace: nsName,
1913+
},
1914+
},
1915+
},
1916+
expectedTimeout: 0,
1917+
expectedError: nil,
1918+
},
1919+
{
1920+
name: "One operator group exists with invalid unpack retry annotation",
1921+
operatorGroups: []*operatorsv1.OperatorGroup{
1922+
{
1923+
TypeMeta: metav1.TypeMeta{
1924+
Kind: operatorsv1.OperatorGroupKind,
1925+
APIVersion: operatorsv1.GroupVersion.String(),
1926+
},
1927+
ObjectMeta: metav1.ObjectMeta{
1928+
Name: "og",
1929+
Namespace: nsName,
1930+
Annotations: map[string]string{BundleUnpackRetryMinimumIntervalAnnotationKey: "invalid"},
1931+
},
1932+
},
1933+
},
1934+
expectedTimeout: 0,
1935+
expectedError: fmt.Errorf("failed to parse unpack retry annotation(operatorframework.io/bundle-unpack-min-retry-interval: invalid): %w", errors.New("time: invalid duration \"invalid\"")),
1936+
},
1937+
} {
1938+
t.Run(tc.name, func(t *testing.T) {
1939+
ogIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{})
1940+
ogLister := v1listers.NewOperatorGroupLister(ogIndexer).OperatorGroups(nsName)
1941+
1942+
for _, og := range tc.operatorGroups {
1943+
err := ogIndexer.Add(og)
1944+
assert.NoError(t, err)
1945+
}
1946+
1947+
timeout, err := OperatorGroupBundleUnpackRetryInterval(ogLister)
1948+
1949+
assert.Equal(t, tc.expectedTimeout, timeout)
1950+
assert.Equal(t, tc.expectedError, err)
1951+
})
1952+
}
1953+
}

Diff for: pkg/controller/bundle/bundlefakes/fake_unpacker.go

+10-8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: pkg/controller/operators/catalog/subscriptions_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1172,7 +1172,7 @@ func TestSyncSubscriptions(t *testing.T) {
11721172
defer cancel()
11731173

11741174
fakeBundleUnpacker := &bundlefakes.FakeUnpacker{
1175-
UnpackBundleStub: func(lookup *v1alpha1.BundleLookup, timeout time.Duration) (*bundle.BundleUnpackResult, error) {
1175+
UnpackBundleStub: func(lookup *v1alpha1.BundleLookup, timeout, retryInterval time.Duration) (*bundle.BundleUnpackResult, error) {
11761176
return &bundle.BundleUnpackResult{BundleLookup: lookup.DeepCopy()}, tt.fields.unpackBundleErr
11771177
},
11781178
}

Diff for: test/e2e/fbc_provider.go

+6
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,9 @@ func NewFileBasedFiledBasedCatalogProvider(path string) (FileBasedCatalogProvide
3131
func (f *fileBasedFileBasedCatalogProvider) GetCatalog() string {
3232
return f.fbc
3333
}
34+
35+
func NewRawFileBasedCatalogProvider(data string) (FileBasedCatalogProvider, error) {
36+
return &fileBasedFileBasedCatalogProvider{
37+
fbc: string(data),
38+
}, nil
39+
}

Diff for: test/e2e/registry.go

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ func createDockerRegistry(client operatorclient.ClientInterface, namespace strin
5454
Port: int32(5000),
5555
},
5656
},
57+
Type: corev1.ServiceTypeNodePort,
5758
},
5859
}
5960

0 commit comments

Comments
 (0)