github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/syslog/syslog_test.go (about) 1 package syslog_test 2 3 import ( 4 "crypto/tls" 5 "io/ioutil" 6 "net" 7 "os" 8 "time" 9 10 "github.com/pf-qiu/concourse/v6/atc/syslog" 11 . "github.com/onsi/ginkgo" 12 . "github.com/onsi/gomega" 13 "github.com/square/certstrap/pkix" 14 ) 15 16 var _ = Describe("Syslog", func() { 17 var server *testServer 18 const ( 19 hostname = "hostname" 20 tag = "tag" 21 message = "build 123 log" 22 ) 23 24 AfterEach(func() { 25 server.Close() 26 }) 27 28 Context("when the address is valid tcp server", func() { 29 Context("when tls is enabled", func() { 30 var caFilePath string 31 32 BeforeEach(func() { 33 key, err := pkix.CreateRSAKey(1024) 34 Expect(err).NotTo(HaveOccurred()) 35 36 ca, err := pkix.CreateCertificateAuthority(key, "", time.Now().Add(time.Hour), "Acme Co", "", "", "", "") 37 Expect(err).NotTo(HaveOccurred()) 38 39 req, err := pkix.CreateCertificateSigningRequest(key, "", []net.IP{net.IPv4(127, 0, 0, 1)}, nil, "Acme Co", "", "", "", "") 40 Expect(err).NotTo(HaveOccurred()) 41 42 cert, err := pkix.CreateCertificateHost(ca, key, req, time.Now().Add(time.Hour)) 43 Expect(err).NotTo(HaveOccurred()) 44 45 keyPEM, err := key.ExportPrivate() 46 Expect(err).NotTo(HaveOccurred()) 47 48 caPEM, err := ca.Export() 49 Expect(err).NotTo(HaveOccurred()) 50 51 certPEM, err := cert.Export() 52 Expect(err).NotTo(HaveOccurred()) 53 54 tlsCert, err := tls.X509KeyPair(certPEM, keyPEM) 55 Expect(err).NotTo(HaveOccurred()) 56 57 caFile, err := ioutil.TempFile("", "ca") 58 Expect(err).NotTo(HaveOccurred()) 59 60 _, err = caFile.Write(caPEM) 61 Expect(err).NotTo(HaveOccurred()) 62 63 err = caFile.Close() 64 Expect(err).NotTo(HaveOccurred()) 65 66 caFilePath = caFile.Name() 67 68 server = newTestServer(&tlsCert) 69 }) 70 71 AfterEach(func() { 72 err := os.RemoveAll(caFilePath) 73 Expect(err).ToNot(HaveOccurred()) 74 }) 75 76 It("connects and writes to server given correct cert", func() { 77 sl, err := syslog.Dial("tls", server.Addr, []string{caFilePath}) 78 Expect(err).NotTo(HaveOccurred()) 79 80 err = sl.Write(hostname, tag, time.Now(), message) 81 Expect(err).NotTo(HaveOccurred()) 82 83 got := <-server.Messages 84 Expect(got).To(ContainSubstring(message)) 85 Expect(got).NotTo(ContainSubstring("build 123 status")) 86 87 err = sl.Close() 88 Expect(err).NotTo(HaveOccurred()) 89 }, 0.2) 90 91 It("fails connects to server given incorrect cert", func() { 92 _, err := syslog.Dial("tls", server.Addr, []string{"testdata/incorrect-cert.pem"}) 93 Expect(err).To(HaveOccurred()) 94 Expect(err.Error()).To(ContainSubstring("x509: certificate signed by unknown authority")) 95 }, 0.2) 96 }) 97 98 Context("when tls is not set", func() { 99 BeforeEach(func() { 100 server = newTestServer(nil) 101 }) 102 103 It("connects and writes to server", func() { 104 sl, err := syslog.Dial("tcp", server.Addr, []string{}) 105 sl.Write(hostname, tag, time.Now(), message) 106 Expect(err).NotTo(HaveOccurred()) 107 108 got := <-server.Messages 109 Expect(got).To(ContainSubstring(message)) 110 Expect(got).NotTo(ContainSubstring("build 123 status")) 111 112 err = sl.Close() 113 Expect(err).NotTo(HaveOccurred()) 114 }, 0.2) 115 }) 116 117 Context("after the connection is closed", func() { 118 var ( 119 sl *syslog.Syslog 120 err error 121 ) 122 123 BeforeEach(func() { 124 server = newTestServer(nil) 125 sl, err = syslog.Dial("tcp", server.Addr, []string{}) 126 Expect(err).NotTo(HaveOccurred()) 127 128 err = sl.Close() 129 Expect(err).ToNot(HaveOccurred()) 130 }) 131 132 It("subsequent ops will error", func() { 133 err = sl.Write(hostname, tag, time.Now(), message) 134 Expect(err.Error()).To(ContainSubstring("connection already closed")) 135 136 err = sl.Close() 137 Expect(err.Error()).To(ContainSubstring("connection already closed")) 138 }) 139 }) 140 }) 141 142 Context("when the address is invalid", func() { 143 BeforeEach(func() { 144 server = newTestServer(nil) 145 }) 146 147 It("errors", func() { 148 _, err := syslog.Dial("tcp", "bad.address", []string{}) 149 Expect(err).To(HaveOccurred()) 150 }) 151 }) 152 153 })