github.com/status-im/status-go@v1.1.0/protocol/messenger_status_updates_test.go (about)

     1  package protocol
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/suite"
     7  
     8  	"github.com/status-im/status-go/protocol/protobuf"
     9  )
    10  
    11  func TestMessengerStatusUpdatesSuite(t *testing.T) {
    12  	suite.Run(t, new(MessengerStatusUpdatesSuite))
    13  }
    14  
    15  type MessengerStatusUpdatesSuite struct {
    16  	MessengerBaseTestSuite
    17  }
    18  
    19  func (s *MessengerStatusUpdatesSuite) TestNextHigherClockValueOfAutomaticStatusUpdates() {
    20  
    21  	statusUpdate1 := UserStatus{
    22  		StatusType: int(protobuf.StatusUpdate_AUTOMATIC),
    23  		Clock:      100,
    24  		CustomText: "",
    25  		PublicKey:  "pub-key1",
    26  	}
    27  
    28  	err := s.m.persistence.InsertStatusUpdate(statusUpdate1)
    29  	s.Require().NoError(err)
    30  
    31  	statusUpdate2 := UserStatus{
    32  		StatusType: int(protobuf.StatusUpdate_AUTOMATIC),
    33  		Clock:      200,
    34  		CustomText: "",
    35  		PublicKey:  "pub-key2",
    36  	}
    37  
    38  	err = s.m.persistence.InsertStatusUpdate(statusUpdate2)
    39  	s.Require().NoError(err)
    40  
    41  	statusUpdate3 := UserStatus{
    42  		StatusType: int(protobuf.StatusUpdate_AUTOMATIC),
    43  		Clock:      300,
    44  		CustomText: "",
    45  		PublicKey:  "pub-key3",
    46  	}
    47  
    48  	err = s.m.persistence.InsertStatusUpdate(statusUpdate3)
    49  	s.Require().NoError(err)
    50  
    51  	// nextClock: clock value next higher than passed clock, of status update of type StatusUpdate_AUTOMATIC
    52  	nextClock, err := s.m.persistence.NextHigherClockValueOfAutomaticStatusUpdates(100)
    53  	s.Require().NoError(err)
    54  
    55  	s.Require().Equal(nextClock, uint64(200))
    56  
    57  }
    58  
    59  func (s *MessengerStatusUpdatesSuite) TestDeactivatedStatusUpdates() {
    60  
    61  	statusUpdate1 := UserStatus{
    62  		StatusType: int(protobuf.StatusUpdate_AUTOMATIC),
    63  		Clock:      100,
    64  		CustomText: "",
    65  		PublicKey:  "pub-key1",
    66  	}
    67  
    68  	err := s.m.persistence.InsertStatusUpdate(statusUpdate1)
    69  	s.Require().NoError(err)
    70  
    71  	statusUpdate2 := UserStatus{
    72  		StatusType: int(protobuf.StatusUpdate_AUTOMATIC),
    73  		Clock:      200,
    74  		CustomText: "",
    75  		PublicKey:  "pub-key2",
    76  	}
    77  
    78  	err = s.m.persistence.InsertStatusUpdate(statusUpdate2)
    79  	s.Require().NoError(err)
    80  
    81  	statusUpdate3 := UserStatus{
    82  		StatusType: int(protobuf.StatusUpdate_AUTOMATIC),
    83  		Clock:      400,
    84  		CustomText: "",
    85  		PublicKey:  "pub-key3",
    86  	}
    87  
    88  	err = s.m.persistence.InsertStatusUpdate(statusUpdate3)
    89  	s.Require().NoError(err)
    90  
    91  	statusUpdate4 := UserStatus{
    92  		StatusType: int(protobuf.StatusUpdate_AUTOMATIC),
    93  		Clock:      400, // Adding duplicate clock value for testing
    94  		CustomText: "",
    95  		PublicKey:  "pub-key4",
    96  	}
    97  
    98  	err = s.m.persistence.InsertStatusUpdate(statusUpdate4)
    99  	s.Require().NoError(err)
   100  
   101  	statusUpdate5 := UserStatus{
   102  		StatusType: int(protobuf.StatusUpdate_AUTOMATIC),
   103  		Clock:      500,
   104  		CustomText: "",
   105  		PublicKey:  "pub-key5",
   106  	}
   107  
   108  	err = s.m.persistence.InsertStatusUpdate(statusUpdate5)
   109  	s.Require().NoError(err)
   110  
   111  	// Lower limit is not included, but upper limit is included
   112  	// So every status update in this range (lowerClock upperClock] will be deactivated
   113  	deactivatedAutomaticStatusUpdates, err := s.m.persistence.DeactivatedAutomaticStatusUpdates(100, 400)
   114  	s.Require().NoError(err)
   115  
   116  	count := len(deactivatedAutomaticStatusUpdates)
   117  	s.Require().Equal(3, count)
   118  
   119  	// Status is deactivated
   120  	s.Require().Equal(int(protobuf.StatusUpdate_INACTIVE), deactivatedAutomaticStatusUpdates[0].StatusType)
   121  
   122  	// Lower range starts at 201 (clock + 1)
   123  	// (clock is bumped, so that client replaces old status update with new one)
   124  	s.Require().Equal(uint64(201), deactivatedAutomaticStatusUpdates[0].Clock)
   125  
   126  	//Upper rannge ends at 401 (clock + 1)
   127  	s.Require().Equal(uint64(401), deactivatedAutomaticStatusUpdates[count-1].Clock)
   128  }