func (c *conn) initRoute() { c.route = router.NewRoute(router.RouteConfig{ Path: protocol.Path(*c.config.SMSTopic), ChannelSize: 10, FetchRequest: c.fetchRequest(), }) }
func (sd *SubscriberData) newRoute() *router.Route { var fr *store.FetchRequest if sd.LastID > 0 { fr = store.NewFetchRequest(sd.Topic.Partition(), sd.LastID, 0, store.DirectionForward, -1) } return router.NewRoute(router.RouteConfig{ Path: sd.Topic, RouteParams: sd.Params, FetchRequest: fr, }) }
func (rec *Receiver) subscribe() { rec.route = router.NewRoute( router.RouteConfig{ RouteParams: router.RouteParams{"application_id": rec.applicationID, "user_id": rec.userID}, Path: rec.path, ChannelSize: 10, }, ) _, err := rec.router.Subscribe(rec.route) if err != nil { rec.sendError(protocol.ERROR_SUBSCRIBED_TO, string(rec.path), err.Error()) } else { rec.sendOK(protocol.SUCCESS_SUBSCRIBED_TO, string(rec.path)) } }
// Ensure the subscription is started when posting func TestConnector_PostSubscription(t *testing.T) { _, finish := testutil.NewMockCtrl(t) defer finish() a := assert.New(t) recorder := httptest.NewRecorder() conn, mocks := getTestConnector(t, Config{ Name: "test", Schema: "test", Prefix: "/connector/", URLPattern: "/{device_token}/{user_id}/{topic:.*}", }, true, false) mocks.manager.EXPECT().Load().Return(nil) mocks.manager.EXPECT().List().Return(make([]Subscriber, 0)) err := conn.Start() a.NoError(err) defer conn.Stop() subscriber := NewMockSubscriber(testutil.MockCtrl) mocks.manager.EXPECT().Create(gomock.Eq(protocol.Path("/topic1")), gomock.Eq(router.RouteParams{ "device_token": "device1", "user_id": "user1", })).Return(subscriber, nil) subscriber.EXPECT().Loop(gomock.Any(), gomock.Any()) r := router.NewRoute(router.RouteConfig{ Path: protocol.Path("topic1"), RouteParams: router.RouteParams{ "device_token": "device1", "user_id": "user1", }, }) subscriber.EXPECT().Route().Return(r) mocks.router.EXPECT().Subscribe(gomock.Eq(r)).Return(r, nil) req, err := http.NewRequest(http.MethodPost, "/connector/device1/user1/topic1", strings.NewReader("")) a.NoError(err) conn.ServeHTTP(recorder, req) a.Equal(`{"subscribed":"/topic1"}`, recorder.Body.String()) time.Sleep(100 * time.Millisecond) }
func TestSender_Send(t *testing.T) { _, finish := testutil.NewMockCtrl(t) defer finish() a := assert.New(t) // given routeParams := make(map[string]string) routeParams["device_id"] = "1234" routeConfig := router.RouteConfig{ Path: protocol.Path("path"), RouteParams: routeParams, } route := router.NewRoute(routeConfig) msg := &protocol.Message{ Body: []byte("{}"), } mSubscriber := NewMockSubscriber(testutil.MockCtrl) mSubscriber.EXPECT().Route().Return(route).AnyTimes() mRequest := NewMockRequest(testutil.MockCtrl) mRequest.EXPECT().Subscriber().Return(mSubscriber).AnyTimes() mRequest.EXPECT().Message().Return(msg).AnyTimes() mPusher := NewMockPusher(testutil.MockCtrl) mPusher.EXPECT().Push(gomock.Any()).Return(nil, nil) // and s, err := NewSenderUsingPusher(mPusher, "com.myapp") a.NoError(err) // when rsp, err := s.Send(mRequest) // then a.NoError(err) a.Nil(rsp) }