summaryrefslogtreecommitdiffhomepage
path: root/android/app/src/test
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-05-30 13:05:30 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-06-07 17:51:06 +0200
commit6b1c918efc3cb0ef02d6e4e058d1dfe25dce7b33 (patch)
tree41feb4f2540d9e589cee8bbf1275269f6cb9ab44 /android/app/src/test
parent07f1ecbeb787ce59812b59c0b7974cfc40e73071 (diff)
downloadmullvadvpn-6b1c918efc3cb0ef02d6e4e058d1dfe25dce7b33.tar.xz
mullvadvpn-6b1c918efc3cb0ef02d6e4e058d1dfe25dce7b33.zip
Add tests for quantum resistant tunnel
Diffstat (limited to 'android/app/src/test')
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt95
1 files changed, 95 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
new file mode 100644
index 0000000000..4478964d02
--- /dev/null
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt
@@ -0,0 +1,95 @@
+package net.mullvad.mullvadvpn.viewmodel
+
+import android.content.res.Resources
+import androidx.lifecycle.viewModelScope
+import app.cash.turbine.test
+import io.mockk.every
+import io.mockk.mockk
+import io.mockk.unmockkAll
+import io.mockk.verify
+import kotlin.test.assertEquals
+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.model.QuantumResistantState
+import net.mullvad.mullvadvpn.model.Settings
+import net.mullvad.mullvadvpn.model.TunnelOptions
+import net.mullvad.mullvadvpn.model.WireguardTunnelOptions
+import net.mullvad.mullvadvpn.repository.SettingsRepository
+import org.apache.commons.validator.routines.InetAddressValidator
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+
+class VpnSettingsViewModelTest {
+ @get:Rule val testCoroutineRule = TestCoroutineRule()
+
+ private val mockSettingsRepository: SettingsRepository = mockk()
+ private val mockInetAddressValidator: InetAddressValidator = mockk()
+ private val mockResources: Resources = mockk()
+
+ private val mockSettingsUpdate = MutableStateFlow<Settings?>(null)
+
+ private lateinit var viewModel: VpnSettingsViewModel
+
+ @Before
+ fun setUp() {
+ every { mockSettingsRepository.settingsUpdates } returns mockSettingsUpdate
+
+ viewModel =
+ VpnSettingsViewModel(
+ repository = mockSettingsRepository,
+ inetAddressValidator = mockInetAddressValidator,
+ resources = mockResources,
+ dispatcher = UnconfinedTestDispatcher()
+ )
+ }
+
+ @After
+ fun tearDown() {
+ viewModel.viewModelScope.coroutineContext.cancel()
+ unmockkAll()
+ }
+
+ @Test
+ fun test_select_quantum_resistant_state_select() = runTest {
+ val quantumResistantState = QuantumResistantState.On
+ every {
+ mockSettingsRepository.setWireguardQuantumResistant(quantumResistantState)
+ } returns Unit
+ viewModel.onSelectQuantumResistanceSetting(quantumResistantState)
+ verify(exactly = 1) {
+ mockSettingsRepository.setWireguardQuantumResistant(quantumResistantState)
+ }
+ }
+
+ @Test
+ fun test_update_quantum_resistant_default_state() = runTest {
+ val expectedResistantState = QuantumResistantState.Off
+ viewModel.uiState.test {
+ assertEquals(expectedResistantState, awaitItem().quantumResistant)
+ }
+ }
+
+ @Test
+ fun test_update_quantum_resistant_update_state() = runTest {
+ val defaultResistantState = QuantumResistantState.Off
+ val expectedResistantState = QuantumResistantState.On
+ val mockSettings: Settings = mockk(relaxed = true)
+ val mockTunnelOptions: TunnelOptions = mockk(relaxed = true)
+ val mockWireguardTunnelOptions: WireguardTunnelOptions = mockk(relaxed = true)
+
+ every { mockSettings.tunnelOptions } returns mockTunnelOptions
+ every { mockTunnelOptions.wireguard } returns mockWireguardTunnelOptions
+ every { mockWireguardTunnelOptions.quantumResistant } returns expectedResistantState
+
+ viewModel.uiState.test {
+ assertEquals(defaultResistantState, awaitItem().quantumResistant)
+ mockSettingsUpdate.value = mockSettings
+ assertEquals(expectedResistantState, awaitItem().quantumResistant)
+ }
+ }
+}