Migrate DirectoryQueueTest to JUnit 5.
This commit is contained in:
		
							parent
							
								
									8579190cdf
								
							
						
					
					
						commit
						a6066bfc2f
					
				| 
						 | 
					@ -5,10 +5,10 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package org.whispersystems.textsecuregcm.sqs;
 | 
					package org.whispersystems.textsecuregcm.sqs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import junitparams.JUnitParamsRunner;
 | 
					import org.junit.jupiter.api.Test;
 | 
				
			||||||
import junitparams.Parameters;
 | 
					import org.junit.jupiter.params.ParameterizedTest;
 | 
				
			||||||
import org.junit.Test;
 | 
					import org.junit.jupiter.params.provider.Arguments;
 | 
				
			||||||
import org.junit.runner.RunWith;
 | 
					import org.junit.jupiter.params.provider.MethodSource;
 | 
				
			||||||
import org.mockito.ArgumentCaptor;
 | 
					import org.mockito.ArgumentCaptor;
 | 
				
			||||||
import org.whispersystems.textsecuregcm.storage.Account;
 | 
					import org.whispersystems.textsecuregcm.storage.Account;
 | 
				
			||||||
import software.amazon.awssdk.services.sqs.SqsClient;
 | 
					import software.amazon.awssdk.services.sqs.SqsClient;
 | 
				
			||||||
| 
						 | 
					@ -18,105 +18,104 @@ import software.amazon.awssdk.services.sqs.model.SendMessageBatchRequest;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.UUID;
 | 
					import java.util.UUID;
 | 
				
			||||||
 | 
					import java.util.stream.Stream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static org.junit.Assert.assertEquals;
 | 
					import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
				
			||||||
import static org.mockito.Mockito.mock;
 | 
					import static org.mockito.Mockito.mock;
 | 
				
			||||||
import static org.mockito.Mockito.times;
 | 
					import static org.mockito.Mockito.times;
 | 
				
			||||||
import static org.mockito.Mockito.verify;
 | 
					import static org.mockito.Mockito.verify;
 | 
				
			||||||
import static org.mockito.Mockito.when;
 | 
					import static org.mockito.Mockito.when;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@RunWith(JUnitParamsRunner.class)
 | 
					 | 
				
			||||||
public class DirectoryQueueTest {
 | 
					public class DirectoryQueueTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					  @ParameterizedTest
 | 
				
			||||||
    @Parameters(method = "argumentsForTestRefreshRegisteredUser")
 | 
					  @MethodSource("argumentsForTestRefreshRegisteredUser")
 | 
				
			||||||
    public void testRefreshRegisteredUser(final boolean accountEnabled, final boolean accountDiscoverableByPhoneNumber, final String expectedAction) {
 | 
					  void testRefreshRegisteredUser(final boolean accountEnabled, final boolean accountDiscoverableByPhoneNumber, final String expectedAction) {
 | 
				
			||||||
        final SqsClient sqs            = mock(SqsClient.class);
 | 
					    final SqsClient sqs = mock(SqsClient.class);
 | 
				
			||||||
        final DirectoryQueue directoryQueue = new DirectoryQueue(List.of("sqs://test"), sqs);
 | 
					    final DirectoryQueue directoryQueue = new DirectoryQueue(List.of("sqs://test"), sqs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        final Account account = mock(Account.class);
 | 
					    final Account account = mock(Account.class);
 | 
				
			||||||
        when(account.getNumber()).thenReturn("+18005556543");
 | 
					    when(account.getNumber()).thenReturn("+18005556543");
 | 
				
			||||||
        when(account.getUuid()).thenReturn(UUID.randomUUID());
 | 
					    when(account.getUuid()).thenReturn(UUID.randomUUID());
 | 
				
			||||||
        when(account.isEnabled()).thenReturn(accountEnabled);
 | 
					    when(account.isEnabled()).thenReturn(accountEnabled);
 | 
				
			||||||
        when(account.isDiscoverableByPhoneNumber()).thenReturn(accountDiscoverableByPhoneNumber);
 | 
					    when(account.isDiscoverableByPhoneNumber()).thenReturn(accountDiscoverableByPhoneNumber);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        directoryQueue.refreshAccount(account);
 | 
					    directoryQueue.refreshAccount(account);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        final ArgumentCaptor<SendMessageBatchRequest> requestCaptor = ArgumentCaptor.forClass(SendMessageBatchRequest.class);
 | 
					    final ArgumentCaptor<SendMessageBatchRequest> requestCaptor = ArgumentCaptor.forClass(SendMessageBatchRequest.class);
 | 
				
			||||||
        verify(sqs).sendMessageBatch(requestCaptor.capture());
 | 
					    verify(sqs).sendMessageBatch(requestCaptor.capture());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertEquals(1, requestCaptor.getValue().entries().size());
 | 
					    assertEquals(1, requestCaptor.getValue().entries().size());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        final Map<String, MessageAttributeValue> messageAttributes = requestCaptor.getValue().entries().get(0).messageAttributes();
 | 
					    final Map<String, MessageAttributeValue> messageAttributes = requestCaptor.getValue().entries().get(0).messageAttributes();
 | 
				
			||||||
        assertEquals(MessageAttributeValue.builder().dataType("String").stringValue(expectedAction).build(), messageAttributes.get("action"));
 | 
					    assertEquals(MessageAttributeValue.builder().dataType("String").stringValue(expectedAction).build(), messageAttributes.get("action"));
 | 
				
			||||||
    }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					  @SuppressWarnings("unused")
 | 
				
			||||||
    public void testRefreshBatch() {
 | 
					  private static Stream<Arguments> argumentsForTestRefreshRegisteredUser() {
 | 
				
			||||||
        final SqsClient sqs = mock(SqsClient.class);
 | 
					    return Stream.of(
 | 
				
			||||||
        final DirectoryQueue directoryQueue = new DirectoryQueue(List.of("sqs://test"), sqs);
 | 
					        Arguments.of(true, true, "add"),
 | 
				
			||||||
 | 
					        Arguments.of(true, false, "delete"),
 | 
				
			||||||
        final Account discoverableAccount = mock(Account.class);
 | 
					        Arguments.of(false, true, "delete"),
 | 
				
			||||||
        when(discoverableAccount.getNumber()).thenReturn("+18005556543");
 | 
					        Arguments.of(false, false, "delete"));
 | 
				
			||||||
        when(discoverableAccount.getUuid()).thenReturn(UUID.randomUUID());
 | 
					  }
 | 
				
			||||||
        when(discoverableAccount.isEnabled()).thenReturn(true);
 | 
					
 | 
				
			||||||
        when(discoverableAccount.isDiscoverableByPhoneNumber()).thenReturn(true);
 | 
					  @Test
 | 
				
			||||||
 | 
					  void testRefreshBatch() {
 | 
				
			||||||
        final Account undiscoverableAccount = mock(Account.class);
 | 
					    final SqsClient sqs = mock(SqsClient.class);
 | 
				
			||||||
        when(undiscoverableAccount.getNumber()).thenReturn("+18005550987");
 | 
					    final DirectoryQueue directoryQueue = new DirectoryQueue(List.of("sqs://test"), sqs);
 | 
				
			||||||
        when(undiscoverableAccount.getUuid()).thenReturn(UUID.randomUUID());
 | 
					
 | 
				
			||||||
        when(undiscoverableAccount.isEnabled()).thenReturn(true);
 | 
					    final Account discoverableAccount = mock(Account.class);
 | 
				
			||||||
        when(undiscoverableAccount.isDiscoverableByPhoneNumber()).thenReturn(false);
 | 
					    when(discoverableAccount.getNumber()).thenReturn("+18005556543");
 | 
				
			||||||
 | 
					    when(discoverableAccount.getUuid()).thenReturn(UUID.randomUUID());
 | 
				
			||||||
        directoryQueue.refreshAccounts(List.of(discoverableAccount, undiscoverableAccount));
 | 
					    when(discoverableAccount.isEnabled()).thenReturn(true);
 | 
				
			||||||
 | 
					    when(discoverableAccount.isDiscoverableByPhoneNumber()).thenReturn(true);
 | 
				
			||||||
        final ArgumentCaptor<SendMessageBatchRequest> requestCaptor = ArgumentCaptor.forClass(SendMessageBatchRequest.class);
 | 
					
 | 
				
			||||||
        verify(sqs).sendMessageBatch(requestCaptor.capture());
 | 
					    final Account undiscoverableAccount = mock(Account.class);
 | 
				
			||||||
 | 
					    when(undiscoverableAccount.getNumber()).thenReturn("+18005550987");
 | 
				
			||||||
        assertEquals(2, requestCaptor.getValue().entries().size());
 | 
					    when(undiscoverableAccount.getUuid()).thenReturn(UUID.randomUUID());
 | 
				
			||||||
 | 
					    when(undiscoverableAccount.isEnabled()).thenReturn(true);
 | 
				
			||||||
        final Map<String, MessageAttributeValue> discoverableAccountAttributes = requestCaptor.getValue().entries().get(0).messageAttributes();
 | 
					    when(undiscoverableAccount.isDiscoverableByPhoneNumber()).thenReturn(false);
 | 
				
			||||||
        assertEquals(MessageAttributeValue.builder().dataType("String").stringValue(discoverableAccount.getNumber()).build(), discoverableAccountAttributes.get("id"));
 | 
					
 | 
				
			||||||
        assertEquals(MessageAttributeValue.builder().dataType("String").stringValue(discoverableAccount.getUuid().toString()).build(), discoverableAccountAttributes.get("uuid"));
 | 
					    directoryQueue.refreshAccounts(List.of(discoverableAccount, undiscoverableAccount));
 | 
				
			||||||
        assertEquals(MessageAttributeValue.builder().dataType("String").stringValue("add").build(), discoverableAccountAttributes.get("action"));
 | 
					
 | 
				
			||||||
 | 
					    final ArgumentCaptor<SendMessageBatchRequest> requestCaptor = ArgumentCaptor.forClass(SendMessageBatchRequest.class);
 | 
				
			||||||
        final Map<String, MessageAttributeValue> undiscoverableAccountAttributes = requestCaptor.getValue().entries().get(1).messageAttributes();
 | 
					    verify(sqs).sendMessageBatch(requestCaptor.capture());
 | 
				
			||||||
        assertEquals(MessageAttributeValue.builder().dataType("String").stringValue(undiscoverableAccount.getNumber()).build(), undiscoverableAccountAttributes.get("id"));
 | 
					
 | 
				
			||||||
        assertEquals(MessageAttributeValue.builder().dataType("String").stringValue(undiscoverableAccount.getUuid().toString()).build(), undiscoverableAccountAttributes.get("uuid"));
 | 
					    assertEquals(2, requestCaptor.getValue().entries().size());
 | 
				
			||||||
        assertEquals(MessageAttributeValue.builder().dataType("String").stringValue("delete").build(), undiscoverableAccountAttributes.get("action"));
 | 
					
 | 
				
			||||||
    }
 | 
					    final Map<String, MessageAttributeValue> discoverableAccountAttributes = requestCaptor.getValue().entries().get(0).messageAttributes();
 | 
				
			||||||
 | 
					    assertEquals(MessageAttributeValue.builder().dataType("String").stringValue(discoverableAccount.getNumber()).build(), discoverableAccountAttributes.get("id"));
 | 
				
			||||||
    @Test
 | 
					    assertEquals(MessageAttributeValue.builder().dataType("String").stringValue(discoverableAccount.getUuid().toString()).build(), discoverableAccountAttributes.get("uuid"));
 | 
				
			||||||
    public void testSendMessageMultipleQueues() {
 | 
					    assertEquals(MessageAttributeValue.builder().dataType("String").stringValue("add").build(), discoverableAccountAttributes.get("action"));
 | 
				
			||||||
        final SqsClient      sqs            = mock(SqsClient.class);
 | 
					
 | 
				
			||||||
        final DirectoryQueue directoryQueue = new DirectoryQueue(List.of("sqs://first", "sqs://second"), sqs);
 | 
					    final Map<String, MessageAttributeValue> undiscoverableAccountAttributes = requestCaptor.getValue().entries().get(1).messageAttributes();
 | 
				
			||||||
 | 
					    assertEquals(MessageAttributeValue.builder().dataType("String").stringValue(undiscoverableAccount.getNumber()).build(), undiscoverableAccountAttributes.get("id"));
 | 
				
			||||||
        final Account account = mock(Account.class);
 | 
					    assertEquals(MessageAttributeValue.builder().dataType("String").stringValue(undiscoverableAccount.getUuid().toString()).build(), undiscoverableAccountAttributes.get("uuid"));
 | 
				
			||||||
        when(account.getNumber()).thenReturn("+18005556543");
 | 
					    assertEquals(MessageAttributeValue.builder().dataType("String").stringValue("delete").build(), undiscoverableAccountAttributes.get("action"));
 | 
				
			||||||
        when(account.getUuid()).thenReturn(UUID.randomUUID());
 | 
					  }
 | 
				
			||||||
        when(account.isEnabled()).thenReturn(true);
 | 
					
 | 
				
			||||||
        when(account.isDiscoverableByPhoneNumber()).thenReturn(true);
 | 
					  @Test
 | 
				
			||||||
 | 
					  void testSendMessageMultipleQueues() {
 | 
				
			||||||
        directoryQueue.refreshAccount(account);
 | 
					    final SqsClient sqs = mock(SqsClient.class);
 | 
				
			||||||
 | 
					    final DirectoryQueue directoryQueue = new DirectoryQueue(List.of("sqs://first", "sqs://second"), sqs);
 | 
				
			||||||
        final ArgumentCaptor<SendMessageBatchRequest> requestCaptor = ArgumentCaptor.forClass(SendMessageBatchRequest.class);
 | 
					
 | 
				
			||||||
        verify(sqs, times(2)).sendMessageBatch(requestCaptor.capture());
 | 
					    final Account account = mock(Account.class);
 | 
				
			||||||
 | 
					    when(account.getNumber()).thenReturn("+18005556543");
 | 
				
			||||||
        for (final SendMessageBatchRequest sendMessageBatchRequest : requestCaptor.getAllValues()) {
 | 
					    when(account.getUuid()).thenReturn(UUID.randomUUID());
 | 
				
			||||||
            assertEquals(1, requestCaptor.getValue().entries().size());
 | 
					    when(account.isEnabled()).thenReturn(true);
 | 
				
			||||||
 | 
					    when(account.isDiscoverableByPhoneNumber()).thenReturn(true);
 | 
				
			||||||
            final Map<String, MessageAttributeValue> messageAttributes = sendMessageBatchRequest.entries().get(0).messageAttributes();
 | 
					
 | 
				
			||||||
            assertEquals(MessageAttributeValue.builder().dataType("String").stringValue("add").build(), messageAttributes.get("action"));
 | 
					    directoryQueue.refreshAccount(account);
 | 
				
			||||||
        }
 | 
					
 | 
				
			||||||
    }
 | 
					    final ArgumentCaptor<SendMessageBatchRequest> requestCaptor = ArgumentCaptor.forClass(SendMessageBatchRequest.class);
 | 
				
			||||||
 | 
					    verify(sqs, times(2)).sendMessageBatch(requestCaptor.capture());
 | 
				
			||||||
    @SuppressWarnings("unused")
 | 
					
 | 
				
			||||||
    private Object argumentsForTestRefreshRegisteredUser() {
 | 
					    for (final SendMessageBatchRequest sendMessageBatchRequest : requestCaptor.getAllValues()) {
 | 
				
			||||||
        return new Object[] {
 | 
					      assertEquals(1, requestCaptor.getValue().entries().size());
 | 
				
			||||||
                new Object[] { true,  true,  "add"    },
 | 
					
 | 
				
			||||||
                new Object[] { true,  false, "delete" },
 | 
					      final Map<String, MessageAttributeValue> messageAttributes = sendMessageBatchRequest.entries().get(0).messageAttributes();
 | 
				
			||||||
                new Object[] { false, true,  "delete" },
 | 
					      assertEquals(MessageAttributeValue.builder().dataType("String").stringValue("add").build(), messageAttributes.get("action"));
 | 
				
			||||||
                new Object[] { false, false, "delete" }
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue