spongy/spongyd/network_test.go

86 lines
1.8 KiB
Go

package main
import (
"io/ioutil"
"os"
"path"
"strings"
"testing"
"time"
)
func writeFile(fn string, data string) {
ioutil.WriteFile(fn, []byte(data), os.ModePerm)
}
func createNetwork (t *testing.T, parent string) (base string, current string) {
base, err := ioutil.TempDir(parent, "spongy-test")
if err != nil {
t.Fatal(err)
}
writeFile(path.Join(base, "nick"), "SpongyTest")
writeFile(path.Join(base, "server"), "moo.slashnet.org:6697")
writeFile(path.Join(base, "channels"), "#SpongyTest")
os.Mkdir(path.Join(base, "outq"), os.ModePerm)
os.Mkdir(path.Join(base, "log"), os.ModePerm)
current = path.Join(base, "log", "current")
return
}
func expect(t *testing.T, fpath string, needle string) {
for i := 0; i < 8; i += 1 {
if i > 0 {
time.Sleep(1 * time.Second)
}
fpBytes, err := ioutil.ReadFile(fpath)
if err != nil {
t.Log(err)
time.Sleep(1 * time.Second)
continue
}
fpString := string(fpBytes)
if strings.Contains(fpString, needle) {
return
}
}
t.Errorf("Could not find %#v in %s", needle, fpath)
}
func TestCreateNetwork(t *testing.T) {
base, _ := createNetwork(t, "")
if fi, err := os.Stat(path.Join(base, "nick")); err != nil {
t.Error(err)
} else if fi.IsDir() {
t.Error("%s is not a regular file", path.Join(base, "nick"))
}
os.RemoveAll(base)
if _, err := os.Stat(path.Join(base, "outq")); err == nil {
t.Error("Didn't unlink outq")
}
}
func TestConnect(t *testing.T) {
base, current := createNetwork(t, "")
defer os.RemoveAll(base)
n := NewNetwork(base)
go n.Connect()
time.Sleep(5 * time.Second)
expect(t, current, " 001 ")
expect(t, current, " JOIN " + n.Nick + " #SpongyTest")
ioutil.WriteFile(path.Join(base, "outq", "merf"), []byte("PART #SpongyTest\n"), os.ModePerm)
expect(t, current, " PART ")
n.Close()
return
}