From 27660fb5958aaf3960aba120bebd26cb00773883 Mon Sep 17 00:00:00 2001 From: Liam Stanley Date: Wed, 22 Feb 2017 00:25:04 -0500 Subject: [PATCH] add some tests for various connection methods --- conn_test.go | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++ event_test.go | 9 ++++ 2 files changed, 131 insertions(+) create mode 100644 conn_test.go diff --git a/conn_test.go b/conn_test.go new file mode 100644 index 0000000..1a04121 --- /dev/null +++ b/conn_test.go @@ -0,0 +1,122 @@ +// Copyright (c) Liam Stanley . All rights reserved. Use +// of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package girc + +import ( + "bufio" + "bytes" + "testing" + "time" +) + +func TestNewConn(t *testing.T) { + conf := Config{Server: "", Port: 6667, Nick: "nick", User: "user", Name: "realname"} + conn, err := newConn(conf, conf.Server+":6667") + if err == nil { + t.Fatal("invalid server but no error") + } + conf.Server = "irc.byteirc.org" + conn, err = newConn(conf, conf.Server+":6667") + if err != nil { + t.Fatal(err) + } + if !conn.connected { + t.Fatal("conn provided but not connected") + } + conn.Close() +} + +func mockBuffers() (in *bytes.Buffer, out *bytes.Buffer, irc *ircConn) { + in = &bytes.Buffer{} + out = &bytes.Buffer{} + irc = &ircConn{ + io: bufio.NewReadWriter(bufio.NewReader(in), bufio.NewWriter(out)), + connected: true, + } + + return in, out, irc +} + +func TestDecode(t *testing.T) { + in, _, c := mockBuffers() + + e := mockEvent() + + in.Write(e.Bytes()) + in.Write(endline) + + event, err := c.decode() + if err != nil { + t.Fatalf("received error during decode: %s", err) + } + + if event.String() != e.String() { + t.Fatalf("event returned from decode not the same as mock event. want %#v, got %#v", e, event) + } + + // Test a failure. + in.WriteString("::abcd\r\n") + event, err = c.decode() + if err == nil { + t.Fatalf("should have failed to parse decoded event. got: %#v", event) + } + + return +} + +func TestEncode(t *testing.T) { + _, out, c := mockBuffers() + + e := mockEvent() + + err := c.encode(e) + if err != nil { + t.Fatalf("received error during encode: %s", err) + } + + line, err := out.ReadString(delim) + if err != nil { + t.Fatalf("received error during check for encoded event: %s", err) + } + + want := e.String() + "\r\n" + + if want != line { + t.Fatalf("encoded line wanted: %q, got: %q", want, line) + } + + return +} + +func TestRate(t *testing.T) { + _, _, c := mockBuffers() + c.lastWrite = time.Now() + if delay := c.rate(100); delay > time.Second { + t.Fatal("first instance of rate is > second") + } + + for i := 0; i < 500; i++ { + c.rate(200) + } + + if delay := c.rate(200); delay > (3 * time.Second) { + t.Fatal("rate delay too high") + } + + return +} + +func TestFlushTx(t *testing.T) { + c := &Client{tx: make(chan *Event, 50)} + + for i := 0; i < 25; i++ { + c.tx <- &Event{} + } + + c.flushTx() + if len(c.tx) > 0 { + t.Fatalf("flush failed too flush all events: %d remaining", len(c.tx)) + } +} diff --git a/event_test.go b/event_test.go index 5f83c87..331656b 100644 --- a/event_test.go +++ b/event_test.go @@ -9,6 +9,15 @@ import ( "testing" ) +func mockEvent() *Event { + return &Event{ + Source: &Source{Name: "nick", Ident: "user", Host: "host.com"}, + Command: "PRIVMSG", + Params: []string{"#channel"}, + Trailing: "1 2 3", + } +} + func TestParseSource(t *testing.T) { type args struct { raw string