blob: 46a57d33ed918c44a29704061144f696493e7772 [file] [log] [blame]
/*
* Copyright (C) 2009 The Android Open Source Project
*
* 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://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License 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 android.net.vpn;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.vpn.L2tpProfile;
import android.net.vpn.L2tpIpsecProfile;
import android.net.vpn.L2tpIpsecPskProfile;
import android.net.vpn.PptpProfile;
import android.net.vpn.VpnManager;
import android.net.vpn.VpnProfile;
import android.net.vpn.VpnState;
import android.net.vpn.VpnType;
import android.os.ConditionVariable;
import android.os.Parcel;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import android.text.TextUtils;
/**
* Unit test class to test VPN api
* Use the below command to run the vpn unit test only
* runtest vpntest or
* adb shell am instrument -e class 'com.android.unit_tests.VpnTest'
* -w com.android.unit_tests/android.test.InstrumentationTestRunner
*/
public class VpnTest extends AndroidTestCase {
private static final String NAME = "a name";
private static final String SERVER_NAME = "a server name";
private static final String ID = "some id";
private static final String SUFFICES = "some suffices";
private static final String ROUTES = "some routes";
private static final String SAVED_NAME = "some name";
@Override
public void setUp() {
}
@Override
public void tearDown() {
}
@SmallTest
public void testVpnType() {
testVpnType(VpnType.L2TP);
testVpnType(VpnType.L2TP_IPSEC);
testVpnType(VpnType.L2TP_IPSEC_PSK);
testVpnType(VpnType.PPTP);
}
@SmallTest
public void testVpnProfile() {
VpnState state = VpnState.CONNECTING;
testVpnProfile(createTestProfile(state), state);
}
@SmallTest
public void testGetType() {
assertEquals(VpnType.L2TP, new L2tpProfile().getType());
assertEquals(VpnType.L2TP_IPSEC, new L2tpIpsecProfile().getType());
assertEquals(VpnType.L2TP_IPSEC_PSK,
new L2tpIpsecPskProfile().getType());
assertEquals(VpnType.PPTP, new PptpProfile().getType());
}
@SmallTest
public void testVpnTypes() {
assertTrue(VpnManager.getSupportedVpnTypes().length > 0);
}
@SmallTest
public void testGetTypeFromManager() {
VpnManager m = new VpnManager(getContext());
VpnType[] types = VpnManager.getSupportedVpnTypes();
for (VpnType t : types) {
assertEquals(t, m.createVpnProfile(t).getType());
}
}
@SmallTest
public void testParcelable() {
VpnProfile p = createTestProfile(VpnState.CONNECTED);
Parcel parcel = Parcel.obtain();
p.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
// VpnState is transient and not saved in the parcel
testVpnProfile(VpnProfile.CREATOR.createFromParcel(parcel), null);
}
@SmallTest
public void testReceiver() {
final String profileName = "whatever";
final VpnState state = VpnState.DISCONNECTING;
final ConditionVariable cv = new ConditionVariable();
cv.close();
BroadcastReceiver r = new BroadcastReceiver() {
public void onReceive(Context c, Intent i) {
assertEquals(profileName,
i.getStringExtra(VpnManager.BROADCAST_PROFILE_NAME));
assertEquals(state, i.getSerializableExtra(
VpnManager.BROADCAST_CONNECTION_STATE));
cv.open();
}
};
VpnManager m = new VpnManager(getContext());
m.registerConnectivityReceiver(r);
m.broadcastConnectivity(profileName, state);
// fail it if onReceive() doesn't get executed in 5 sec
assertTrue(cv.block(5000));
}
private void testVpnType(VpnType type) {
assertFalse(TextUtils.isEmpty(type.getDisplayName()));
assertNotNull(type.getProfileClass());
}
private VpnProfile createTestProfile(VpnState state) {
VpnProfile p = new L2tpProfile();
p.setName(NAME);
p.setServerName(SERVER_NAME);
p.setId(ID);
p.setDomainSuffices(SUFFICES);
p.setRouteList(ROUTES);
p.setSavedUsername(SAVED_NAME);
p.setState(state);
return p;
}
private void testVpnProfile(VpnProfile p, VpnState state) {
assertEquals(NAME, p.getName());
assertEquals(SERVER_NAME, p.getServerName());
assertEquals(ID, p.getId());
assertEquals(SUFFICES, p.getDomainSuffices());
assertEquals(ROUTES, p.getRouteList());
assertEquals(SAVED_NAME, p.getSavedUsername());
if (state != null) assertEquals(state, p.getState());
}
}