github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/fly/rc/targets_test.go (about) 1 package rc_test 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "runtime" 8 9 "github.com/pf-qiu/concourse/v6/atc" 10 "github.com/pf-qiu/concourse/v6/fly/rc" 11 . "github.com/onsi/ginkgo" 12 . "github.com/onsi/gomega" 13 ) 14 15 var _ = Describe("Targets", func() { 16 var tmpDir string 17 var flyrc string 18 19 BeforeEach(func() { 20 var err error 21 tmpDir, err = ioutil.TempDir("", "fly-test") 22 Expect(err).ToNot(HaveOccurred()) 23 24 os.Setenv("HOME", tmpDir) 25 26 flyrc = filepath.Join(userHomeDir(), ".flyrc") 27 }) 28 29 AfterEach(func() { 30 os.RemoveAll(tmpDir) 31 }) 32 33 Describe("LoadTargets", func() { 34 Context("when config file does not have team", func() { 35 BeforeEach(func() { 36 flyrcContents := `targets: 37 some-target: 38 api: http://concourse.com 39 token: 40 type: Bearer 41 value: some-token` 42 ioutil.WriteFile(flyrc, []byte(flyrcContents), 0777) 43 }) 44 45 It("loads target with default team", func() { 46 targets, err := rc.LoadTargets() 47 Expect(err).ToNot(HaveOccurred()) 48 Expect(targets).To(Equal(rc.Targets{ 49 "some-target": { 50 API: "http://concourse.com", 51 TeamName: atc.DefaultTeamName, 52 Token: &rc.TargetToken{ 53 Type: "Bearer", 54 Value: "some-token", 55 }, 56 }, 57 })) 58 }) 59 }) 60 }) 61 62 Describe("Deleting Target", func() { 63 BeforeEach(func() { 64 flyrcContents := `targets: 65 target-name: 66 api: http://concourse.com 67 team: some-team 68 token: 69 type: Bearer 70 value: some-token 71 new-target: 72 api: some-api 73 team: another-team 74 token: 75 type: Bearer 76 value: some-other-token` 77 ioutil.WriteFile(flyrc, []byte(flyrcContents), 0777) 78 }) 79 Describe("DeleteTarget", func() { 80 Context("when provided with target name to delete", func() { 81 BeforeEach(func() { 82 err := rc.DeleteTarget("target-name") 83 Expect(err).ToNot(HaveOccurred()) 84 }) 85 It("should delete target from flyrc", func() { 86 returnedTargets, err := rc.LoadTargets() 87 Expect(err).ToNot(HaveOccurred()) 88 Expect(returnedTargets).To(Equal(rc.Targets{ 89 "new-target": { 90 API: "some-api", 91 TeamName: "another-team", 92 Token: &rc.TargetToken{ 93 Type: "Bearer", 94 Value: "some-other-token", 95 }, 96 }})) 97 }) 98 }) 99 }) 100 Describe("DeleteAllTargets", func() { 101 Context("when deleting all targets", func() { 102 BeforeEach(func() { 103 err := rc.DeleteAllTargets() 104 Expect(err).ToNot(HaveOccurred()) 105 }) 106 It("should delete all targets from flyrc", func() { 107 returnedTargets, err := rc.LoadTargets() 108 Expect(err).ToNot(HaveOccurred()) 109 Expect(returnedTargets).To(Equal(rc.Targets{})) 110 }) 111 }) 112 }) 113 }) 114 115 Describe("UpdateTarget", func() { 116 BeforeEach(func() { 117 flyrcContents := `targets: 118 some-target: 119 api: http://concourse.com 120 team: main 121 token: 122 type: Bearer 123 value: some-token` 124 ioutil.WriteFile(flyrc, []byte(flyrcContents), 0777) 125 }) 126 Context("when props are provided for update", func() { 127 It("should update target to specified prop attributes", func() { 128 targetProps := rc.TargetProps{ 129 API: "new-api", 130 TeamName: "other-team", 131 } 132 err := rc.UpdateTargetProps("some-target", targetProps) 133 Expect(err).ToNot(HaveOccurred()) 134 135 targets, err := rc.LoadTargets() 136 Expect(err).ToNot(HaveOccurred()) 137 Expect(targets).To(Equal(rc.Targets{ 138 "some-target": { 139 API: "new-api", 140 TeamName: "other-team", 141 Token: &rc.TargetToken{ 142 Type: "Bearer", 143 Value: "some-token", 144 }, 145 }, 146 })) 147 }) 148 }) 149 150 Context("when target name is provided for update", func() { 151 It("should update target name and keep old prop attributes", func() { 152 err := rc.UpdateTargetName("some-target", "some-other-target") 153 Expect(err).ToNot(HaveOccurred()) 154 155 targets, err := rc.LoadTargets() 156 Expect(err).ToNot(HaveOccurred()) 157 Expect(targets).To(Equal(rc.Targets{ 158 "some-other-target": { 159 API: "http://concourse.com", 160 TeamName: "main", 161 Token: &rc.TargetToken{ 162 Type: "Bearer", 163 Value: "some-token", 164 }, 165 }, 166 })) 167 }) 168 }) 169 }) 170 171 Describe("SaveTarget", func() { 172 Context("when managing .flyrc", func() { 173 BeforeEach(func() { 174 if runtime.GOOS == "windows" { 175 Skip("these tests are UNIX-specific") 176 } 177 }) 178 179 It("creates any new file with 0600 permissions", func() { 180 err := rc.SaveTarget("foo", "url", false, "main", nil, "", "", "") 181 Expect(err).ToNot(HaveOccurred()) 182 fi, statErr := os.Stat(flyrc) 183 Expect(statErr).To(BeNil()) 184 Expect(fi.Mode().Perm()).To(Equal(os.FileMode(0600))) 185 }) 186 187 Describe("when the file exists with 0755 permissions", func() { 188 BeforeEach(func() { 189 err := ioutil.WriteFile(flyrc, []byte{}, 0755) 190 Expect(err).ToNot(HaveOccurred()) 191 }) 192 193 It("preserves those permissions", func() { 194 err := rc.SaveTarget("foo", "url", false, "main", nil, "", "", "") 195 Expect(err).ToNot(HaveOccurred()) 196 fi, statErr := os.Stat(flyrc) 197 Expect(statErr).To(BeNil()) 198 Expect(fi.Mode().Perm()).To(Equal(os.FileMode(0755))) 199 }) 200 }) 201 }) 202 203 Describe("CA Cert Flag", func() { 204 Describe("when 'ca_cert' is not set in the flyrc", func() { 205 var targetName rc.TargetName 206 BeforeEach(func() { 207 targetName = "foo" 208 err := rc.SaveTarget( 209 targetName, 210 "some api url", 211 false, 212 "main", 213 nil, 214 "", 215 "", 216 "", 217 ) 218 Expect(err).ToNot(HaveOccurred()) 219 }) 220 221 It("returns the rc empty ca-cert", func() { 222 returnedTarget, err := rc.LoadTarget(targetName, false) 223 Expect(err).ToNot(HaveOccurred()) 224 Expect(returnedTarget.CACert()).To(BeEmpty()) 225 }) 226 }) 227 228 Describe("when 'ca_cert' is set in the flyrc", func() { 229 var targetName rc.TargetName 230 231 BeforeEach(func() { 232 targetName = "foo" 233 err := rc.SaveTarget( 234 targetName, 235 "some api url", 236 true, 237 "main", 238 nil, 239 rsaCertPEM, 240 "", 241 "", 242 ) 243 Expect(err).ToNot(HaveOccurred()) 244 }) 245 246 It("returns the rc insecure flag as true", func() { 247 returnedTarget, err := rc.LoadTarget(targetName, false) 248 Expect(err).NotTo(HaveOccurred()) 249 Expect(returnedTarget.CACert()).To(Equal(rsaCertPEM)) 250 }) 251 }) 252 }) 253 254 Describe("Insecure Flag", func() { 255 Describe("when 'insecure' is set to false in the flyrc", func() { 256 var targetName rc.TargetName 257 258 BeforeEach(func() { 259 targetName = "foo" 260 err := rc.SaveTarget( 261 targetName, 262 "some api url", 263 false, 264 "main", 265 nil, 266 "", 267 "", 268 "", 269 ) 270 Expect(err).ToNot(HaveOccurred()) 271 }) 272 273 It("returns the rc insecure flag as false", func() { 274 returnedTarget, err := rc.LoadTarget(targetName, false) 275 Expect(err).ToNot(HaveOccurred()) 276 Expect(returnedTarget.TLSConfig().InsecureSkipVerify).To(BeFalse()) 277 }) 278 }) 279 280 Describe("when 'insecure' is set to true in the flyrc", func() { 281 var targetName rc.TargetName 282 283 BeforeEach(func() { 284 targetName = "foo" 285 err := rc.SaveTarget( 286 targetName, 287 "some api url", 288 true, 289 "main", 290 nil, 291 "", 292 "", 293 "", 294 ) 295 Expect(err).ToNot(HaveOccurred()) 296 }) 297 298 It("returns the rc insecure flag as true", func() { 299 returnedTarget, err := rc.LoadTarget(targetName, false) 300 Expect(err).ToNot(HaveOccurred()) 301 Expect(returnedTarget.TLSConfig().InsecureSkipVerify).To(BeTrue()) 302 }) 303 }) 304 }) 305 306 Context("when selecting a target that does not exist", func() { 307 It("returns UnknownTargetError", func() { 308 _, err := rc.LoadTarget("bogus", false) 309 Expect(err).To(Equal(rc.UnknownTargetError{"bogus"})) 310 }) 311 }) 312 313 Context("when a target is not specified", func() { 314 It("returns ErrNoTargetSpecified", func() { 315 _, err := rc.LoadTarget("", false) 316 Expect(err).To(Equal(rc.ErrNoTargetSpecified)) 317 }) 318 }) 319 }) 320 })