github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/manifest/generate_manifest_test.go (about) 1 package manifest_test 2 3 import ( 4 "io/ioutil" 5 "os" 6 "strings" 7 8 . "github.com/cloudfoundry/cli/cf/manifest" 9 . "github.com/cloudfoundry/cli/testhelpers/matchers" 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/gomega" 12 ) 13 14 type outputs struct { 15 contents []string 16 cursor int 17 } 18 19 var _ = Describe("generate_manifest", func() { 20 var ( 21 m AppManifest 22 err error 23 ) 24 25 BeforeEach(func() { 26 _, err = os.Stat("./output.yml") 27 Ω(err).To(HaveOccurred()) 28 29 m = NewGenerator() 30 m.FileSavePath("./output.yml") 31 }) 32 33 AfterEach(func() { 34 err = os.Remove("./output.yml") 35 Ω(err).ToNot(HaveOccurred()) 36 }) 37 38 It("creates a new file at a given path", func() { 39 m.Save() 40 41 _, err = os.Stat("./output.yml") 42 Ω(err).ToNot(HaveOccurred()) 43 }) 44 45 It("starts the manifest with 3 dashes (---), followed by 'applications'", func() { 46 m.Save() 47 48 contents := getYamlContent("./output.yml") 49 50 Ω(contents[0]).To(Equal("---")) 51 Ω(contents[1]).To(Equal("applications:")) 52 }) 53 54 It("creates entry under the given app name", func() { 55 m.Memory("app1", 128) 56 m.Memory("app2", 64) 57 m.Save() 58 59 //outputs.ContainSubstring assert orders 60 cmdOutput := &outputs{ 61 contents: getYamlContent("./output.yml"), 62 cursor: 0, 63 } 64 65 Ω(cmdOutput.ContainsSubstring("- name: app1")).To(BeTrue()) 66 Ω(cmdOutput.ContainsSubstring(" memory: 128M")).To(BeTrue()) 67 68 Ω(cmdOutput.ContainsSubstring("- name: app2")).To(BeTrue()) 69 Ω(cmdOutput.ContainsSubstring(" memory: 64M")).To(BeTrue()) 70 }) 71 72 It("prefixes each service with '-'", func() { 73 m.Service("app1", "service1") 74 m.Service("app1", "service2") 75 m.Service("app1", "service3") 76 m.Save() 77 78 contents := getYamlContent("./output.yml") 79 80 Ω(contents).To(ContainSubstrings( 81 []string{" services:"}, 82 []string{"- service1"}, 83 []string{"- service2"}, 84 []string{"- service3"}, 85 )) 86 }) 87 88 It("generates a manifest containing all the attributes", func() { 89 m.Memory("app1", 128) 90 m.StartCommand("app1", "run main.go") 91 m.Service("app1", "service1") 92 m.EnvironmentVars("app1", "foo", "boo") 93 m.HealthCheckTimeout("app1", 100) 94 m.Instances("app1", 3) 95 m.Domain("app1", "foo", "blahblahblah.com") 96 m.BuildpackUrl("app1", "ruby-buildpack") 97 err := m.Save() 98 Ω(err).NotTo(HaveOccurred()) 99 100 Ω(getYamlContent("./output.yml")).To(ContainSubstrings( 101 []string{"- name: app1"}, 102 []string{" memory: 128M"}, 103 []string{" command: run main.go"}, 104 []string{" services:"}, 105 []string{" - service1"}, 106 []string{" env:"}, 107 []string{" foo: boo"}, 108 []string{" timeout: 100"}, 109 []string{" instances: 3"}, 110 []string{" host: foo"}, 111 []string{" domain: blahblahblah.com"}, 112 []string{" buildpack: ruby-buildpack"}, 113 )) 114 }) 115 Context("When there are multiple hosts and domains", func() { 116 117 It("generates a manifest containing two hosts two domains", func() { 118 m.Memory("app1", 128) 119 m.StartCommand("app1", "run main.go") 120 m.Service("app1", "service1") 121 m.EnvironmentVars("app1", "foo", "boo") 122 m.HealthCheckTimeout("app1", 100) 123 m.Instances("app1", 3) 124 m.Domain("app1", "foo1", "test1.com") 125 m.Domain("app1", "foo1", "test2.com") 126 m.Domain("app1", "foo2", "test1.com") 127 m.Domain("app1", "foo2", "test2.com") 128 m.BuildpackUrl("app1", "ruby-buildpack") 129 err := m.Save() 130 Ω(err).NotTo(HaveOccurred()) 131 132 Ω(getYamlContent("./output.yml")).To(ContainSubstrings( 133 []string{"- name: app1"}, 134 []string{" memory: 128M"}, 135 []string{" command: run main.go"}, 136 []string{" services:"}, 137 []string{" - service1"}, 138 []string{" env:"}, 139 []string{" foo: boo"}, 140 []string{" timeout: 100"}, 141 []string{" instances: 3"}, 142 []string{" hosts:"}, 143 []string{" - foo1"}, 144 []string{" - foo2"}, 145 []string{" domains:"}, 146 []string{" - test1.com"}, 147 []string{" - test2.com"}, 148 []string{" buildpack: ruby-buildpack"}, 149 )) 150 }) 151 }) 152 153 Context("When there are multiple hosts and single domain", func() { 154 155 It("generates a manifest containing two hosts one domain", func() { 156 m.Memory("app1", 128) 157 m.StartCommand("app1", "run main.go") 158 m.Service("app1", "service1") 159 m.EnvironmentVars("app1", "foo", "boo") 160 m.HealthCheckTimeout("app1", 100) 161 m.Instances("app1", 3) 162 m.Domain("app1", "foo1", "test.com") 163 m.Domain("app1", "foo2", "test.com") 164 m.BuildpackUrl("app1", "ruby-buildpack") 165 err := m.Save() 166 Ω(err).NotTo(HaveOccurred()) 167 168 Ω(getYamlContent("./output.yml")).To(ContainSubstrings( 169 []string{"- name: app1"}, 170 []string{" memory: 128M"}, 171 []string{" command: run main.go"}, 172 []string{" services:"}, 173 []string{" - service1"}, 174 []string{" env:"}, 175 []string{" foo: boo"}, 176 []string{" timeout: 100"}, 177 []string{" instances: 3"}, 178 []string{" hosts:"}, 179 []string{" - foo1"}, 180 []string{" - foo2"}, 181 []string{" domain: test.com"}, 182 []string{" buildpack: ruby-buildpack"}, 183 )) 184 }) 185 }) 186 187 Context("When there is single host and multiple domains", func() { 188 189 It("generates a manifest containing one host two domains", func() { 190 m.Memory("app1", 128) 191 m.StartCommand("app1", "run main.go") 192 m.Service("app1", "service1") 193 m.EnvironmentVars("app1", "foo", "boo") 194 m.HealthCheckTimeout("app1", 100) 195 m.Instances("app1", 3) 196 m.Domain("app1", "foo", "test1.com") 197 m.Domain("app1", "foo", "test2.com") 198 m.BuildpackUrl("app1", "ruby-buildpack") 199 err := m.Save() 200 Ω(err).NotTo(HaveOccurred()) 201 202 Ω(getYamlContent("./output.yml")).To(ContainSubstrings( 203 []string{"- name: app1"}, 204 []string{" memory: 128M"}, 205 []string{" command: run main.go"}, 206 []string{" services:"}, 207 []string{" - service1"}, 208 []string{" env:"}, 209 []string{" foo: boo"}, 210 []string{" timeout: 100"}, 211 []string{" instances: 3"}, 212 []string{" host: foo"}, 213 []string{" domains:"}, 214 []string{" - test1.com"}, 215 []string{" - test2.com"}, 216 []string{" buildpack: ruby-buildpack"}, 217 )) 218 }) 219 }) 220 221 }) 222 223 func getYamlContent(path string) []string { 224 b, err := ioutil.ReadFile(path) 225 Ω(err).ToNot(HaveOccurred()) 226 227 return strings.Split(string(b), "\n") 228 } 229 230 func (o *outputs) ContainsSubstring(str string) bool { 231 for i := o.cursor; i < len(o.contents)-1; i++ { 232 if strings.Contains(o.contents[i], str) { 233 o.cursor = i 234 return true 235 } 236 } 237 return false 238 }