github.com/jquepi/helm@v3.0.0-beta.3+incompatible/cmd/helm/repo_index_test.go (about) 1 /* 2 Copyright The Helm Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package main 18 19 import ( 20 "bytes" 21 "io" 22 "os" 23 "path/filepath" 24 "testing" 25 26 "helm.sh/helm/internal/test/ensure" 27 "helm.sh/helm/pkg/repo" 28 ) 29 30 func TestRepoIndexCmd(t *testing.T) { 31 32 dir := ensure.TempDir(t) 33 34 comp := filepath.Join(dir, "compressedchart-0.1.0.tgz") 35 if err := linkOrCopy("testdata/testcharts/compressedchart-0.1.0.tgz", comp); err != nil { 36 t.Fatal(err) 37 } 38 comp2 := filepath.Join(dir, "compressedchart-0.2.0.tgz") 39 if err := linkOrCopy("testdata/testcharts/compressedchart-0.2.0.tgz", comp2); err != nil { 40 t.Fatal(err) 41 } 42 43 buf := bytes.NewBuffer(nil) 44 c := newRepoIndexCmd(buf) 45 46 if err := c.RunE(c, []string{dir}); err != nil { 47 t.Error(err) 48 } 49 50 destIndex := filepath.Join(dir, "index.yaml") 51 52 index, err := repo.LoadIndexFile(destIndex) 53 if err != nil { 54 t.Fatal(err) 55 } 56 57 if len(index.Entries) != 1 { 58 t.Errorf("expected 1 entry, got %d: %#v", len(index.Entries), index.Entries) 59 } 60 61 vs := index.Entries["compressedchart"] 62 if len(vs) != 2 { 63 t.Errorf("expected 2 versions, got %d: %#v", len(vs), vs) 64 } 65 66 expectedVersion := "0.2.0" 67 if vs[0].Version != expectedVersion { 68 t.Errorf("expected %q, got %q", expectedVersion, vs[0].Version) 69 } 70 71 // Test with `--merge` 72 73 // Remove first two charts. 74 if err := os.Remove(comp); err != nil { 75 t.Fatal(err) 76 } 77 if err := os.Remove(comp2); err != nil { 78 t.Fatal(err) 79 } 80 // Add a new chart and a new version of an existing chart 81 if err := linkOrCopy("testdata/testcharts/reqtest-0.1.0.tgz", filepath.Join(dir, "reqtest-0.1.0.tgz")); err != nil { 82 t.Fatal(err) 83 } 84 if err := linkOrCopy("testdata/testcharts/compressedchart-0.3.0.tgz", filepath.Join(dir, "compressedchart-0.3.0.tgz")); err != nil { 85 t.Fatal(err) 86 } 87 88 c.ParseFlags([]string{"--merge", destIndex}) 89 if err := c.RunE(c, []string{dir}); err != nil { 90 t.Error(err) 91 } 92 93 index, err = repo.LoadIndexFile(destIndex) 94 if err != nil { 95 t.Fatal(err) 96 } 97 98 if len(index.Entries) != 2 { 99 t.Errorf("expected 2 entries, got %d: %#v", len(index.Entries), index.Entries) 100 } 101 102 vs = index.Entries["compressedchart"] 103 if len(vs) != 3 { 104 t.Errorf("expected 3 versions, got %d: %#v", len(vs), vs) 105 } 106 107 expectedVersion = "0.3.0" 108 if vs[0].Version != expectedVersion { 109 t.Errorf("expected %q, got %q", expectedVersion, vs[0].Version) 110 } 111 112 // test that index.yaml gets generated on merge even when it doesn't exist 113 if err := os.Remove(destIndex); err != nil { 114 t.Fatal(err) 115 } 116 117 c.ParseFlags([]string{"--merge", destIndex}) 118 if err := c.RunE(c, []string{dir}); err != nil { 119 t.Error(err) 120 } 121 122 _, err = repo.LoadIndexFile(destIndex) 123 if err != nil { 124 t.Fatal(err) 125 } 126 127 // verify it didn't create an empty index.yaml and the merged happened 128 if len(index.Entries) != 2 { 129 t.Errorf("expected 2 entries, got %d: %#v", len(index.Entries), index.Entries) 130 } 131 132 vs = index.Entries["compressedchart"] 133 if len(vs) != 3 { 134 t.Errorf("expected 3 versions, got %d: %#v", len(vs), vs) 135 } 136 137 expectedVersion = "0.3.0" 138 if vs[0].Version != expectedVersion { 139 t.Errorf("expected %q, got %q", expectedVersion, vs[0].Version) 140 } 141 } 142 143 func linkOrCopy(old, new string) error { 144 if err := os.Link(old, new); err != nil { 145 return copyFile(old, new) 146 } 147 148 return nil 149 } 150 151 func copyFile(dst, src string) error { 152 i, err := os.Open(dst) 153 if err != nil { 154 return err 155 } 156 defer i.Close() 157 158 o, err := os.Create(src) 159 if err != nil { 160 return err 161 } 162 defer o.Close() 163 164 _, err = io.Copy(o, i) 165 166 return err 167 }