Merge "Add API for proxy configuration over VPN."
This commit is contained in:
@@ -123,6 +123,7 @@ import android.net.NetworkRequest;
|
||||
import android.net.NetworkSpecifier;
|
||||
import android.net.NetworkStack;
|
||||
import android.net.NetworkUtils;
|
||||
import android.net.ProxyInfo;
|
||||
import android.net.RouteInfo;
|
||||
import android.net.SocketKeepalive;
|
||||
import android.net.UidRange;
|
||||
@@ -161,6 +162,7 @@ import com.android.server.connectivity.DefaultNetworkMetrics;
|
||||
import com.android.server.connectivity.IpConnectivityMetrics;
|
||||
import com.android.server.connectivity.MockableSystemProperties;
|
||||
import com.android.server.connectivity.Nat464Xlat;
|
||||
import com.android.server.connectivity.ProxyTracker;
|
||||
import com.android.server.connectivity.Tethering;
|
||||
import com.android.server.connectivity.Vpn;
|
||||
import com.android.server.net.NetworkPinner;
|
||||
@@ -1006,6 +1008,11 @@ public class ConnectivityServiceTest {
|
||||
return mock(Tethering.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ProxyTracker makeProxyTracker() {
|
||||
return mock(ProxyTracker.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int reserveNetId() {
|
||||
while (true) {
|
||||
@@ -1028,6 +1035,11 @@ public class ConnectivityServiceTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean queryUserAccess(int uid, int netId) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public Nat464Xlat getNat464Xlat(MockNetworkAgent mna) {
|
||||
return getNetworkAgentInfoForNetwork(mna.getNetwork()).clatd;
|
||||
}
|
||||
@@ -5132,4 +5144,84 @@ public class ConnectivityServiceTest {
|
||||
mCellNetworkAgent.sendLinkProperties(lp);
|
||||
verifyTcpBufferSizeChange(TEST_TCP_BUFFER_SIZES);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetGlobalProxyForNetwork() {
|
||||
final ProxyInfo testProxyInfo = ProxyInfo.buildDirectProxy("test", 8888);
|
||||
mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
|
||||
final Network wifiNetwork = mWiFiNetworkAgent.getNetwork();
|
||||
when(mService.mProxyTracker.getGlobalProxy()).thenReturn(testProxyInfo);
|
||||
assertEquals(testProxyInfo, mService.getProxyForNetwork(wifiNetwork));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetProxyForActiveNetwork() {
|
||||
final ProxyInfo testProxyInfo = ProxyInfo.buildDirectProxy("test", 8888);
|
||||
mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
|
||||
mWiFiNetworkAgent.connect(true);
|
||||
waitForIdle();
|
||||
assertNull(mService.getProxyForNetwork(null));
|
||||
|
||||
final LinkProperties testLinkProperties = new LinkProperties();
|
||||
testLinkProperties.setHttpProxy(testProxyInfo);
|
||||
|
||||
mWiFiNetworkAgent.sendLinkProperties(testLinkProperties);
|
||||
waitForIdle();
|
||||
|
||||
assertEquals(testProxyInfo, mService.getProxyForNetwork(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetProxyForVPN() {
|
||||
final ProxyInfo testProxyInfo = ProxyInfo.buildDirectProxy("test", 8888);
|
||||
|
||||
// Set up a WiFi network with no proxy
|
||||
mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
|
||||
mWiFiNetworkAgent.connect(true);
|
||||
waitForIdle();
|
||||
assertNull(mService.getProxyForNetwork(null));
|
||||
|
||||
// Set up a VPN network with a proxy
|
||||
final int uid = Process.myUid();
|
||||
final MockNetworkAgent vpnNetworkAgent = new MockNetworkAgent(TRANSPORT_VPN);
|
||||
final ArraySet<UidRange> ranges = new ArraySet<>();
|
||||
ranges.add(new UidRange(uid, uid));
|
||||
mMockVpn.setUids(ranges);
|
||||
LinkProperties testLinkProperties = new LinkProperties();
|
||||
testLinkProperties.setHttpProxy(testProxyInfo);
|
||||
vpnNetworkAgent.sendLinkProperties(testLinkProperties);
|
||||
waitForIdle();
|
||||
|
||||
// Connect to VPN with proxy
|
||||
mMockVpn.setNetworkAgent(vpnNetworkAgent);
|
||||
vpnNetworkAgent.connect(true);
|
||||
mMockVpn.connect();
|
||||
waitForIdle();
|
||||
|
||||
// Test that the VPN network returns a proxy, and the WiFi does not.
|
||||
assertEquals(testProxyInfo, mService.getProxyForNetwork(vpnNetworkAgent.getNetwork()));
|
||||
assertEquals(testProxyInfo, mService.getProxyForNetwork(null));
|
||||
assertNull(mService.getProxyForNetwork(mWiFiNetworkAgent.getNetwork()));
|
||||
|
||||
// Test that the VPN network returns no proxy when it is set to null.
|
||||
testLinkProperties.setHttpProxy(null);
|
||||
vpnNetworkAgent.sendLinkProperties(testLinkProperties);
|
||||
waitForIdle();
|
||||
assertNull(mService.getProxyForNetwork(vpnNetworkAgent.getNetwork()));
|
||||
assertNull(mService.getProxyForNetwork(null));
|
||||
|
||||
// Set WiFi proxy and check that the vpn proxy is still null.
|
||||
testLinkProperties.setHttpProxy(testProxyInfo);
|
||||
mWiFiNetworkAgent.sendLinkProperties(testLinkProperties);
|
||||
waitForIdle();
|
||||
assertNull(mService.getProxyForNetwork(null));
|
||||
|
||||
// Disconnect from VPN and check that the active network, which is now the WiFi, has the
|
||||
// correct proxy setting.
|
||||
vpnNetworkAgent.disconnect();
|
||||
waitForIdle();
|
||||
assertEquals(mWiFiNetworkAgent.getNetwork(), mCm.getActiveNetwork());
|
||||
assertEquals(testProxyInfo, mService.getProxyForNetwork(mWiFiNetworkAgent.getNetwork()));
|
||||
assertEquals(testProxyInfo, mService.getProxyForNetwork(null));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user