Skip to content

Commit

Permalink
Update PkgManifest upon catsrc update
Browse files Browse the repository at this point in the history
The catsrc update sync triggered by the informer does not update pkgmanifest. This commit adds an update mechanism.
  • Loading branch information
bowenislandsong committed Apr 29, 2020
1 parent 15f5ba3 commit a8b8e85
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 0 deletions.
11 changes: 11 additions & 0 deletions pkg/package-server/provider/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,18 @@ func (p *RegistryProvider) syncCatalogSource(obj interface{}) (syncError error)
Namespace: source.GetNamespace(),
Name: source.GetName(),
}

if sourceMeta := p.sources.GetMeta(key); sourceMeta != nil && sourceMeta.Address == address {
logger.Infof("updating PackageManifest based on CatalogSource changes: %v", key)
timeout, cancel := context.WithTimeout(context.Background(), cacheTimeout)
defer cancel()
client, err := p.registryClient(key)
if err == nil {
syncError = p.refreshCache(timeout, client)
} else {
syncError = err
}

// If the address hasn't changed, don't bother creating a new source
logger.Debug("catalog address unchanged, skipping source creation")
return
Expand Down
68 changes: 68 additions & 0 deletions test/e2e/packagemanifest_e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,74 @@ var _ = Describe("Package Manifest", func() {
require.True(GinkgoT(), ok, "Expect this image %s to exist in the related images list\n", v)
}
})
It("updating CatalogSource", func() {

defer cleaner.NotifyTestComplete(GinkgoT(), true)

sourceName := genName("catalog-")
packageName := "etcd-test"
displayName := "etcd test catalog"
image := "quay.io/olmtest/catsrc-update-test:related"

crc := newCRClient(GinkgoT())
pmc := newPMClient(GinkgoT())

source := &v1alpha1.CatalogSource{
TypeMeta: metav1.TypeMeta{
Kind: v1alpha1.CatalogSourceKind,
APIVersion: v1alpha1.CatalogSourceCRDAPIVersion,
},
ObjectMeta: metav1.ObjectMeta{
Name: sourceName,
Namespace: testNamespace,
Labels: map[string]string{"olm.catalogSource": sourceName},
},
Spec: v1alpha1.CatalogSourceSpec{
SourceType: v1alpha1.SourceTypeGrpc,
Image: image,
DisplayName: displayName,
},
}

source, err := crc.OperatorsV1alpha1().CatalogSources(source.GetNamespace()).Create(context.TODO(), source, metav1.CreateOptions{})
require.NoError(GinkgoT(), err)
defer func() {
require.NoError(GinkgoT(), crc.OperatorsV1alpha1().CatalogSources(source.GetNamespace()).Delete(context.TODO(), source.GetName(), metav1.DeleteOptions{}))
}()

// Wait for package-server to be ready
err = wait.Poll(pollInterval, 1*time.Minute, func() (bool, error) {
GinkgoT().Logf("Polling package-server...")
_, err := pmc.OperatorsV1().PackageManifests(testNamespace).List(context.TODO(), metav1.ListOptions{})
if err == nil {
return true, nil
}
return false, nil
})
require.NoError(GinkgoT(), err, "package-server not available")

_, err = fetchCatalogSource(GinkgoT(), crc, source.GetName(), testNamespace, catalogSourceRegistryPodSynced)
require.NoError(GinkgoT(), err)

pm, err := fetchPackageManifest(GinkgoT(), pmc, testNamespace, packageName, packageManifestHasStatus)
require.NoError(GinkgoT(), err, "error getting package manifest")
require.NotNil(GinkgoT(), pm)
require.Equal(GinkgoT(), packageName, pm.GetName())
require.Equal(GinkgoT(), displayName, pm.Status.CatalogSourceDisplayName)

source, err = crc.OperatorsV1alpha1().CatalogSources(source.GetNamespace()).Get(context.TODO(), source.GetName(), metav1.GetOptions{})
require.NoError(GinkgoT(), err)
source.Spec.DisplayName = "updated Name"

_, err = crc.OperatorsV1alpha1().CatalogSources(source.GetNamespace()).Update(context.TODO(), source,
metav1.UpdateOptions{})
require.NoError(GinkgoT(), err)

pm, err = fetchPackageManifest(GinkgoT(), pmc, testNamespace, packageName, packageManifestHasStatus)
require.NoError(GinkgoT(), err, "error getting package manifest after updating catsrc")
require.Equal(GinkgoT(), "updated Name", pm.Status.CatalogSourceDisplayName)

})
})

type packageManifestCheckFunc func(*packagev1.PackageManifest) bool
Expand Down

0 comments on commit a8b8e85

Please sign in to comment.