| /* |
| * 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()); |
| } |
| } |