blob: 3270c8dc0317f9e86ab6e9459d08fa1b4fbef153 [file] [log] [blame]
package com.android.clockwork.healthservices;
import static com.android.clockwork.healthservices.HandlerBindingAgent.WHS_SERVICE_COMPONENT_NAME;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
import android.content.Context;
import android.content.Intent;
import android.os.Message;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.LooperMode;
@RunWith(RobolectricTestRunner.class)
@LooperMode(LooperMode.Mode.LEGACY)
public final class HandlerBindingAgentTest {
@Mock Context mockContext;
@Mock ConnectionTracker mockConnectionTracker;
private final ArgumentCaptor<Intent> mIntentCaptor = ArgumentCaptor.forClass(Intent.class);
private HandlerBindingAgent mBindingAgent;
@Before
public void setUp() {
initMocks(this);
mBindingAgent = new HandlerBindingAgent(mockContext);
mBindingAgent.setConnectionTracker(mockConnectionTracker);
}
@Test
public void handleMessage_bindMessage_binds() {
mockBindingSuccess(/* success= */ true);
Message message = new Message();
message.what = HandlerBindingAgent.MSG_ATTEMPT_BIND;
mBindingAgent.handleMessage(message);
verify(mockContext)
.bindService(
mIntentCaptor.capture(),
eq(mockConnectionTracker),
eq(Context.BIND_AUTO_CREATE | Context.BIND_ABOVE_CLIENT));
assertThat(mIntentCaptor.getValue().getComponent()).isEqualTo(WHS_SERVICE_COMPONENT_NAME);
}
@Test
public void handleMessage_notBindMessage_noBind() {
mockBindingSuccess(/* success= */ false);
Message message = new Message();
message.what = 534; // Random message that is not the bind message.
mBindingAgent.handleMessage(message);
verify(mockContext, never()).bindService(any(), any(), anyInt());
}
@Test
public void bindFailed_retriesRightNumberOfTimes() {
Message message = new Message();
message.what = HandlerBindingAgent.MSG_ATTEMPT_BIND;
mBindingAgent.handleMessage(message);
verify(mockContext, times(HandlerBindingAgent.FRESH_NUM_RETRIES))
.bindService(
mIntentCaptor.capture(),
eq(mockConnectionTracker),
eq(Context.BIND_AUTO_CREATE | Context.BIND_ABOVE_CLIENT));
for (Intent intent : mIntentCaptor.getAllValues()) {
assertThat(intent.getComponent()).isEqualTo(WHS_SERVICE_COMPONENT_NAME);
}
}
private void mockBindingSuccess(boolean success) {
when(mockContext.bindService(
any(Intent.class),
eq(mockConnectionTracker),
eq(Context.BIND_AUTO_CREATE | Context.BIND_ABOVE_CLIENT))).thenReturn(success);
}
}