OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [net/] [smtp/] [smtp_test.go] - Blame information for rev 747

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 747 jeremybenn
// Copyright 2010 The Go Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
4
 
5
package smtp
6
 
7
import (
8
        "bufio"
9
        "bytes"
10
        "io"
11
        "net/textproto"
12
        "strings"
13
        "testing"
14
)
15
 
16
type authTest struct {
17
        auth       Auth
18
        challenges []string
19
        name       string
20
        responses  []string
21
}
22
 
23
var authTests = []authTest{
24
        {PlainAuth("", "user", "pass", "testserver"), []string{}, "PLAIN", []string{"\x00user\x00pass"}},
25
        {PlainAuth("foo", "bar", "baz", "testserver"), []string{}, "PLAIN", []string{"foo\x00bar\x00baz"}},
26
        {CRAMMD5Auth("user", "pass"), []string{"<123456.1322876914@testserver>"}, "CRAM-MD5", []string{"", "user 287eb355114cf5c471c26a875f1ca4ae"}},
27
}
28
 
29
func TestAuth(t *testing.T) {
30
testLoop:
31
        for i, test := range authTests {
32
                name, resp, err := test.auth.Start(&ServerInfo{"testserver", true, nil})
33
                if name != test.name {
34
                        t.Errorf("#%d got name %s, expected %s", i, name, test.name)
35
                }
36
                if !bytes.Equal(resp, []byte(test.responses[0])) {
37
                        t.Errorf("#%d got response %s, expected %s", i, resp, test.responses[0])
38
                }
39
                if err != nil {
40
                        t.Errorf("#%d error: %s", i, err)
41
                }
42
                for j := range test.challenges {
43
                        challenge := []byte(test.challenges[j])
44
                        expected := []byte(test.responses[j+1])
45
                        resp, err := test.auth.Next(challenge, true)
46
                        if err != nil {
47
                                t.Errorf("#%d error: %s", i, err)
48
                                continue testLoop
49
                        }
50
                        if !bytes.Equal(resp, expected) {
51
                                t.Errorf("#%d got %s, expected %s", i, resp, expected)
52
                                continue testLoop
53
                        }
54
                }
55
        }
56
}
57
 
58
type faker struct {
59
        io.ReadWriter
60
}
61
 
62
func (f faker) Close() error {
63
        return nil
64
}
65
 
66
func TestBasic(t *testing.T) {
67
        basicServer = strings.Join(strings.Split(basicServer, "\n"), "\r\n")
68
        basicClient = strings.Join(strings.Split(basicClient, "\n"), "\r\n")
69
 
70
        var cmdbuf bytes.Buffer
71
        bcmdbuf := bufio.NewWriter(&cmdbuf)
72
        var fake faker
73
        fake.ReadWriter = bufio.NewReadWriter(bufio.NewReader(strings.NewReader(basicServer)), bcmdbuf)
74
        c := &Client{Text: textproto.NewConn(fake)}
75
 
76
        if err := c.helo(); err != nil {
77
                t.Fatalf("HELO failed: %s", err)
78
        }
79
        if err := c.ehlo(); err == nil {
80
                t.Fatalf("Expected first EHLO to fail")
81
        }
82
        if err := c.ehlo(); err != nil {
83
                t.Fatalf("Second EHLO failed: %s", err)
84
        }
85
 
86
        if ok, args := c.Extension("aUtH"); !ok || args != "LOGIN PLAIN" {
87
                t.Fatalf("Expected AUTH supported")
88
        }
89
        if ok, _ := c.Extension("DSN"); ok {
90
                t.Fatalf("Shouldn't support DSN")
91
        }
92
 
93
        if err := c.Mail("user@gmail.com"); err == nil {
94
                t.Fatalf("MAIL should require authentication")
95
        }
96
 
97
        if err := c.Verify("user1@gmail.com"); err == nil {
98
                t.Fatalf("First VRFY: expected no verification")
99
        }
100
        if err := c.Verify("user2@gmail.com"); err != nil {
101
                t.Fatalf("Second VRFY: expected verification, got %s", err)
102
        }
103
 
104
        // fake TLS so authentication won't complain
105
        c.tls = true
106
        c.serverName = "smtp.google.com"
107
        if err := c.Auth(PlainAuth("", "user", "pass", "smtp.google.com")); err != nil {
108
                t.Fatalf("AUTH failed: %s", err)
109
        }
110
 
111
        if err := c.Mail("user@gmail.com"); err != nil {
112
                t.Fatalf("MAIL failed: %s", err)
113
        }
114
        if err := c.Rcpt("golang-nuts@googlegroups.com"); err != nil {
115
                t.Fatalf("RCPT failed: %s", err)
116
        }
117
        msg := `From: user@gmail.com
118
To: golang-nuts@googlegroups.com
119
Subject: Hooray for Go
120
 
121
Line 1
122
.Leading dot line .
123
Goodbye.`
124
        w, err := c.Data()
125
        if err != nil {
126
                t.Fatalf("DATA failed: %s", err)
127
        }
128
        if _, err := w.Write([]byte(msg)); err != nil {
129
                t.Fatalf("Data write failed: %s", err)
130
        }
131
        if err := w.Close(); err != nil {
132
                t.Fatalf("Bad data response: %s", err)
133
        }
134
 
135
        if err := c.Quit(); err != nil {
136
                t.Fatalf("QUIT failed: %s", err)
137
        }
138
 
139
        bcmdbuf.Flush()
140
        actualcmds := cmdbuf.String()
141
        if basicClient != actualcmds {
142
                t.Fatalf("Got:\n%s\nExpected:\n%s", actualcmds, basicClient)
143
        }
144
}
145
 
146
var basicServer = `250 mx.google.com at your service
147
502 Unrecognized command.
148
250-mx.google.com at your service
149
250-SIZE 35651584
150
250-AUTH LOGIN PLAIN
151
250 8BITMIME
152
530 Authentication required
153
252 Send some mail, I'll try my best
154
250 User is valid
155
235 Accepted
156
250 Sender OK
157
250 Receiver OK
158
354 Go ahead
159
250 Data OK
160
221 OK
161
`
162
 
163
var basicClient = `HELO localhost
164
EHLO localhost
165
EHLO localhost
166
MAIL FROM: BODY=8BITMIME
167
VRFY user1@gmail.com
168
VRFY user2@gmail.com
169
AUTH PLAIN AHVzZXIAcGFzcw==
170
MAIL FROM: BODY=8BITMIME
171
RCPT TO:
172
DATA
173
From: user@gmail.com
174
To: golang-nuts@googlegroups.com
175
Subject: Hooray for Go
176
 
177
Line 1
178
..Leading dot line .
179
Goodbye.
180
.
181
QUIT
182
`

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.