1873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau/* 2873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * Copyright (C) 2009 The Android Open Source Project 3873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * 4873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * Licensed under the Apache License, Version 2.0 (the "License"); 5873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * you may not use this file except in compliance with the License. 6873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * You may obtain a copy of the License at 7873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * 8873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * http://www.apache.org/licenses/LICENSE-2.0 9873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * 10873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * Unless required by applicable law or agreed to in writing, software 11873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * distributed under the License is distributed on an "AS IS" BASIS, 12873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * See the License for the specific language governing permissions and 14873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * limitations under the License. 15873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau */ 16873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau 171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.net.vpn; 18873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau 1953582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyanimport android.content.BroadcastReceiver; 2053582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyanimport android.content.Context; 2153582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyanimport android.content.Intent; 2253582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyanimport android.net.vpn.L2tpProfile; 23873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lauimport android.net.vpn.L2tpIpsecProfile; 2453582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyanimport android.net.vpn.L2tpIpsecPskProfile; 2553582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyanimport android.net.vpn.PptpProfile; 2653582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyanimport android.net.vpn.VpnManager; 2753582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyanimport android.net.vpn.VpnProfile; 2853582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyanimport android.net.vpn.VpnState; 29873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lauimport android.net.vpn.VpnType; 3053582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyanimport android.os.ConditionVariable; 3153582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyanimport android.os.Parcel; 32873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lauimport android.test.AndroidTestCase; 33b42c3a5809b16527b38c82be3165128ce10e77e6Yu Shan Emily Lauimport android.test.suitebuilder.annotation.SmallTest; 3453582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyanimport android.text.TextUtils; 35873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau 36873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau/** 37873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * Unit test class to test VPN api 38873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * Use the below command to run the vpn unit test only 39873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * runtest vpntest or 40873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * adb shell am instrument -e class 'com.android.unit_tests.VpnTest' 41873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau * -w com.android.unit_tests/android.test.InstrumentationTestRunner 42873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau */ 43873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Laupublic class VpnTest extends AndroidTestCase { 4453582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan private static final String NAME = "a name"; 4553582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan private static final String SERVER_NAME = "a server name"; 4653582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan private static final String ID = "some id"; 4753582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan private static final String SUFFICES = "some suffices"; 4853582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan private static final String ROUTES = "some routes"; 4953582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan private static final String SAVED_NAME = "some name"; 50873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau 51873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau @Override 52873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau public void setUp() { 53873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau } 54873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau 55873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau @Override 56873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau public void tearDown() { 57873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau } 58873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau 59873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau @SmallTest 6053582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan public void testVpnType() { 6153582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan testVpnType(VpnType.L2TP); 6253582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan testVpnType(VpnType.L2TP_IPSEC); 6353582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan testVpnType(VpnType.L2TP_IPSEC_PSK); 6453582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan testVpnType(VpnType.PPTP); 6553582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan } 6653582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan 6753582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan @SmallTest 6853582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan public void testVpnProfile() { 6953582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan VpnState state = VpnState.CONNECTING; 7053582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan testVpnProfile(createTestProfile(state), state); 7153582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan } 7253582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan 7353582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan @SmallTest 74873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau public void testGetType() { 7553582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertEquals(VpnType.L2TP, new L2tpProfile().getType()); 7653582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertEquals(VpnType.L2TP_IPSEC, new L2tpIpsecProfile().getType()); 7753582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertEquals(VpnType.L2TP_IPSEC_PSK, 7853582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan new L2tpIpsecPskProfile().getType()); 7953582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertEquals(VpnType.PPTP, new PptpProfile().getType()); 8053582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan } 8153582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan 8253582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan @SmallTest 8353582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan public void testVpnTypes() { 8453582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertTrue(VpnManager.getSupportedVpnTypes().length > 0); 8553582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan } 8653582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan 8753582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan @SmallTest 8853582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan public void testGetTypeFromManager() { 8953582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan VpnManager m = new VpnManager(getContext()); 9053582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan VpnType[] types = VpnManager.getSupportedVpnTypes(); 9153582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan for (VpnType t : types) { 9253582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertEquals(t, m.createVpnProfile(t).getType()); 9353582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan } 9453582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan } 9553582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan 9653582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan @SmallTest 9753582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan public void testParcelable() { 9853582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan VpnProfile p = createTestProfile(VpnState.CONNECTED); 9953582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan Parcel parcel = Parcel.obtain(); 10053582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan p.writeToParcel(parcel, 0); 10153582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan parcel.setDataPosition(0); 10253582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan 10353582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan // VpnState is transient and not saved in the parcel 10453582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan testVpnProfile(VpnProfile.CREATOR.createFromParcel(parcel), null); 10553582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan } 10653582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan 10753582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan @SmallTest 10853582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan public void testReceiver() { 10953582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan final String profileName = "whatever"; 11053582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan final VpnState state = VpnState.DISCONNECTING; 11153582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan final ConditionVariable cv = new ConditionVariable(); 11253582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan cv.close(); 11353582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan BroadcastReceiver r = new BroadcastReceiver() { 11453582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan public void onReceive(Context c, Intent i) { 11553582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertEquals(profileName, 11653582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan i.getStringExtra(VpnManager.BROADCAST_PROFILE_NAME)); 11753582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertEquals(state, i.getSerializableExtra( 11853582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan VpnManager.BROADCAST_CONNECTION_STATE)); 11953582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan cv.open(); 12053582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan } 12153582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan }; 12253582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan 12353582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan VpnManager m = new VpnManager(getContext()); 12453582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan m.registerConnectivityReceiver(r); 12553582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan m.broadcastConnectivity(profileName, state); 12653582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan 12753582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan // fail it if onReceive() doesn't get executed in 5 sec 12853582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertTrue(cv.block(5000)); 12953582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan } 13053582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan 13153582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan private void testVpnType(VpnType type) { 13253582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertFalse(TextUtils.isEmpty(type.getDisplayName())); 13353582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertNotNull(type.getProfileClass()); 13453582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan } 13553582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan 13653582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan private VpnProfile createTestProfile(VpnState state) { 13753582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan VpnProfile p = new L2tpProfile(); 13853582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan p.setName(NAME); 13953582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan p.setServerName(SERVER_NAME); 14053582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan p.setId(ID); 14153582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan p.setDomainSuffices(SUFFICES); 14253582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan p.setRouteList(ROUTES); 14353582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan p.setSavedUsername(SAVED_NAME); 14453582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan p.setState(state); 14553582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan return p; 14653582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan } 14753582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan 14853582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan private void testVpnProfile(VpnProfile p, VpnState state) { 14953582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertEquals(NAME, p.getName()); 15053582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertEquals(SERVER_NAME, p.getServerName()); 15153582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertEquals(ID, p.getId()); 15253582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertEquals(SUFFICES, p.getDomainSuffices()); 15353582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertEquals(ROUTES, p.getRouteList()); 15453582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan assertEquals(SAVED_NAME, p.getSavedUsername()); 15553582b33e5d36cd993ead3dc87f94cd945fab176Hung-ying Tyan if (state != null) assertEquals(state, p.getState()); 156873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau } 157873eb573945567a33e0a986e82ec650bf6af905aYu Shan Emily Lau} 158