From d3cf418c6eaa4b55b983ca3315dbf75b4d0e42ac Mon Sep 17 00:00:00 2001 From: andrew_li <6263928+xyz-li@users.noreply.github.com> Date: Wed, 24 Aug 2022 14:08:35 +0800 Subject: [PATCH] Fix: index out of range when merging two repo indexes (#5146) --- .../openpitrix/helmrepoindex/repo_index.go | 3 + .../helmrepoindex/repo_index_test.go | 99 ++++++++++++++++++- 2 files changed, 101 insertions(+), 1 deletion(-) diff --git a/pkg/simple/client/openpitrix/helmrepoindex/repo_index.go b/pkg/simple/client/openpitrix/helmrepoindex/repo_index.go index 2a2a2c219..65e48590d 100644 --- a/pkg/simple/client/openpitrix/helmrepoindex/repo_index.go +++ b/pkg/simple/client/openpitrix/helmrepoindex/repo_index.go @@ -99,6 +99,9 @@ func MergeRepoIndex(repo *v1alpha1.HelmRepo, index *helmrepo.IndexFile, existsSa allAppNames := make(map[string]struct{}, len(index.Entries)) for name, versions := range index.Entries { + if len(versions) == 0 { + continue + } // add new applications if application, exists := saved.Applications[name]; !exists { application = &Application{ diff --git a/pkg/simple/client/openpitrix/helmrepoindex/repo_index_test.go b/pkg/simple/client/openpitrix/helmrepoindex/repo_index_test.go index 420e889ee..0177bc331 100644 --- a/pkg/simple/client/openpitrix/helmrepoindex/repo_index_test.go +++ b/pkg/simple/client/openpitrix/helmrepoindex/repo_index_test.go @@ -50,5 +50,102 @@ func TestLoadRepo(t *testing.T) { _ = chartData break } - +} + +var indexData1 = ` +apiVersion: v1 +entries: + apisix: [] + apisix-dashboard: + - apiVersion: v2 + appVersion: 2.9.0 + created: "2021-11-15T08:23:00.343784368Z" + description: A Helm chart for Apache APISIX Dashboard + digest: 76f794b1300f7bfb756ede352fe71eb863b89f1995b495e8b683990709e310ad + icon: https://apache.org/logos/res/apisix/apisix.png + maintainers: + - email: zhangjintao@apache.org + name: tao12345666333 + name: apisix-dashboard + type: application + urls: + - https://charts.kubesphere.io/main/apisix-dashboard-0.3.0.tgz + version: 0.3.0 +` +var indexData2 = ` +apiVersion: v1 +entries: + apisix: + - apiVersion: v2 + appVersion: 2.10.0 + created: "2021-11-15T08:23:00.343234584Z" + dependencies: + - condition: etcd.enabled + name: etcd + repository: https://charts.bitnami.com/bitnami + version: 6.2.6 + - alias: dashboard + condition: dashboard.enabled + name: apisix-dashboard + repository: https://charts.apiseven.com + version: 0.3.0 + - alias: ingress-controller + condition: ingress-controller.enabled + name: apisix-ingress-controller + repository: https://charts.apiseven.com + version: 0.8.0 + description: A Helm chart for Apache APISIX + digest: fed38a11c0fb54d385144767227e43cb2961d1b50d36ea207fdd122bddd3de28 + icon: https://apache.org/logos/res/apisix/apisix.png + maintainers: + - email: zhangjintao@apache.org + name: tao12345666333 + name: apisix + type: application + urls: + - https://charts.kubesphere.io/main/apisix-0.7.2.tgz + version: 0.7.2 + apisix-dashboard: + - apiVersion: v2 + appVersion: 2.9.0 + created: "2021-11-15T08:23:00.343784368Z" + description: A Helm chart for Apache APISIX Dashboard + digest: 76f794b1300f7bfb756ede352fe71eb863b89f1995b495e8b683990709e310ad + icon: https://apache.org/logos/res/apisix/apisix.png + maintainers: + - email: zhangjintao@apache.org + name: tao12345666333 + name: apisix-dashboard + type: application + urls: + - https://charts.kubesphere.io/main/apisix-dashboard-0.3.0.tgz + version: 0.3.0 +` + +func TestMergeRepo(t *testing.T) { + repoIndex1, err := loadIndex([]byte(indexData1)) + if err != nil { + t.Errorf("failed to load repo index") + t.Failed() + } + existsSavedIndex := &SavedIndex{} + repoCR := &v1alpha1.HelmRepo{} + + savedIndex1 := MergeRepoIndex(repoCR, repoIndex1, existsSavedIndex) + if len(savedIndex1.Applications) != 1 { + t.Errorf("faied to merge repo index with empty repo") + t.Failed() + } + + repoIndex2, err := loadIndex([]byte(indexData2)) + if err != nil { + t.Errorf("failed to load repo index") + t.Failed() + } + + savedIndex2 := MergeRepoIndex(repoCR, repoIndex2, savedIndex1) + if len(savedIndex2.Applications) != 2 { + t.Errorf("faied to merge two repo index") + t.Failed() + } }