package irc import ( "fmt" "log" "strconv" "strings" "testing" "time" ) const ( channel = "#testing" ) func TestJoinChannel(t *testing.T) { con := NewConnection("irc.ouch.chat:6667", "irc-go", "irc-go", nil, []string{channel}) go con.Run() time.Sleep(5 * time.Second) t.Logf("%d users in channel %s\n", len(con.userList[channel]), channel) con.SendPrivmsg(channel, fmt.Sprintf("\x0356FUCK ALL %d OF YOU BITCHES", len(con.userList[channel]))) i := 0 for _, v := range con.userList[channel] { con.SendPrivmsg(channel, fmt.Sprintf("yo %s fuck you", v)) if i >= 5 { time.Sleep(1000 * time.Millisecond) i = 0 } } time.Sleep(1 * time.Second) con.SendQuit("go-irc: Test Join Channel") } func TestJoinCallback(t *testing.T) { con := NewConnection("irc.ouch.chat:6667", "irc-go", "irc-go", nil, []string{channel}) i := 0 con.JoinCallback = func(from, target string) { i++ for _, x := range con.userList[channel] { con.SendPrivmsg(channel, x) } if i == 3 { con.SendQuit("") } } go con.Run() time.Sleep(10 * time.Second) t1 := NewConnection("irc.ouch.chat:6667", "abc", "abc", nil, []string{channel}) t2 := NewConnection("irc.ouch.chat:6667", "def", "def", nil, []string{channel}) go t1.Run() time.Sleep(5 * time.Second) go t2.Run() time.Sleep(10 * time.Second) t1.SendQuit("") t2.SendQuit("") } func TestLusers(t *testing.T) { con := NewConnection("irc.ouch.chat:6667", "irc-go", "irc-go", nil, []string{channel}) con.NumericCallback = func(from string, i int, args string) { if i == RPL_LUSERCLIENT { con.SendJoin(channel) s := strings.Split(args, ":") if len(s) > 1 { users := 0 invis := 0 servers := 0 fmt.Sscanf(s[1], "There are %d users and %d invisible on %d servers", &users, &invis, &servers) con.SendPrivmsg(channel, fmt.Sprintf("total users on network: %d, invisible %d, servers %d", users, invis, servers)) } con.SendQuit("go-irc: Test luser scan") } } con.Run() } func TestLusersChannels(t *testing.T) { con := NewConnection("irc.ouch.chat:6667", "irc-go", "irc-go", nil, []string{channel}) con.NumericCallback = func(from string, i int, args string) { if i == RPL_LUSERCHANNELS { con.SendJoin(channel) s := strings.TrimSpace(strings.Split(args, " ")[1]) val, err := strconv.Atoi(s) if err == nil { con.SendPrivmsg(channel, fmt.Sprintf("There are %d channels formed", val)) } else { t.Fatal(err.Error()) } con.SendQuit("go-irc: test luser channels") } } con.Run() } func TestGetServerInfo(t *testing.T) { con := NewConnection("irc.ouch.chat:6667", "irc-go", "irc-go", nil, []string{channel}) con.NumericCallback = func(from string, i int, args string) { if i == RPL_ENDOFMOTD { go func() { res := GetServerInfo("irc.libera.chat:6667", "irc-go4240") con.SendPrivmsg(channel, fmt.Sprintf("Libera has %d users, %d channels, %d servers, %d invisible", res.Users, res.Channels, res.Servers, res.Invisible)) res = GetServerInfo("irc.choopa.net:6667", "irc-go4240") con.SendPrivmsg(channel, fmt.Sprintf("EFNet has %d users, %d channels, %d servers, %d invisible", res.Users, res.Channels, res.Servers, res.Invisible)) res = GetServerInfo("irc.us.ircnet.net:6667", "irc-go4240") con.SendPrivmsg(channel, fmt.Sprintf("IRCnet has %d users, %d channels, %d servers, %d invisible", res.Users, res.Channels, res.Servers, res.Invisible)) res = GetServerInfo("irc.letspiss.net:6667", "irc-go4240") con.SendPrivmsg(channel, fmt.Sprintf("pissnet has %d users, %d channels, %d servers, %d invisible", res.Users, res.Channels, res.Servers, res.Invisible)) con.SendQuit("go-irc: test GetServerInfo") }() } } con.Run() } func TestParser(t *testing.T) { log.Printf("testing %s\n", t.Name()) }