Changeset 602 in code for trunk/server_test.go
- Timestamp:
- Oct 5, 2021, 12:03:17 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/server_test.go
r600 r602 9 9 ) 10 10 11 var testServerPrefix = &irc.Prefix{Name: "soju-test-server"} 12 11 13 const ( 12 14 testUsername = "soju-test-user" … … 14 16 ) 15 17 16 func ircPipe() (ircConn, ircConn){18 func createTestDownstream(t *testing.T, srv *Server) ircConn { 17 19 c1, c2 := net.Pipe() 18 return newNetIRCConn(c1), newNetIRCConn(c2) 20 go srv.handle(newNetIRCConn(c1)) 21 return newNetIRCConn(c2) 19 22 } 20 23 … … 31 34 } 32 35 33 func createTestUser(t *testing.T) *Server { 34 db := createTempDB(t) 35 36 func createTestUser(t *testing.T, db Database) *User { 36 37 hashed, err := bcrypt.GenerateFromPassword([]byte(testPassword), bcrypt.DefaultCost) 37 38 if err != nil { … … 44 45 } 45 46 46 return NewServer(db) 47 return record 48 } 49 50 type testUpstream struct { 51 net.Listener 52 Accept chan ircConn 53 } 54 55 func createTestUpstream(t *testing.T, db Database, user *User) (*Network, *testUpstream) { 56 ln, err := net.Listen("tcp", "localhost:0") 57 if err != nil { 58 t.Fatalf("failed to create TCP listener: %v", err) 59 } 60 61 tu := &testUpstream{ 62 Listener: ln, 63 Accept: make(chan ircConn), 64 } 65 66 go func() { 67 defer close(tu.Accept) 68 69 for { 70 c, err := ln.Accept() 71 if isErrClosed(err) { 72 break 73 } else if err != nil { 74 t.Fatalf("failed accepting connection: %v", err) 75 } 76 tu.Accept <- newNetIRCConn(c) 77 } 78 }() 79 80 network := &Network{ 81 Name: "testnet", 82 Addr: "irc+insecure://" + ln.Addr().String(), 83 Nick: user.Username, 84 Enabled: true, 85 } 86 if err := db.StoreNetwork(user.ID, network); err != nil { 87 t.Fatalf("failed to store test network: %v", err) 88 } 89 90 return network, tu 47 91 } 48 92 … … 58 102 } 59 103 60 func authTestUser(t *testing.T, c ircConn) {104 func registerDownstreamConn(t *testing.T, c ircConn, network *Network) { 61 105 c.WriteMessage(&irc.Message{ 62 106 Command: "PASS", … … 69 113 c.WriteMessage(&irc.Message{ 70 114 Command: "USER", 71 Params: []string{testUsername , "0", "*", testUsername},115 Params: []string{testUsername + "/" + network.Name, "0", "*", testUsername}, 72 116 }) 73 117 … … 75 119 } 76 120 121 func registerUpstreamConn(t *testing.T, c ircConn) { 122 msg := expectMessage(t, c, "CAP") 123 if msg.Params[0] != "LS" { 124 t.Fatalf("invalid CAP LS: got: %v", msg) 125 } 126 msg = expectMessage(t, c, "NICK") 127 nick := msg.Params[0] 128 if nick != testUsername { 129 t.Fatalf("invalid NICK: want %q, got: %v", testUsername, msg) 130 } 131 expectMessage(t, c, "USER") 132 133 c.WriteMessage(&irc.Message{ 134 Prefix: testServerPrefix, 135 Command: irc.RPL_WELCOME, 136 Params: []string{nick, "Welcome!"}, 137 }) 138 c.WriteMessage(&irc.Message{ 139 Prefix: testServerPrefix, 140 Command: irc.RPL_YOURHOST, 141 Params: []string{nick, "Your host is soju-test-server"}, 142 }) 143 c.WriteMessage(&irc.Message{ 144 Prefix: testServerPrefix, 145 Command: irc.RPL_CREATED, 146 Params: []string{nick, "Who cares when the server was created?"}, 147 }) 148 c.WriteMessage(&irc.Message{ 149 Prefix: testServerPrefix, 150 Command: irc.RPL_MYINFO, 151 Params: []string{nick, testServerPrefix.Name, "soju", "aiwroO", "OovaimnqpsrtklbeI"}, 152 }) 153 c.WriteMessage(&irc.Message{ 154 Prefix: testServerPrefix, 155 Command: irc.ERR_NOMOTD, 156 Params: []string{nick, "No MOTD"}, 157 }) 158 } 159 77 160 func TestServer(t *testing.T) { 78 srv := createTestUser(t) 161 db := createTempDB(t) 162 user := createTestUser(t, db) 163 network, upstream := createTestUpstream(t, db, user) 164 defer upstream.Close() 165 166 srv := NewServer(db) 79 167 if err := srv.Start(); err != nil { 80 168 t.Fatalf("failed to start server: %v", err) … … 82 170 defer srv.Shutdown() 83 171 84 c, srvConn := ircPipe()85 defer c.Close()86 go srv.handle(srvConn)172 uc := <-upstream.Accept 173 defer uc.Close() 174 registerUpstreamConn(t, uc) 87 175 88 authTestUser(t, c) 176 dc := createTestDownstream(t, srv) 177 defer dc.Close() 178 179 registerDownstreamConn(t, dc, network) 89 180 }
Note:
See TracChangeset
for help on using the changeset viewer.