github.com/lyanchih/helm@v2.2.3+incompatible/cmd/helm/create_test.go (about) 1 /* 2 Copyright 2016 The Kubernetes Authors All rights reserved. 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 "io/ioutil" 21 "os" 22 "path/filepath" 23 "testing" 24 25 "k8s.io/helm/pkg/chartutil" 26 "k8s.io/helm/pkg/proto/hapi/chart" 27 ) 28 29 func TestCreateCmd(t *testing.T) { 30 cname := "testchart" 31 // Make a temp dir 32 tdir, err := ioutil.TempDir("", "helm-create-") 33 if err != nil { 34 t.Fatal(err) 35 } 36 defer os.Remove(tdir) 37 38 // CD into it 39 pwd, err := os.Getwd() 40 if err != nil { 41 t.Fatal(err) 42 } 43 if err := os.Chdir(tdir); err != nil { 44 t.Fatal(err) 45 } 46 defer os.Chdir(pwd) 47 48 // Run a create 49 cmd := newCreateCmd(os.Stdout) 50 if err := cmd.RunE(cmd, []string{cname}); err != nil { 51 t.Errorf("Failed to run create: %s", err) 52 return 53 } 54 55 // Test that the chart is there 56 if fi, err := os.Stat(cname); err != nil { 57 t.Fatalf("no chart directory: %s", err) 58 } else if !fi.IsDir() { 59 t.Fatalf("chart is not directory") 60 } 61 62 c, err := chartutil.LoadDir(cname) 63 if err != nil { 64 t.Fatal(err) 65 } 66 67 if c.Metadata.Name != cname { 68 t.Errorf("Expected %q name, got %q", cname, c.Metadata.Name) 69 } 70 if c.Metadata.ApiVersion != chartutil.ApiVersionV1 { 71 t.Errorf("Wrong API version: %q", c.Metadata.ApiVersion) 72 } 73 } 74 75 func TestCreateStarterCmd(t *testing.T) { 76 cname := "testchart" 77 // Make a temp dir 78 tdir, err := ioutil.TempDir("", "helm-create-") 79 if err != nil { 80 t.Fatal(err) 81 } 82 defer os.Remove(tdir) 83 84 thome, err := tempHelmHome(t) 85 if err != nil { 86 t.Fatal(err) 87 } 88 old := homePath() 89 helmHome = thome 90 defer func() { 91 helmHome = old 92 os.RemoveAll(thome) 93 }() 94 95 // Create a starter. 96 starterchart := filepath.Join(thome, "starters") 97 os.Mkdir(starterchart, 0755) 98 if dest, err := chartutil.Create(&chart.Metadata{Name: "starterchart"}, starterchart); err != nil { 99 t.Fatalf("Could not create chart: %s", err) 100 } else { 101 t.Logf("Created %s", dest) 102 } 103 tplpath := filepath.Join(starterchart, "starterchart", "templates", "foo.tpl") 104 if err := ioutil.WriteFile(tplpath, []byte("test"), 0755); err != nil { 105 t.Fatalf("Could not write template: %s", err) 106 } 107 108 // CD into it 109 pwd, err := os.Getwd() 110 if err != nil { 111 t.Fatal(err) 112 } 113 if err := os.Chdir(tdir); err != nil { 114 t.Fatal(err) 115 } 116 defer os.Chdir(pwd) 117 118 // Run a create 119 cmd := newCreateCmd(os.Stdout) 120 cmd.ParseFlags([]string{"--starter", "starterchart"}) 121 if err := cmd.RunE(cmd, []string{cname}); err != nil { 122 t.Errorf("Failed to run create: %s", err) 123 return 124 } 125 126 // Test that the chart is there 127 if fi, err := os.Stat(cname); err != nil { 128 t.Fatalf("no chart directory: %s", err) 129 } else if !fi.IsDir() { 130 t.Fatalf("chart is not directory") 131 } 132 133 c, err := chartutil.LoadDir(cname) 134 if err != nil { 135 t.Fatal(err) 136 } 137 138 if c.Metadata.Name != cname { 139 t.Errorf("Expected %q name, got %q", cname, c.Metadata.Name) 140 } 141 if c.Metadata.ApiVersion != chartutil.ApiVersionV1 { 142 t.Errorf("Wrong API version: %q", c.Metadata.ApiVersion) 143 } 144 145 if l := len(c.Templates); l != 5 { 146 t.Errorf("Expected 5 templates, got %d", l) 147 } 148 149 found := false 150 for _, tpl := range c.Templates { 151 if tpl.Name == "templates/foo.tpl" { 152 found = true 153 data := tpl.Data 154 if string(data) != "test" { 155 t.Errorf("Expected template 'test', got %q", string(data)) 156 } 157 } 158 } 159 if !found { 160 t.Error("Did not find foo.tpl") 161 } 162 163 }