github.com/jordwest/imap-server@v0.0.0-20200627020849-1cf758ba359f/conn/conn_suite_test.go (about) 1 package conn_test 2 3 import ( 4 "bufio" 5 "encoding/base64" 6 "fmt" 7 "net/textproto" 8 "strings" 9 10 "github.com/jordwest/imap-server/conn" 11 "github.com/jordwest/imap-server/mailstore" 12 "github.com/jordwest/mock-conn" 13 . "github.com/onsi/ginkgo" 14 . "github.com/onsi/gomega" 15 16 "testing" 17 ) 18 19 var mStore *mailstore.DummyMailstore 20 var tConn *conn.Conn 21 var mockConn *mock_conn.Conn 22 var reader *textproto.Reader 23 24 func TestConn(t *testing.T) { 25 RegisterFailHandler(Fail) 26 RunSpecs(t, "Conn Suite") 27 } 28 29 func SendLine(request string) { 30 fmt.Fprintf(mockConn.Client, "%s\r\n", request) 31 } 32 33 func SendBase64(request string) { 34 encoder := base64.NewEncoder(base64.StdEncoding, mockConn.Client) 35 fmt.Fprintf(encoder, "%s", request) 36 // Must close the encoder when finished to flush any partial blocks. 37 encoder.Close() 38 } 39 40 func ExpectResponse(expected string) { 41 response, err := reader.ReadLine() 42 expected = strings.TrimSpace(expected) 43 response = strings.TrimSpace(response) 44 Expect(response, err).To(Equal(expected)) 45 } 46 47 func ExpectResponsePattern(pattern string) { 48 response, err := reader.ReadLine() 49 pattern = strings.TrimSpace(pattern) 50 response = strings.TrimSpace(response) 51 Expect(response, err).To(MatchRegexp(pattern)) 52 } 53 54 // === SETUP ==== 55 var _ = BeforeEach(func() { 56 mStore = mailstore.NewDummyMailstore() 57 mockConn = mock_conn.NewConn() 58 tConn = conn.NewConn(mStore, mockConn.Server, GinkgoWriter) 59 reader = textproto.NewReader(bufio.NewReader(mockConn.Client)) 60 }) 61 62 var _ = JustBeforeEach(func() { 63 go tConn.Start() 64 }) 65 66 // === TEARDOWN ==== 67 68 var _ = AfterEach(func() { 69 tConn.Close() 70 mockConn.Close() 71 })