github.com/Beeketing/helm@v2.12.1+incompatible/pkg/chartutil/files_test.go (about) 1 /* 2 Copyright The Helm Authors. 3 Licensed under the Apache License, Version 2.0 (the "License"); 4 you may not use this file except in compliance with the License. 5 You may obtain a copy of the License at 6 7 http://www.apache.org/licenses/LICENSE-2.0 8 9 Unless required by applicable law or agreed to in writing, software 10 distributed under the License is distributed on an "AS IS" BASIS, 11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 See the License for the specific language governing permissions and 13 limitations under the License. 14 */ 15 16 package chartutil 17 18 import ( 19 "testing" 20 21 "github.com/golang/protobuf/ptypes/any" 22 "github.com/stretchr/testify/assert" 23 ) 24 25 var cases = []struct { 26 path, data string 27 }{ 28 {"ship/captain.txt", "The Captain"}, 29 {"ship/stowaway.txt", "Legatt"}, 30 {"story/name.txt", "The Secret Sharer"}, 31 {"story/author.txt", "Joseph Conrad"}, 32 {"multiline/test.txt", "bar\nfoo"}, 33 } 34 35 func getTestFiles() []*any.Any { 36 a := []*any.Any{} 37 for _, c := range cases { 38 a = append(a, &any.Any{TypeUrl: c.path, Value: []byte(c.data)}) 39 } 40 return a 41 } 42 43 func TestNewFiles(t *testing.T) { 44 files := NewFiles(getTestFiles()) 45 if len(files) != len(cases) { 46 t.Errorf("Expected len() = %d, got %d", len(cases), len(files)) 47 } 48 49 for i, f := range cases { 50 if got := string(files.GetBytes(f.path)); got != f.data { 51 t.Errorf("%d: expected %q, got %q", i, f.data, got) 52 } 53 if got := files.Get(f.path); got != f.data { 54 t.Errorf("%d: expected %q, got %q", i, f.data, got) 55 } 56 } 57 } 58 59 func TestFileGlob(t *testing.T) { 60 as := assert.New(t) 61 62 f := NewFiles(getTestFiles()) 63 64 matched := f.Glob("story/**") 65 66 as.Len(matched, 2, "Should be two files in glob story/**") 67 as.Equal("Joseph Conrad", matched.Get("story/author.txt")) 68 } 69 70 func TestToConfig(t *testing.T) { 71 as := assert.New(t) 72 73 f := NewFiles(getTestFiles()) 74 out := f.Glob("**/captain.txt").AsConfig() 75 as.Equal("captain.txt: The Captain\n", out) 76 77 out = f.Glob("ship/**").AsConfig() 78 as.Equal("captain.txt: The Captain\nstowaway.txt: Legatt\n", out) 79 } 80 81 func TestToSecret(t *testing.T) { 82 as := assert.New(t) 83 84 f := NewFiles(getTestFiles()) 85 86 out := f.Glob("ship/**").AsSecrets() 87 as.Equal("captain.txt: VGhlIENhcHRhaW4=\nstowaway.txt: TGVnYXR0\n", out) 88 } 89 90 func TestLines(t *testing.T) { 91 as := assert.New(t) 92 93 f := NewFiles(getTestFiles()) 94 95 out := f.Lines("multiline/test.txt") 96 as.Len(out, 2) 97 98 as.Equal("bar", out[0]) 99 } 100 101 func TestToYaml(t *testing.T) { 102 expect := "foo: bar\n" 103 v := struct { 104 Foo string `json:"foo"` 105 }{ 106 Foo: "bar", 107 } 108 109 if got := ToYaml(v); got != expect { 110 t.Errorf("Expected %q, got %q", expect, got) 111 } 112 } 113 114 func TestToToml(t *testing.T) { 115 expect := "foo = \"bar\"\n" 116 v := struct { 117 Foo string `toml:"foo"` 118 }{ 119 Foo: "bar", 120 } 121 122 if got := ToToml(v); got != expect { 123 t.Errorf("Expected %q, got %q", expect, got) 124 } 125 126 // Regression for https://github.com/kubernetes/helm/issues/2271 127 dict := map[string]map[string]string{ 128 "mast": { 129 "sail": "white", 130 }, 131 } 132 got := ToToml(dict) 133 expect = "[mast]\n sail = \"white\"\n" 134 if got != expect { 135 t.Errorf("Expected:\n%s\nGot\n%s\n", expect, got) 136 } 137 } 138 139 func TestFromYaml(t *testing.T) { 140 doc := `hello: world 141 one: 142 two: three 143 ` 144 dict := FromYaml(doc) 145 if err, ok := dict["Error"]; ok { 146 t.Fatalf("Parse error: %s", err) 147 } 148 149 if len(dict) != 2 { 150 t.Fatal("expected two elements.") 151 } 152 153 world := dict["hello"] 154 if world.(string) != "world" { 155 t.Fatal("Expected the world. Is that too much to ask?") 156 } 157 158 // This should fail because we don't currently support lists: 159 doc2 := ` 160 - one 161 - two 162 - three 163 ` 164 dict = FromYaml(doc2) 165 if _, ok := dict["Error"]; !ok { 166 t.Fatal("Expected parser error") 167 } 168 } 169 170 func TestToJson(t *testing.T) { 171 expect := `{"foo":"bar"}` 172 v := struct { 173 Foo string `json:"foo"` 174 }{ 175 Foo: "bar", 176 } 177 178 if got := ToJson(v); got != expect { 179 t.Errorf("Expected %q, got %q", expect, got) 180 } 181 } 182 183 func TestFromJson(t *testing.T) { 184 doc := `{ 185 "hello": "world", 186 "one": { 187 "two": "three" 188 } 189 } 190 ` 191 dict := FromJson(doc) 192 if err, ok := dict["Error"]; ok { 193 t.Fatalf("Parse error: %s", err) 194 } 195 196 if len(dict) != 2 { 197 t.Fatal("expected two elements.") 198 } 199 200 world := dict["hello"] 201 if world.(string) != "world" { 202 t.Fatal("Expected the world. Is that too much to ask?") 203 } 204 205 // This should fail because we don't currently support lists: 206 doc2 := ` 207 [ 208 "one", 209 "two", 210 "three" 211 ] 212 ` 213 dict = FromJson(doc2) 214 if _, ok := dict["Error"]; !ok { 215 t.Fatal("Expected parser error") 216 } 217 }