github.com/choria-io/go-choria@v0.28.1-0.20240416190746-b3bf9c7d5a45/providers/provtarget/builddefaults/default_test.go (about) 1 // Copyright (c) 2021, R.I. Pienaar and the Choria Project contributors 2 // 3 // SPDX-License-Identifier: Apache-2.0 4 5 package builddefaults 6 7 import ( 8 "os" 9 "path/filepath" 10 "testing" 11 12 "github.com/choria-io/go-choria/build" 13 "github.com/choria-io/tokens" 14 . "github.com/onsi/ginkgo/v2" 15 . "github.com/onsi/gomega" 16 ) 17 18 func TestDefault(t *testing.T) { 19 RegisterFailHandler(Fail) 20 RunSpecs(t, "Providers/Provtarget/Default") 21 } 22 23 var _ = Describe("Default", func() { 24 var ( 25 td string 26 err error 27 bi build.Info 28 ) 29 30 createToken := func(claims *tokens.ProvisioningClaims, td string) string { 31 t, err := tokens.SignTokenWithKeyFile(claims, "testdata/signer-key.pem") 32 Expect(err).ToNot(HaveOccurred()) 33 34 out := filepath.Join(td, "token.jwt") 35 err = os.WriteFile(out, []byte(t), 0600) 36 Expect(err).ToNot(HaveOccurred()) 37 38 return out 39 } 40 41 BeforeEach(func() { 42 td, err = os.MkdirTemp("", "") 43 Expect(err).ToNot(HaveOccurred()) 44 }) 45 46 AfterEach(func() { 47 os.RemoveAll(td) 48 }) 49 50 Describe("Configure", func() { 51 It("Should handle malformed jwt", func() { 52 build.ProvisionJWTFile = "testdata/invalid.jwt" 53 reader, _ := os.Open(build.ProvisionJWTFile) 54 defer reader.Close() 55 _, err := SetBuildBasedOnJWT(reader, &bi) 56 Expect(err).To(MatchError("token contains an invalid number of segments")) 57 }) 58 59 It("Should detect missing auth token", func() { 60 build.ProvisionJWTFile = createToken(&tokens.ProvisioningClaims{ 61 StandardClaims: tokens.StandardClaims{ 62 Purpose: tokens.ProvisioningPurpose, 63 }, 64 }, td) 65 reader, _ := os.Open(build.ProvisionJWTFile) 66 defer reader.Close() 67 _, err := SetBuildBasedOnJWT(reader, &bi) 68 Expect(err).To(MatchError("no auth token")) 69 }) 70 71 It("Should detect missing url and srv domain", func() { 72 build.ProvisionJWTFile = createToken(&tokens.ProvisioningClaims{ 73 Token: "x", 74 StandardClaims: tokens.StandardClaims{ 75 Purpose: tokens.ProvisioningPurpose, 76 }, 77 }, td) 78 reader, _ := os.Open(build.ProvisionJWTFile) 79 defer reader.Close() 80 _, err := SetBuildBasedOnJWT(reader, &bi) 81 Expect(err).To(MatchError("no srv domain or urls")) 82 83 }) 84 85 It("Should detect both url and srv domain supplied", func() { 86 build.ProvisionJWTFile = createToken(&tokens.ProvisioningClaims{ 87 Token: "x", 88 URLs: "nats://example.net:4222", 89 SRVDomain: "example.net", 90 StandardClaims: tokens.StandardClaims{ 91 Purpose: tokens.ProvisioningPurpose, 92 }, 93 }, td) 94 reader, _ := os.Open(build.ProvisionJWTFile) 95 defer reader.Close() 96 _, err := SetBuildBasedOnJWT(reader, &bi) 97 Expect(err).To(MatchError("both srv domain and URLs supplied")) 98 }) 99 100 It("Should set build properties for specific URL", func() { 101 build.ProvisionJWTFile = createToken(&tokens.ProvisioningClaims{ 102 Token: "secret", 103 URLs: "prov.example.net:4222", 104 Secure: true, 105 StandardClaims: tokens.StandardClaims{ 106 Purpose: tokens.ProvisioningPurpose, 107 }, 108 }, td) 109 reader, _ := os.Open(build.ProvisionJWTFile) 110 defer reader.Close() 111 _, err := SetBuildBasedOnJWT(reader, &bi) 112 Expect(err).ToNot(HaveOccurred()) 113 Expect(build.ProvisionBrokerURLs).To(Equal("prov.example.net:4222")) 114 Expect(build.ProvisionBrokerSRVDomain).To(Equal("")) 115 Expect(build.ProvisionToken).To(Equal("secret")) 116 Expect(build.ProvisionSecure).To(Equal("true")) 117 Expect(build.ProvisionModeDefault).To(Equal("false")) 118 }) 119 120 It("Should set build properties for specific SRV domain", func() { 121 build.ProvisionJWTFile = createToken(&tokens.ProvisioningClaims{ 122 Token: "secret", 123 SRVDomain: "example.net", 124 Secure: true, 125 StandardClaims: tokens.StandardClaims{ 126 Purpose: tokens.ProvisioningPurpose, 127 }, 128 }, td) 129 reader, _ := os.Open(build.ProvisionJWTFile) 130 defer reader.Close() 131 _, err := SetBuildBasedOnJWT(reader, &bi) 132 Expect(err).ToNot(HaveOccurred()) 133 Expect(build.ProvisionBrokerURLs).To(Equal("")) 134 Expect(build.ProvisionBrokerSRVDomain).To(Equal("example.net")) 135 Expect(build.ProvisionToken).To(Equal("secret")) 136 Expect(build.ProvisionSecure).To(Equal("true")) 137 Expect(build.ProvisionModeDefault).To(Equal("false")) 138 }) 139 140 It("Should set provision mode default", func() { 141 build.ProvisionJWTFile = createToken(&tokens.ProvisioningClaims{ 142 Token: "secret", 143 URLs: "prov.example.net:4222", 144 Secure: true, 145 ProvDefault: true, 146 StandardClaims: tokens.StandardClaims{ 147 Purpose: tokens.ProvisioningPurpose, 148 }, 149 }, td) 150 reader, _ := os.Open(build.ProvisionJWTFile) 151 defer reader.Close() 152 _, err := SetBuildBasedOnJWT(reader, &bi) 153 Expect(err).ToNot(HaveOccurred()) 154 Expect(build.ProvisionBrokerURLs).To(Equal("prov.example.net:4222")) 155 Expect(build.ProvisionBrokerSRVDomain).To(Equal("")) 156 Expect(build.ProvisionToken).To(Equal("secret")) 157 Expect(build.ProvisionSecure).To(Equal("true")) 158 Expect(build.ProvisionModeDefault).To(Equal("true")) 159 }) 160 }) 161 })