summaryrefslogtreecommitdiffhomepage
path: root/android/app/src/test
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-06-21 14:15:56 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-07-07 11:12:15 +0200
commit9f313d321dd0361545e71688bde320987eed8d48 (patch)
tree944fd328f24a5072da6a4512508c90991bdef24b /android/app/src/test
parentafb24305d9da874b0f20802484411a7879a3d7ca (diff)
downloadmullvadvpn-9f313d321dd0361545e71688bde320987eed8d48.tar.xz
mullvadvpn-9f313d321dd0361545e71688bde320987eed8d48.zip
Add option to change wireguard port to vpn settings
Diffstat (limited to 'android/app/src/test')
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt100
1 files changed, 100 insertions, 0 deletions
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt
index a0a2e8ae91..ab784263fa 100644
--- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt
@@ -5,19 +5,33 @@ import androidx.lifecycle.viewModelScope
import app.cash.turbine.test
import io.mockk.every
import io.mockk.mockk
+import io.mockk.slot
import io.mockk.unmockkAll
import io.mockk.verify
import kotlin.test.assertEquals
+import kotlin.test.assertIs
import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
import net.mullvad.mullvadvpn.TestCoroutineRule
+import net.mullvad.mullvadvpn.assertLists
+import net.mullvad.mullvadvpn.compose.state.VpnSettingsUiState
+import net.mullvad.mullvadvpn.model.Constraint
+import net.mullvad.mullvadvpn.model.Port
+import net.mullvad.mullvadvpn.model.PortRange
import net.mullvad.mullvadvpn.model.QuantumResistantState
+import net.mullvad.mullvadvpn.model.RelayConstraints
+import net.mullvad.mullvadvpn.model.RelaySettings
import net.mullvad.mullvadvpn.model.Settings
import net.mullvad.mullvadvpn.model.TunnelOptions
+import net.mullvad.mullvadvpn.model.WireguardConstraints
import net.mullvad.mullvadvpn.model.WireguardTunnelOptions
import net.mullvad.mullvadvpn.repository.SettingsRepository
+import net.mullvad.mullvadvpn.ui.serviceconnection.RelayListListener
+import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionContainer
+import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionManager
+import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionState
import org.apache.commons.validator.routines.InetAddressValidator
import org.junit.After
import org.junit.Before
@@ -30,20 +44,34 @@ class VpnSettingsViewModelTest {
private val mockSettingsRepository: SettingsRepository = mockk()
private val mockInetAddressValidator: InetAddressValidator = mockk()
private val mockResources: Resources = mockk()
+ private val mockServiceConnectionManager: ServiceConnectionManager = mockk()
+
+ private val mockServiceConnectionContainer: ServiceConnectionContainer = mockk()
+ private val mockRelayListListener: RelayListListener = mockk()
+ private val portRangeSlot = slot<(List<PortRange>) -> Unit>()
private val mockSettingsUpdate = MutableStateFlow<Settings?>(null)
+ private val mockConnectionState =
+ MutableStateFlow<ServiceConnectionState>(ServiceConnectionState.Disconnected)
private lateinit var viewModel: VpnSettingsViewModel
@Before
fun setUp() {
every { mockSettingsRepository.settingsUpdates } returns mockSettingsUpdate
+ every { mockServiceConnectionManager.connectionState } returns mockConnectionState
+
+ every { mockServiceConnectionContainer.relayListListener } returns mockRelayListListener
+
+ every { mockRelayListListener.onPortRangesChange = capture(portRangeSlot) } answers {}
+ every { mockRelayListListener.onPortRangesChange = null } answers {}
viewModel =
VpnSettingsViewModel(
repository = mockSettingsRepository,
inetAddressValidator = mockInetAddressValidator,
resources = mockResources,
+ serviceConnectionManager = mockServiceConnectionManager,
dispatcher = UnconfinedTestDispatcher()
)
}
@@ -67,7 +95,10 @@ class VpnSettingsViewModelTest {
@Test
fun test_update_quantum_resistant_default_state() = runTest {
+ // Arrange
val expectedResistantState = QuantumResistantState.Off
+
+ // Act, Assert
viewModel.uiState.test {
assertEquals(expectedResistantState, awaitItem().quantumResistant)
}
@@ -84,11 +115,80 @@ class VpnSettingsViewModelTest {
every { mockSettings.tunnelOptions } returns mockTunnelOptions
every { mockTunnelOptions.wireguard } returns mockWireguardTunnelOptions
every { mockWireguardTunnelOptions.quantumResistant } returns expectedResistantState
+ every { mockSettings.relaySettings } returns mockk<RelaySettings.Normal>(relaxed = true)
viewModel.uiState.test {
assertEquals(defaultResistantState, awaitItem().quantumResistant)
mockSettingsUpdate.value = mockSettings
+ mockConnectionState.value =
+ ServiceConnectionState.ConnectedReady(mockServiceConnectionContainer)
+ portRangeSlot.captured.invoke(emptyList())
assertEquals(expectedResistantState, awaitItem().quantumResistant)
}
}
+
+ @Test
+ fun test_update_wireguard_port_state() = runTest {
+ // Arrange
+ val expectedPort: Constraint<Port> = Constraint.Only(Port(99))
+ val mockSettings: Settings = mockk(relaxed = true)
+ val mockRelaySettings: RelaySettings.Normal = mockk()
+ val mockRelayConstraints: RelayConstraints = mockk()
+ val mockWireguardConstraints: WireguardConstraints = mockk()
+
+ every { mockSettings.relaySettings } returns mockRelaySettings
+ every { mockRelaySettings.relayConstraints } returns mockRelayConstraints
+ every { mockRelayConstraints.wireguardConstraints } returns mockWireguardConstraints
+ every { mockWireguardConstraints.port } returns expectedPort
+
+ // Act, Assert
+ viewModel.uiState.test {
+ assertIs<Constraint.Any<Port>>(awaitItem().selectedWireguardPort)
+ mockSettingsUpdate.value = mockSettings
+ mockConnectionState.value =
+ ServiceConnectionState.ConnectedReady(mockServiceConnectionContainer)
+ portRangeSlot.captured.invoke(emptyList())
+ assertEquals(expectedPort, awaitItem().selectedWireguardPort)
+ }
+ }
+
+ @Test
+ fun test_select_wireguard_port() = runTest {
+ // Arrange
+ val wireguardPort: Constraint<Port> = Constraint.Only(Port(99))
+ val wireguardConstraints = WireguardConstraints(port = wireguardPort)
+ every { mockRelayListListener.selectedWireguardConstraints = any() } returns Unit
+
+ // Act
+ mockConnectionState.value =
+ ServiceConnectionState.ConnectedReady(mockServiceConnectionContainer)
+ viewModel.onWireguardPortSelected(wireguardPort)
+
+ // Assert
+ verify(exactly = 1) {
+ mockRelayListListener.selectedWireguardConstraints = wireguardConstraints
+ }
+ }
+
+ @Test
+ fun test_update_port_range_state() = runTest {
+ // Arrange
+ val expectedPortRange = listOf<PortRange>(mockk(), mockk())
+ val mockSettings: Settings = mockk(relaxed = true)
+
+ every { mockSettings.relaySettings } returns mockk<RelaySettings.Normal>(relaxed = true)
+
+ // Act, Assert
+ viewModel.uiState.test {
+ assertIs<VpnSettingsUiState.DefaultUiState>(awaitItem())
+ mockSettingsUpdate.value = mockSettings
+ viewModel.onWireguardPortInfoClicked()
+ mockConnectionState.value =
+ ServiceConnectionState.ConnectedReady(mockServiceConnectionContainer)
+ portRangeSlot.captured.invoke(expectedPortRange)
+ val state = awaitItem()
+ assertIs<VpnSettingsUiState.WireguardPortInfoDialogUiState>(state)
+ assertLists(expectedPortRange, state.availablePortRanges)
+ }
+ }
}