2 // ========================LICENSE_START=================================
5 // Copyright (C) 2022: Nordix Foundation
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 // ========================LICENSE_END===================================
21 package helmmanagement
32 "github.com/stretchr/testify/assert"
33 "github.com/stretchr/testify/mock"
35 "helm.sh/helm/v3/pkg/cli"
36 "helm.sh/helm/v3/pkg/getter"
37 "helm.sh/helm/v3/pkg/repo"
38 "helm.sh/helm/v3/pkg/time"
39 "oransc.org/nonrtric/capifcore/internal/helmmanagement/mocks"
42 func TestNoChartURL_repoNotSetUp(t *testing.T) {
43 managerUnderTest := NewHelmManager(nil)
45 res := managerUnderTest.SetUpRepo("repoName", "")
48 assert.False(t, managerUnderTest.setUp)
51 func TestSetUpRepoExistingRepoFile_repoShouldBeAddedToReposFile(t *testing.T) {
52 settings := createReposFile(t)
54 managerUnderTest := NewHelmManager(settings)
56 repoName := filepath.Dir(settings.RepositoryConfig)
57 repoURL := "http://url"
58 managerUnderTest.repo = getChartRepo(settings)
60 res := managerUnderTest.SetUpRepo(repoName, repoURL)
63 assert.True(t, containsRepo(settings.RepositoryConfig, repoName))
64 assert.True(t, managerUnderTest.setUp)
67 func TestSetUpRepoFail_shouldNotBeSetUp(t *testing.T) {
68 settings := createReposFile(t)
70 managerUnderTest := NewHelmManager(settings)
72 res := managerUnderTest.SetUpRepo("repoName", "repoURL")
75 assert.False(t, managerUnderTest.setUp)
78 func createReposFile(t *testing.T) *cli.EnvSettings {
79 reposDir, err := os.MkdirTemp("", "helm")
81 t.Errorf("Unable to create temporary directory for repos due to: %v", err)
84 os.RemoveAll(reposDir)
87 reposFile := reposDir + "/index.yaml"
88 settings := &cli.EnvSettings{
89 RepositoryConfig: reposFile,
92 repoData := repo.File{
93 Generated: time.Now().Time,
94 Repositories: []*repo.Entry{},
96 data, err := yaml.Marshal(&repoData)
98 assert.Fail(t, "Unable to marshal repo config yaml")
100 err2 := os.WriteFile(settings.RepositoryConfig, data, 0666)
102 assert.Fail(t, "Unable to write repo config file")
107 func getChartRepo(settings *cli.EnvSettings) *repo.ChartRepository {
108 repoURL := "http://repoURL"
110 Name: filepath.Dir(settings.RepositoryConfig),
113 r, _ := repo.NewChartRepository(&c, getter.All(settings))
114 r.Client = getCLientMock(repoURL)
118 func getCLientMock(repoURL string) *mocks.Getter {
119 clientMock := &mocks.Getter{}
120 b := []byte("apiVersion: v1\nentries: {}\ngenerated: \"2022-10-28T09:14:08+02:00\"\nserverInfo: {}\n")
121 z := bytes.NewBuffer(b)
122 clientMock.On("Get", repoURL+"/index.yaml", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(z, nil)
126 func containsRepo(repoFile, repoName string) bool {
127 file, err := os.Open(repoFile)
129 log.Fatalf("Error opening repository file: %v", err)
131 defer func(file *os.File) {
135 scanner := bufio.NewScanner(file)
137 row := scanner.Text()
138 if strings.Contains(row, repoName) {