7 Commits

Author SHA1 Message Date
James Mills
c69d9a1259 New test framework with better reliability 2017-11-28 02:11:40 -08:00
James Mills
e6491c955a Moar tests 2017-11-28 01:03:28 -08:00
James Mills
c0b8342b32 Rename some tests 2017-11-28 00:17:25 -08:00
James Mills
6f16f24a98 Add TestUser_PRIVMSG test 2017-11-28 00:13:21 -08:00
James Mills
b5239acd9b Update vendor 3rd-party deps for missing github.com/stretchr/testify/assert 2017-11-27 23:56:51 -08:00
James Mills
73ace6b829 Add TestConnect_RplWelcome test 2017-11-27 23:43:19 -08:00
James Mills
bf78fbc9f4 Added a basic integration test suite framework 2017-11-27 23:21:48 -08:00
8 changed files with 201 additions and 4 deletions

6
.gitmodules vendored
View File

@@ -49,3 +49,9 @@
[submodule "vendor/github.com/petermattis/goid"]
path = vendor/github.com/petermattis/goid
url = https://github.com/petermattis/goid
[submodule "vendor/github.com/thoj/go-ircevent"]
path = vendor/github.com/thoj/go-ircevent
url = https://github.com/thoj/go-ircevent
[submodule "vendor/github.com/stretchr/testify"]
path = vendor/github.com/stretchr/testify
url = https://github.com/stretchr/testify

View File

@@ -202,6 +202,10 @@ func (server *Server) Shutdown() {
server.Global("shutting down...")
}
func (server *Server) Stop() {
server.done <- true
}
func (server *Server) Run() {
for {
select {
@@ -212,7 +216,7 @@ func (server *Server) Run() {
// Give at least 1s for clients to see the shutdown
go func() {
time.Sleep(1 * time.Second)
server.done <- true
server.Stop()
}()
case conn := <-server.newConns:

185
main_test.go Normal file
View File

@@ -0,0 +1,185 @@
package main
import (
"flag"
"log"
"os"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/thoj/go-ircevent"
eris "github.com/prologic/eris/irc"
)
var (
done chan bool
server *eris.Server
client *irc.Connection
clients map[string]*irc.Connection
tls = flag.Bool("tls", false, "run tests with TLS")
)
func setupServer() *eris.Server {
config := &eris.Config{}
config.Network.Name = "Test"
config.Server.Name = "test"
config.Server.Description = "Test"
config.Server.Listen = []string{":6667"}
server := eris.NewServer(config)
go server.Run()
return server
}
func newClient(nick, user, name string, start bool) *irc.Connection {
client := irc.IRC(nick, user)
client.RealName = name
err := client.Connect("localhost:6667")
if err != nil {
log.Fatalf("error setting up test client: %s", err)
}
if start {
go client.Loop()
}
return client
}
func TestMain(m *testing.M) {
flag.Parse()
done = make(chan bool)
server = setupServer()
client = newClient("test", "test", "Test", true)
clients = make(map[string]*irc.Connection)
clients["test1"] = newClient("test1", "test", "Test 1", true)
clients["test2"] = newClient("test2", "test", "Test 2", true)
result := m.Run()
for _, client := range clients {
client.Quit()
}
server.Stop()
os.Exit(result)
}
func TestConnection(t *testing.T) {
assert := assert.New(t)
var (
expected bool
actual chan bool
)
expected = true
actual = make(chan bool)
client := newClient("connect", "connect", "Connect", false)
client.AddCallback("001", func(e *irc.Event) {
defer func() { done <- true }()
actual <- true
})
time.AfterFunc(1*time.Second, func() { done <- true })
defer client.Quit()
go client.Loop()
<-done
assert.Equal(expected, <-actual)
}
func TestRplWelcome(t *testing.T) {
assert := assert.New(t)
var (
expected string
actual chan string
)
expected = "Welcome to the .* Internet Relay Network .*!.*@.*"
actual = make(chan string)
client := newClient("connect", "connect", "Connect", false)
client.AddCallback("001", func(e *irc.Event) {
defer func() { done <- true }()
actual <- e.Message()
})
time.AfterFunc(1*time.Second, func() { done <- true })
defer client.Quit()
go client.Loop()
<-done
assert.Regexp(expected, <-actual)
}
func TestUser_JOIN(t *testing.T) {
assert := assert.New(t)
var (
expected []string
actual chan string
)
expected = []string{"test", "=", "#test", "@test"}
actual = make(chan string)
client.AddCallback("353", func(e *irc.Event) {
defer func() { done <- true }()
for i := range e.Arguments {
actual <- e.Arguments[i]
}
})
time.AfterFunc(1*time.Second, func() { done <- true })
client.Join("#test")
client.SendRaw("NAMES #test")
<-done
for i := range expected {
assert.Equal(expected[i], <-actual)
}
}
func TestUser_PRIVMSG(t *testing.T) {
assert := assert.New(t)
var (
expected string
actual chan string
)
expected = "Hello World!"
actual = make(chan string)
clients["test1"].AddCallback("PRIVMSG", func(e *irc.Event) {
defer func() { done <- true }()
actual <- e.Message()
})
time.AfterFunc(1*time.Second, func() { done <- true })
client.Privmsg("test1", expected)
<-done
assert.Equal(expected, <-actual)
}

1
vendor/github.com/stretchr/testify generated vendored Submodule

1
vendor/github.com/thoj/go-ircevent generated vendored Submodule