func TestReadLastID(t *testing.T) { ctrl, finish := testutil.NewMockCtrl(t) defer finish() defer testutil.EnableDebugForMethod()() a := assert.New(t) mockSmsSender := NewMockSender(ctrl) kvStore := kvstore.NewMemoryKVStore() a.NotNil(kvStore) routerMock := NewMockRouter(testutil.MockCtrl) routerMock.EXPECT().KVStore().AnyTimes().Return(kvStore, nil) msgStore := dummystore.New(kvStore) routerMock.EXPECT().MessageStore().AnyTimes().Return(msgStore, nil) topic := "/sms" worker := 1 config := Config{ Workers: &worker, SMSTopic: &topic, Name: "test_gateway", Schema: SMSSchema, } gw, err := New(routerMock, mockSmsSender, config) a.NoError(err) gw.SetLastSentID(uint64(10)) gw.ReadLastID() a.Equal(uint64(10), gw.LastIDSent) }
func aStartedRouter() (*router, auth.AccessManager, store.MessageStore, kvstore.KVStore) { am := auth.NewAllowAllAccessManager(true) kvs := kvstore.NewMemoryKVStore() ms := dummystore.New(kvs) router := New(am, ms, kvs, nil).(*router) router.Start() return router, am, ms, kvs }
func aMockedServiceWithMockedRouterStandalone() (*Service, kvstore.KVStore, store.MessageStore, *MockRouter) { kvStore := kvstore.NewMemoryKVStore() messageStore := dummystore.New(kvStore) routerMock := NewMockRouter(testutil.MockCtrl) routerMock.EXPECT().Cluster().Return(nil).MaxTimes(2) service := New(routerMock, webserver.New("localhost:0")) return service, kvStore, messageStore, routerMock }
func Test_StartStop(t *testing.T) { ctrl, finish := testutil.NewMockCtrl(t) defer finish() a := assert.New(t) mockSmsSender := NewMockSender(ctrl) kvStore := kvstore.NewMemoryKVStore() a.NotNil(kvStore) routerMock := NewMockRouter(testutil.MockCtrl) routerMock.EXPECT().KVStore().AnyTimes().Return(kvStore, nil) msgStore := dummystore.New(kvStore) routerMock.EXPECT().MessageStore().AnyTimes().Return(msgStore, nil) topic := "sms" worker := 1 config := Config{ Workers: &worker, SMSTopic: &topic, Name: "test_gateway", Schema: SMSSchema, } routerMock.EXPECT().Subscribe(gomock.Any()).Do(func(r *router.Route) (*router.Route, error) { a.Equal(topic, r.Path.Partition()) return r, nil }) gw, err := New(routerMock, mockSmsSender, config) a.NoError(err) err = gw.Start() a.NoError(err) err = gw.Stop() a.NoError(err) time.Sleep(100 * time.Millisecond) }
func Test_SendOneSms(t *testing.T) { ctrl, finish := testutil.NewMockCtrl(t) defer finish() defer testutil.EnableDebugForMethod()() a := assert.New(t) mockSmsSender := NewMockSender(ctrl) kvStore := kvstore.NewMemoryKVStore() a.NotNil(kvStore) routerMock := NewMockRouter(testutil.MockCtrl) routerMock.EXPECT().KVStore().AnyTimes().Return(kvStore, nil) msgStore := dummystore.New(kvStore) routerMock.EXPECT().MessageStore().AnyTimes().Return(msgStore, nil) topic := "/sms" worker := 1 config := Config{ Workers: &worker, SMSTopic: &topic, Name: "test_gateway", Schema: SMSSchema, } routerMock.EXPECT().Subscribe(gomock.Any()).Do(func(r *router.Route) (*router.Route, error) { a.Equal(topic, string(r.Path)) return r, nil }) gw, err := New(routerMock, mockSmsSender, config) a.NoError(err) err = gw.Start() a.NoError(err) sms := NexmoSms{ To: "toNumber", From: "FromNUmber", Text: "body", } d, err := json.Marshal(&sms) a.NoError(err) msg := protocol.Message{ Path: protocol.Path(topic), ID: uint64(4), Body: d, } mockSmsSender.EXPECT().Send(gomock.Eq(&msg)).Return(nil) a.NotNil(gw.route) gw.route.Deliver(&msg) time.Sleep(100 * time.Millisecond) err = gw.Stop() a.NoError(err) err = gw.ReadLastID() a.NoError(err) time.Sleep(100 * time.Millisecond) }
}) if err := db.Open(); err != nil { logger.WithError(err).Panic("Could not open postgres database connection") } return db default: panic(fmt.Errorf("Unknown key-value backend: %q", *Config.KVS)) } } // CreateMessageStore is a func which returns a store.MessageStore implementation // (currently, based on guble configuration). var CreateMessageStore = func() store.MessageStore { switch *Config.MS { case "none", "memory", "": return dummystore.New(kvstore.NewMemoryKVStore()) case "file": logger.WithField("storagePath", *Config.StoragePath).Info("Using FileMessageStore in directory") return filestore.New(*Config.StoragePath) default: panic(fmt.Errorf("Unknown message-store backend: %q", *Config.MS)) } } // CreateModules is a func which returns a slice of modules which should be used by the service // (currently, based on guble configuration); // see package `service` for terminological details. var CreateModules = func(router router.Router) []interface{} { var modules []interface{} if wsHandler, err := websocket.NewWSHandler(router, "/stream/"); err != nil {