| 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
 
 
  |