Просмотр исходного кода

icqlegacy: remove redundant offline message sending

Mike 2 месяцев назад
Родитель
Сommit
613e734e12
3 измененных файлов с 38 добавлено и 43 удалено
  1. 1 0
      server/icq_legacy/helpers_test.go
  2. 2 0
      server/icq_legacy/service.go
  3. 35 43
      server/icq_legacy/service_test.go

+ 1 - 0
server/icq_legacy/helpers_test.go

@@ -38,6 +38,7 @@ type channelMsgToHostParams []struct {
 	screenName state.IdentScreenName
 	inFrame    wire.SNACFrame
 	inBody     wire.SNAC_0x04_0x06_ICBMChannelMsgToHost
+	result     *wire.SNACMessage
 	err        error
 }
 

+ 2 - 0
server/icq_legacy/service.go

@@ -527,7 +527,9 @@ func (s *ICQLegacyService) ProcessMessage(ctx context.Context, session *LegacySe
 	if resp != nil && resp.Frame.FoodGroup == wire.ICBM && resp.Frame.SubGroup == wire.ICBMErr {
 		if snErr, ok := resp.Body.(wire.SNACError); ok {
 			if snErr.Code == wire.ErrorCodeNotLoggedOn {
+				result.Delivered = false
 				result.StoredOffline = true
+				result.TargetOnline = false
 				s.logger.Info("ProcessMessage: message stored for offline delivery",
 					"from", req.FromUIN,
 					"to", req.ToUIN,

+ 35 - 43
server/icq_legacy/service_test.go

@@ -222,14 +222,6 @@ func TestICQLegacyService_ProcessMessage(t *testing.T) {
 				Message: "hello from legacy",
 			},
 			mockParams: mockParams{
-				sessionRetrieverParams: sessionRetrieverParams{
-					retrieveSessionParams: retrieveSessionParams{
-						{
-							screenName: state.NewIdentScreenName("22222"),
-							result:     &state.Session{},
-						},
-					},
-				},
 				icbmFoodgroupParams: icbmFoodgroupParams{
 					channelMsgToHostParams: channelMsgToHostParams{
 						{
@@ -265,6 +257,7 @@ func TestICQLegacyService_ProcessMessage(t *testing.T) {
 		},
 		{
 			name: "target offline - stored",
+			sess: newTestLegacySession(11111, legacySessionOptOSCARSess),
 			req: MessageRequest{
 				FromUIN: 11111,
 				ToUIN:   22222,
@@ -272,18 +265,37 @@ func TestICQLegacyService_ProcessMessage(t *testing.T) {
 				Message: "offline msg",
 			},
 			mockParams: mockParams{
-				sessionRetrieverParams: sessionRetrieverParams{
-					retrieveSessionParams: retrieveSessionParams{
-						{
-							screenName: state.NewIdentScreenName("22222"),
-							result:     nil,
-						},
-					},
-				},
-				offlineMessageManagerParams: offlineMessageManagerParams{
-					saveMessageParams: saveMessageParams{
+				icbmFoodgroupParams: icbmFoodgroupParams{
+					channelMsgToHostParams: channelMsgToHostParams{
 						{
-							count: 1,
+							screenName: state.NewIdentScreenName("11111"),
+							inFrame: wire.SNACFrame{
+								FoodGroup: wire.ICBM,
+								SubGroup:  wire.ICBMChannelMsgToHost,
+							},
+							inBody: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
+								ChannelID:  wire.ICBMChannelICQ,
+								ScreenName: "22222",
+								TLVRestBlock: wire.TLVRestBlock{
+									TLVList: wire.TLVList{
+										wire.NewTLVLE(wire.ICBMTLVData, wire.ICBMCh4Message{
+											UIN:         11111,
+											MessageType: wire.ICBMMsgTypePlain,
+											Message:     "offline msg",
+										}),
+										wire.NewTLVBE(wire.ICBMTLVStore, []byte{}),
+									},
+								},
+							},
+							result: &wire.SNACMessage{
+								Frame: wire.SNACFrame{
+									FoodGroup: wire.ICBM,
+									SubGroup:  wire.ICBMErr,
+								},
+								Body: wire.SNACError{
+									Code: wire.ErrorCodeNotLoggedOn,
+								},
+							},
 						},
 					},
 				},
@@ -327,41 +339,21 @@ func TestICQLegacyService_ProcessMessage(t *testing.T) {
 
 	for _, tc := range tests {
 		t.Run(tc.name, func(t *testing.T) {
-			sessionRetriever := newMockSessionRetriever(t)
-			for _, p := range tc.mockParams.retrieveSessionParams {
-				sessionRetriever.EXPECT().
-					RetrieveSession(p.screenName).
-					Return(p.result)
-			}
-
-			messageRelayer := newMockMessageRelayer(t)
-			for range tc.mockParams.relayToScreenNameParams {
-				messageRelayer.EXPECT().
-					RelayToScreenName(matchContext(), mock.Anything, mock.Anything).
-					Return()
-			}
-
-			offlineMsgMgr := newMockOfflineMessageManager(t)
-			for _, p := range tc.mockParams.saveMessageParams {
-				offlineMsgMgr.EXPECT().
-					SaveMessage(matchContext(), mock.Anything).
-					Return(p.count, p.err)
-			}
 
 			icbmSvc := newMockICBMService(t)
 			for _, msg := range tc.mockParams.channelMsgToHostParams {
 				icbmSvc.EXPECT().
 					ChannelMsgToHost(matchContext(), matchSession(msg.screenName), msg.inFrame, msg.inBody).
-					Return(nil, msg.err)
+					Return(msg.result, msg.err)
 			}
 
 			svc := NewICQLegacyService(
 				newMockUserManager(t),
 				newMockAccountManager(t),
-				sessionRetriever,
-				messageRelayer,
+				newMockSessionRetriever(t),
+				newMockMessageRelayer(t),
 				newMockBuddyBroadcaster(t),
-				offlineMsgMgr,
+				newMockOfflineMessageManager(t),
 				newMockICQUserFinder(t),
 				newMockICQUserUpdater(t),
 				newMockFeedbagManager(t),