func TestAccept(t *testing.T) { Convey("Accept should handle a connection", t, func() { frw := &fakeRw{} mChan := make(chan *data.Message) Accept("1.1.1.1:11111", frw, storage.CreateInMemory(), mChan, "localhost", nil) }) }
func TestSocketError(t *testing.T) { Convey("Socket errors should return from Accept", t, func() { frw := &fakeRw{ _read: func(p []byte) (n int, err error) { return -1, errors.New("OINK") }, } mChan := make(chan *data.Message) Accept("1.1.1.1:11111", frw, storage.CreateInMemory(), mChan, "localhost", nil) }) }
func Configure() *Config { switch cfg.StorageType { case "memory": log.Println("Using in-memory storage") cfg.Storage = storage.CreateInMemory() case "mongodb": log.Println("Using MongoDB message storage") s := storage.CreateMongoDB(cfg.MongoUri, cfg.MongoDb, cfg.MongoColl) if s == nil { log.Println("MongoDB storage unavailable, reverting to in-memory storage") cfg.Storage = storage.CreateInMemory() } else { log.Println("Connected to MongoDB") cfg.Storage = s } default: log.Fatalf("Invalid storage type %s", cfg.StorageType) } if cfg.InviteJim { Jim.Configure(func(message string, args ...interface{}) { log.Printf(message, args...) }) cfg.Monkey = Jim } if len(cfg.OutgoingSMTPFile) > 0 { b, err := ioutil.ReadFile(cfg.OutgoingSMTPFile) if err != nil { log.Fatal(err) } var o map[string]*OutgoingSMTP err = json.Unmarshal(b, &o) if err != nil { log.Fatal(err) } cfg.OutgoingSMTP = o } return cfg }
func TestAcceptMessage(t *testing.T) { Convey("acceptMessage should be called", t, func() { mbuf := "EHLO localhost\nMAIL FROM:<test>\nRCPT TO:<test>\nDATA\nHi.\r\n.\r\nQUIT\n" var rbuf []byte frw := &fakeRw{ _read: func(p []byte) (n int, err error) { if len(p) >= len(mbuf) { ba := []byte(mbuf) mbuf = "" for i, b := range ba { p[i] = b } return len(ba), nil } ba := []byte(mbuf[0:len(p)]) mbuf = mbuf[len(p):] for i, b := range ba { p[i] = b } return len(ba), nil }, _write: func(p []byte) (n int, err error) { rbuf = append(rbuf, p...) return len(p), nil }, _close: func() error { return nil }, } mChan := make(chan *data.Message) var wg sync.WaitGroup wg.Add(1) handlerCalled := false go func() { handlerCalled = true <-mChan //FIXME breaks some tests (in drone.io) //m := <-mChan //So(m, ShouldNotBeNil) wg.Done() }() Accept("1.1.1.1:11111", frw, storage.CreateInMemory(), mChan, "localhost", nil) wg.Wait() So(handlerCalled, ShouldBeTrue) }) }