blob: dbf7250efd27ba0e3c7630a1d7bd79d523a23e72 [file] [log] [blame]
package org.robolectric.shadows;
import static com.google.common.truth.Truth.assertThat;
import static org.robolectric.Shadows.shadowOf;
import android.content.Intent;
import android.net.Ikev2VpnProfile;
import android.net.VpnManager;
import android.net.VpnProfileState;
import android.os.Build.VERSION_CODES;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@RunWith(AndroidJUnit4.class)
@Config(minSdk = VERSION_CODES.R)
public class ShadowVpnManagerTest {
private VpnManager vpnManager;
private ShadowVpnManager shadowVpnManager;
@Before
public void setUp() throws Exception {
vpnManager = ApplicationProvider.getApplicationContext().getSystemService(VpnManager.class);
shadowVpnManager = shadowOf(vpnManager);
}
@Test
public void provisionVpnProfile() {
Intent intent = new Intent("foo");
shadowVpnManager.setProvisionVpnProfileResult(intent);
assertThat(
vpnManager.provisionVpnProfile(
new Ikev2VpnProfile.Builder("server", "local.identity")
.setAuthPsk(new byte[0])
.build()))
.isSameInstanceAs(intent);
if (RuntimeEnvironment.getApiLevel() >= VERSION_CODES.TIRAMISU) {
VpnProfileState state = vpnManager.getProvisionedVpnProfileState();
assertThat(state.getState()).isEqualTo(VpnProfileState.STATE_DISCONNECTED);
assertThat(state.getSessionId()).isNull();
}
}
@Test
public void deleteVpnProfile() {
vpnManager.provisionVpnProfile(
new Ikev2VpnProfile.Builder("server", "local.identity").setAuthPsk(new byte[0]).build());
vpnManager.deleteProvisionedVpnProfile();
}
@Test
@Config(minSdk = VERSION_CODES.TIRAMISU)
public void deleteVpnProfile_tiramisu() {
vpnManager.provisionVpnProfile(
new Ikev2VpnProfile.Builder("server", "local.identity").setAuthPsk(new byte[0]).build());
assertThat(vpnManager.getProvisionedVpnProfileState()).isNotNull();
vpnManager.deleteProvisionedVpnProfile();
assertThat(vpnManager.getProvisionedVpnProfileState()).isNull();
}
@Test
public void startAndStopVpnProfile() {
vpnManager.provisionVpnProfile(
new Ikev2VpnProfile.Builder("server", "local.identity").setAuthPsk(new byte[0]).build());
vpnManager.startProvisionedVpnProfile();
vpnManager.stopProvisionedVpnProfile();
}
@Test
@Config(minSdk = VERSION_CODES.TIRAMISU)
public void startAndStopVpnProfile_tiramisu() {
vpnManager.provisionVpnProfile(
new Ikev2VpnProfile.Builder("server", "local.identity").setAuthPsk(new byte[0]).build());
String sessionKey = vpnManager.startProvisionedVpnProfileSession();
VpnProfileState state = vpnManager.getProvisionedVpnProfileState();
assertThat(state.getState()).isEqualTo(VpnProfileState.STATE_CONNECTED);
assertThat(state.getSessionId()).isEqualTo(sessionKey);
assertThat(state.isAlwaysOn()).isFalse();
assertThat(state.isLockdownEnabled()).isFalse();
vpnManager.stopProvisionedVpnProfile();
state = vpnManager.getProvisionedVpnProfileState();
assertThat(state.getState()).isEqualTo(VpnProfileState.STATE_DISCONNECTED);
assertThat(state.getSessionId()).isNull();
assertThat(state.isAlwaysOn()).isFalse();
assertThat(state.isLockdownEnabled()).isFalse();
}
}