/* * Copyright 2010-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://aws.amazon.com/apache2.0 * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES * OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and * limitations under the License. */ package com.amazonaws.mobileconnectors.amazonmobileanalytics.internal.delivery.policy; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.when; import com.amazonaws.mobileconnectors.amazonmobileanalytics.internal.core.AnalyticsContext; import com.amazonaws.mobileconnectors.amazonmobileanalytics.internal.core.configuration.Configuration; import com.amazonaws.mobileconnectors.amazonmobileanalytics.internal.core.system.Connectivity; import com.amazonaws.mobileconnectors.amazonmobileanalytics.utils.AnalyticsContextBuilder; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) @Config(manifest = Config.NONE) public class ConnectivityPolicyTest { @Mock Connectivity mockConnectivity; @Mock Configuration mockConfig; private AnalyticsContext mockContext; @Before public void setup() { MockitoAnnotations.initMocks(this); mockContext = new AnalyticsContextBuilder().withConnectivity(mockConnectivity) .withConfiguration(mockConfig) .build(); when(mockConfig.optBoolean("allowWANEventDelivery", true)).thenReturn(true); } @Test public void isAllowed_hasNoConnectivity_policyIsFalse() { setupConnectivity(false, false, false); ConnectivityPolicy target = new ConnectivityPolicy(mockContext, true); assertThat(target.isAllowed(), is(false)); target = new ConnectivityPolicy(mockContext, false); assertThat(target.isAllowed(), is(false)); } @Test public void isAllowed_hasWifiNoWanAndWanAllowed_policyIsTrue() { setupConnectivity(true, true, false); ConnectivityPolicy target = new ConnectivityPolicy(mockContext, true); assertThat(target.isAllowed(), is(true)); } @Test public void isAllowed_hasWifiNoWanAndWanNotAllowed_policyIsTrue() { setupConnectivity(true, true, false); ConnectivityPolicy target = new ConnectivityPolicy(mockContext, false); assertThat(target.isAllowed(), is(true)); } @Test public void isAllowed_hasOnlyWanAndWanNotAllowed_policyIsFalse() { setupConnectivity(true, false, true); ConnectivityPolicy target = new ConnectivityPolicy(mockContext, false); assertThat(target.isAllowed(), is(false)); } @Test public void isAllowed_hasOnlyWan_WanAllowedByUserButNotConfig_policyIsFalse() { setupConnectivity(true, false, true); when(mockConfig.optBoolean("allowWANEventDelivery", true)).thenReturn(false); ConnectivityPolicy target = new ConnectivityPolicy(mockContext, true); assertThat(target.isAllowed(), is(false)); } @Test public void isAllowed_hasOnlyWan_WanAllowedByUserAndConfig_policyIsTrue() { setupConnectivity(true, false, true); ConnectivityPolicy target = new ConnectivityPolicy(mockContext, true); assertThat(target.isAllowed(), is(true)); } @Test public void isAllowed_hasAllConnectivity_policyIsTrue() { setupConnectivity(true, true, true, true); ConnectivityPolicy target = new ConnectivityPolicy(mockContext, true); assertThat(target.isAllowed(), is(true)); target = new ConnectivityPolicy(mockContext, false); assertThat(target.isAllowed(), is(true)); } @Test public void isAllowed_hasOnlyWired_policyIsTrue() { setupConnectivity(true, false, false, true); ConnectivityPolicy target = new ConnectivityPolicy(mockContext, true); assertThat(target.isAllowed(), is(true)); target = new ConnectivityPolicy(mockContext, false); assertThat(target.isAllowed(), is(true)); } @Test public void isAllowed_hasWifiAndWired_policyIsTrue() { setupConnectivity(true, true, false, true); ConnectivityPolicy target = new ConnectivityPolicy(mockContext, true); assertThat(target.isAllowed(), is(true)); target = new ConnectivityPolicy(mockContext, false); assertThat(target.isAllowed(), is(true)); } @Test public void isAllowed_hasWANAndWired_policyIsTrue() { setupConnectivity(true, false, true, true); ConnectivityPolicy target = new ConnectivityPolicy(mockContext, true); assertThat(target.isAllowed(), is(true)); target = new ConnectivityPolicy(mockContext, false); assertThat(target.isAllowed(), is(true)); } @Test public void isAllowed_hasWifi_policyIsTrue() { setupConnectivity(true, true, false); ConnectivityPolicy target = new ConnectivityPolicy(mockContext, true); assertThat(target.isAllowed(), is(true)); target = new ConnectivityPolicy(mockContext, false); assertThat(target.isAllowed(), is(true)); } @Test public void isAllowed_hasWAN_policyIsTrue() { setupConnectivity(true, false, true); ConnectivityPolicy target = new ConnectivityPolicy(mockContext, true); assertThat(target.isAllowed(), is(true)); target = new ConnectivityPolicy(mockContext, false); assertThat(target.isAllowed(), is(false)); } private void setupConnectivity(boolean isConnected, boolean hasWifi, boolean hasWan) { setupConnectivity(isConnected, hasWifi, hasWan, false); } private void setupConnectivity(boolean isConnected, boolean hasWifi, boolean hasWan, boolean hasWired) { when(mockConnectivity.isConnected()).thenReturn(isConnected); when(mockConnectivity.hasWifi()).thenReturn(hasWifi); when(mockConnectivity.hasWAN()).thenReturn(hasWan); when(mockConnectivity.hasWired()).thenReturn(hasWired); } }