Fix flaky UdpEncapsulationSocket test
This commit reduces the flakiness of the testOpenAndCloseUdpEncapsulationSocket by retrying up to three times. Unfortunately, testing port-selected socket creation is racy against other applications. This helps to handle the same race condition as done in IpSecService#bindToRandomPort Bug: 128024100 Test: 200x runs of testOpenAndCloseUdpEncapsulationSocket Change-Id: I7e036ce821019dbac6c50899bd0894e89d2fe82a
This commit is contained in:
@@ -156,10 +156,21 @@ public class IpSecServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOpenAndCloseUdpEncapsulationSocket() throws Exception {
|
public void testOpenAndCloseUdpEncapsulationSocket() throws Exception {
|
||||||
int localport = findUnusedPort();
|
int localport = -1;
|
||||||
|
IpSecUdpEncapResponse udpEncapResp = null;
|
||||||
|
|
||||||
|
for (int i = 0; i < IpSecService.MAX_PORT_BIND_ATTEMPTS; i++) {
|
||||||
|
localport = findUnusedPort();
|
||||||
|
|
||||||
|
udpEncapResp = mIpSecService.openUdpEncapsulationSocket(localport, new Binder());
|
||||||
|
assertNotNull(udpEncapResp);
|
||||||
|
if (udpEncapResp.status == IpSecManager.Status.OK) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Else retry to reduce possibility for port-bind failures.
|
||||||
|
}
|
||||||
|
|
||||||
IpSecUdpEncapResponse udpEncapResp =
|
|
||||||
mIpSecService.openUdpEncapsulationSocket(localport, new Binder());
|
|
||||||
assertNotNull(udpEncapResp);
|
assertNotNull(udpEncapResp);
|
||||||
assertEquals(IpSecManager.Status.OK, udpEncapResp.status);
|
assertEquals(IpSecManager.Status.OK, udpEncapResp.status);
|
||||||
assertEquals(localport, udpEncapResp.port);
|
assertEquals(localport, udpEncapResp.port);
|
||||||
@@ -204,12 +215,11 @@ public class IpSecServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOpenUdpEncapsulationSocketAfterClose() throws Exception {
|
public void testOpenUdpEncapsulationSocketAfterClose() throws Exception {
|
||||||
int localport = findUnusedPort();
|
|
||||||
IpSecUdpEncapResponse udpEncapResp =
|
IpSecUdpEncapResponse udpEncapResp =
|
||||||
mIpSecService.openUdpEncapsulationSocket(localport, new Binder());
|
mIpSecService.openUdpEncapsulationSocket(0, new Binder());
|
||||||
assertNotNull(udpEncapResp);
|
assertNotNull(udpEncapResp);
|
||||||
assertEquals(IpSecManager.Status.OK, udpEncapResp.status);
|
assertEquals(IpSecManager.Status.OK, udpEncapResp.status);
|
||||||
assertEquals(localport, udpEncapResp.port);
|
int localport = udpEncapResp.port;
|
||||||
|
|
||||||
mIpSecService.closeUdpEncapsulationSocket(udpEncapResp.resourceId);
|
mIpSecService.closeUdpEncapsulationSocket(udpEncapResp.resourceId);
|
||||||
udpEncapResp.fileDescriptor.close();
|
udpEncapResp.fileDescriptor.close();
|
||||||
@@ -226,12 +236,11 @@ public class IpSecServiceTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUdpEncapPortNotReleased() throws Exception {
|
public void testUdpEncapPortNotReleased() throws Exception {
|
||||||
int localport = findUnusedPort();
|
|
||||||
IpSecUdpEncapResponse udpEncapResp =
|
IpSecUdpEncapResponse udpEncapResp =
|
||||||
mIpSecService.openUdpEncapsulationSocket(localport, new Binder());
|
mIpSecService.openUdpEncapsulationSocket(0, new Binder());
|
||||||
assertNotNull(udpEncapResp);
|
assertNotNull(udpEncapResp);
|
||||||
assertEquals(IpSecManager.Status.OK, udpEncapResp.status);
|
assertEquals(IpSecManager.Status.OK, udpEncapResp.status);
|
||||||
assertEquals(localport, udpEncapResp.port);
|
int localport = udpEncapResp.port;
|
||||||
|
|
||||||
udpEncapResp.fileDescriptor.close();
|
udpEncapResp.fileDescriptor.close();
|
||||||
|
|
||||||
@@ -273,14 +282,11 @@ public class IpSecServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOpenUdpEncapsulationSocketTwice() throws Exception {
|
public void testOpenUdpEncapsulationSocketTwice() throws Exception {
|
||||||
int localport = findUnusedPort();
|
|
||||||
|
|
||||||
IpSecUdpEncapResponse udpEncapResp =
|
IpSecUdpEncapResponse udpEncapResp =
|
||||||
mIpSecService.openUdpEncapsulationSocket(localport, new Binder());
|
mIpSecService.openUdpEncapsulationSocket(0, new Binder());
|
||||||
assertNotNull(udpEncapResp);
|
assertNotNull(udpEncapResp);
|
||||||
assertEquals(IpSecManager.Status.OK, udpEncapResp.status);
|
assertEquals(IpSecManager.Status.OK, udpEncapResp.status);
|
||||||
assertEquals(localport, udpEncapResp.port);
|
int localport = udpEncapResp.port;
|
||||||
mIpSecService.openUdpEncapsulationSocket(localport, new Binder());
|
|
||||||
|
|
||||||
IpSecUdpEncapResponse testUdpEncapResp =
|
IpSecUdpEncapResponse testUdpEncapResp =
|
||||||
mIpSecService.openUdpEncapsulationSocket(localport, new Binder());
|
mIpSecService.openUdpEncapsulationSocket(localport, new Binder());
|
||||||
|
|||||||
Reference in New Issue
Block a user