package notification import ( "fmt" "net/smtp" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestFullLoginAuth(t *testing.T) { username := "john" password := "strongpw123" serverInfo := &smtp.ServerInfo{ Name: "mail.authelia.com", TLS: true, Auth: nil, } auth := newLoginAuth(username, password, "mail.authelia.com") proto, _, err := auth.Start(serverInfo) assert.Equal(t, smtpAUTHMechanismLogin, proto) require.NoError(t, err) toServer, err := auth.Next([]byte("Username:"), true) assert.Equal(t, []byte(username), toServer) require.NoError(t, err) toServer, err = auth.Next([]byte("Password:"), true) assert.Equal(t, []byte(password), toServer) require.NoError(t, err) toServer, err = auth.Next([]byte(nil), false) assert.Equal(t, []byte(nil), toServer) require.NoError(t, err) toServer, err = auth.Next([]byte("test"), true) assert.Equal(t, []byte(nil), toServer) assert.EqualError(t, err, fmt.Sprintf("unexpected server challenge: %s", []byte("test"))) } func TestShouldHaveUnexpectedHostname(t *testing.T) { serverInfo := &smtp.ServerInfo{ Name: "localhost", TLS: true, Auth: nil, } auth := newLoginAuth("john", "strongpw123", "mail.authelia.com") _, _, err := auth.Start(serverInfo) assert.EqualError(t, err, "unexpected hostname from server") } func TestTLSNotNeededForLocalhost(t *testing.T) { serverInfo := &smtp.ServerInfo{ Name: "localhost", TLS: false, Auth: nil, } auth := newLoginAuth("john", "strongpw123", "localhost") proto, _, err := auth.Start(serverInfo) assert.Equal(t, "LOGIN", proto) require.NoError(t, err) } func TestTLSNeededForNonLocalhost(t *testing.T) { serverInfo := &smtp.ServerInfo{ Name: "mail.authelia.com", TLS: false, Auth: nil, } auth := newLoginAuth("john", "strongpw123", "mail.authelia.com") _, _, err := auth.Start(serverInfo) assert.EqualError(t, err, "connection over plain-text") }