@ -7,16 +7,22 @@ import androidx.test.filters.SmallTest
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  androidx.test.platform.app.InstrumentationRegistry 
 
					 
					 
					 
					import  androidx.test.platform.app.InstrumentationRegistry 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  network.loki.messenger.libsession_util.ConfigBase 
 
					 
					 
					 
					import  network.loki.messenger.libsession_util.ConfigBase 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  network.loki.messenger.libsession_util.Contacts 
 
					 
					 
					 
					import  network.loki.messenger.libsession_util.Contacts 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					import  network.loki.messenger.libsession_util.ConversationVolatileConfig 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  network.loki.messenger.libsession_util.util.Contact 
 
					 
					 
					 
					import  network.loki.messenger.libsession_util.util.Contact 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					import  network.loki.messenger.libsession_util.util.Conversation 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  network.loki.messenger.libsession_util.util.ExpiryMode 
 
					 
					 
					 
					import  network.loki.messenger.libsession_util.util.ExpiryMode 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  org.junit.Before 
 
					 
					 
					 
					import  org.junit.Before 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  org.junit.Test 
 
					 
					 
					 
					import  org.junit.Test 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  org.junit.runner.RunWith 
 
					 
					 
					 
					import  org.junit.runner.RunWith 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  org.mockito.kotlin.argThat 
 
					 
					 
					 
					import  org.mockito.kotlin.argThat 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					import  org.mockito.kotlin.argWhere 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  org.mockito.kotlin.eq 
 
					 
					 
					 
					import  org.mockito.kotlin.eq 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  org.mockito.kotlin.spy 
 
					 
					 
					 
					import  org.mockito.kotlin.spy 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  org.mockito.kotlin.verify 
 
					 
					 
					 
					import  org.mockito.kotlin.verify 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  org.session.libsession.messaging.MessagingModuleConfiguration 
 
					 
					 
					 
					import  org.session.libsession.messaging.MessagingModuleConfiguration 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					import  org.session.libsession.messaging.messages.ExpirationConfiguration 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					import  org.session.libsession.snode.SnodeAPI 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					import  org.session.libsession.utilities.Address 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  org.session.libsession.utilities.TextSecurePreferences 
 
					 
					 
					 
					import  org.session.libsession.utilities.TextSecurePreferences 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  org.session.libsignal.utilities.KeyHelper 
 
					 
					 
					 
					import  org.session.libsignal.utilities.KeyHelper 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  org.session.libsignal.utilities.hexEncodedPublicKey 
 
					 
					 
					 
					import  org.session.libsignal.utilities.hexEncodedPublicKey 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -50,13 +56,22 @@ class LibSessionTests {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    private  fun  buildContactMessage ( contactList :  List < Contact > ) :  ByteArray  { 
 
					 
					 
					 
					    private  fun  buildContactMessage ( contactList :  List < Contact > ) :  ByteArray  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        val  ( key , _ )  =  maybeGetUserInfo ( ) !! 
 
					 
					 
					 
					        val  ( key , _ )  =  maybeGetUserInfo ( ) !! 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        val  contacts  =  Contacts . Companion . newInstance ( key ) 
 
					 
					 
					 
					        val  contacts  =  Contacts . newInstance ( key ) 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					        contactList . forEach  {  contact  -> 
 
					 
					 
					 
					        contactList . forEach  {  contact  -> 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            contacts . set ( contact ) 
 
					 
					 
					 
					            contacts . set ( contact ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        } 
 
					 
					 
					 
					        } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        return  contacts . push ( ) . config 
 
					 
					 
					 
					        return  contacts . push ( ) . config 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    } 
 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    private  fun  buildVolatileMessage ( conversations :  List < Conversation > ) :  ByteArray  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        val  ( key ,  _ )  =  maybeGetUserInfo ( ) !! 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        val  volatile  =  ConversationVolatileConfig . newInstance ( key ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        conversations . forEach  {  conversation  -> 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            volatile . set ( conversation ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        return  volatile . push ( ) . config 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    private  fun  fakePollNewConfig ( configBase :  ConfigBase ,  toMerge :  ByteArray )  { 
 
					 
					 
					 
					    private  fun  fakePollNewConfig ( configBase :  ConfigBase ,  toMerge :  ByteArray )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        configBase . merge ( nextFakeHash  to  toMerge ) 
 
					 
					 
					 
					        configBase . merge ( nextFakeHash  to  toMerge ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        MessagingModuleConfiguration . shared . configFactory . persist ( configBase ,  System . currentTimeMillis ( ) ) 
 
					 
					 
					 
					        MessagingModuleConfiguration . shared . configFactory . persist ( configBase ,  System . currentTimeMillis ( ) ) 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -99,4 +114,38 @@ class LibSessionTests {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        verify ( storageSpy ) . setRecipientApproved ( argThat  {  address . serialize ( )  ==  newContactId  } ,  eq ( true ) ) 
 
					 
					 
					 
					        verify ( storageSpy ) . setRecipientApproved ( argThat  {  address . serialize ( )  ==  newContactId  } ,  eq ( true ) ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    } 
 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    @Test 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    fun  test _expected _configs ( )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        val  app  =  InstrumentationRegistry . getInstrumentation ( ) . targetContext . applicationContext  as  ApplicationContext 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        val  storageSpy  =  spy ( app . storage ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        app . storage  =  storageSpy 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        val  randomRecipient  =  randomSessionId ( ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        val  newContact  =  Contact ( 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            id  =  randomRecipient , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            approved  =  true , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            expiryMode  =  ExpiryMode . AfterSend ( 1000 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        val  newConvo  =  Conversation . OneToOne ( 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            randomRecipient , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            SnodeAPI . nowWithOffset , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            false 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        val  volatiles  =  MessagingModuleConfiguration . shared . configFactory . convoVolatile !! 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        val  contacts  =  MessagingModuleConfiguration . shared . configFactory . contacts !! 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        val  newContactMerge  =  buildContactMessage ( listOf ( newContact ) ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        val  newVolatileMerge  =  buildVolatileMessage ( listOf ( newConvo ) ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        val  expConfig  =  ExpirationConfiguration ( ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        val  recipientAddress  =  Address . fromSerialized ( randomRecipient ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        fakePollNewConfig ( contacts ,  newContactMerge ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        fakePollNewConfig ( volatiles ,  newVolatileMerge ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        val  threadId  =  storageSpy . getThreadId ( recipientAddress ) !! 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					//        whenever(storageSpy.getExpirationConfiguration(eq(threadId))).thenReturn(expConfig) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					//        doNothing().whenever(storageSpy).setExpirationConfiguration(any()) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					//        verify(storageSpy).getExpirationConfiguration(eq(threadId)) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        verify ( storageSpy ) . setExpirationConfiguration ( argWhere  {  config  -> 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            config . expiryMode  is  ExpiryMode . AfterSend 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        } ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					}