12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package guerrilla
- import (
- "testing"
- "bufio"
- "fmt"
- "net/textproto"
- "strings"
- "sync"
- "github.com/flashmob/go-guerrilla/backends"
- "github.com/flashmob/go-guerrilla/mocks"
- )
- // getMockServerConfig gets a mock ServerConfig struct used for creating a new server
- func getMockServerConfig() *ServerConfig {
- sc := &ServerConfig{
- IsEnabled: true, // not tested here
- Hostname: "saggydimes.test.com",
- MaxSize: 1024, // smtp message max size
- PrivateKeyFile: "./tests/mail.guerrillamail.com.key.pem",
- PublicKeyFile: "./tests/mail.guerrillamail.com.cert.pem",
- Timeout: 5,
- ListenInterface: "127.0.0.1:2529",
- StartTLSOn: true,
- TLSAlwaysOn: false,
- MaxClients: 30, // not tested here
- LogFile: "/dev/stdout",
- }
- return sc
- }
- // getMockServerConn gets a new server using sc. Server will be using a mocked TCP connection
- // using the dummy backend
- // RCP TO command only allows test.com host
- func getMockServerConn(sc *ServerConfig, t *testing.T) (*mocks.Conn, *server) {
- backend, err := backends.New("dummy", backends.BackendConfig{"log_received_mails": true})
- if err != nil {
- t.Error("new dummy backend failed because:", err)
- }
- server, err := newServer(sc, backend)
- if err != nil {
- t.Error("new server failed because:", err)
- } else {
- server.setAllowedHosts([]string{"test.com"})
- }
- conn := mocks.NewConn()
- return conn, server
- }
- func TestHandleClient(t *testing.T) {
- sc := getMockServerConfig()
- conn, server := getMockServerConn(sc, t)
- // call the serve.handleClient() func in a goroutine.
- client := NewClient(conn.Server, 1)
- var wg sync.WaitGroup
- wg.Add(1)
- go func() {
- server.handleClient(client)
- wg.Done()
- }()
- // Wait for the greeting from the server
- r := textproto.NewReader(bufio.NewReader(conn.Client))
- line, _ := r.ReadLine()
- fmt.Println(line)
- w := textproto.NewWriter(bufio.NewWriter(conn.Client))
- w.PrintfLine("HELO test.test.com")
- line, _ = r.ReadLine()
- fmt.Println(line)
- w.PrintfLine("QUIT")
- line, _ = r.ReadLine()
- fmt.Println("line is:", line)
- expected := "221 2.0.0 Bye"
- if strings.Index(line, expected) != 0 {
- t.Error("expected", expected, "but got:", line)
- }
- wg.Wait() // wait for handleClient to exit
- }
- // TODO
- // - test github issue #44 and #42
- // - test other commands
- // also, could test
- // - test allowsHost() and allowsHost()
- // - test isInTransaction() (make sure it returns true after MAIL command, but false after HELO/EHLO/RSET/end of DATA
- // - test to make sure client envelope
- // - perhaps anything else that can be tested in server_test.go
|