diff --git a/tests/cts/net/src/android/net/cts/IpSecManagerTest.java b/tests/cts/net/src/android/net/cts/IpSecManagerTest.java
index 1241785..d6b8a96 100644
--- a/tests/cts/net/src/android/net/cts/IpSecManagerTest.java
+++ b/tests/cts/net/src/android/net/cts/IpSecManagerTest.java
@@ -73,12 +73,6 @@
 
     private static final byte[] AEAD_KEY = getKey(288);
 
-    @Before
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
     /*
      * Allocate a random SPI
      * Allocate a specific SPI using previous randomly created SPI value
diff --git a/tests/cts/net/src/android/net/cts/IpSecManagerTunnelTest.java b/tests/cts/net/src/android/net/cts/IpSecManagerTunnelTest.java
index ef6bfc0..f3105a7 100644
--- a/tests/cts/net/src/android/net/cts/IpSecManagerTunnelTest.java
+++ b/tests/cts/net/src/android/net/cts/IpSecManagerTunnelTest.java
@@ -129,15 +129,15 @@
         // right appop permissions.
         setAppop(OP_MANAGE_IPSEC_TUNNELS, true);
 
-        TestNetworkInterface testIntf =
+        TestNetworkInterface testIface =
                 sTNM.createTunInterface(
                         new LinkAddress[] {
                             new LinkAddress(LOCAL_OUTER_4, IP4_PREFIX_LEN),
                             new LinkAddress(LOCAL_OUTER_6, IP6_PREFIX_LEN)
                         });
 
-        sTunFd = testIntf.getFileDescriptor();
-        sTunNetworkCallback = setupAndGetTestNetwork(testIntf.getInterfaceName());
+        sTunFd = testIface.getFileDescriptor();
+        sTunNetworkCallback = setupAndGetTestNetwork(testIface.getInterfaceName());
         sTunNetwork = sTunNetworkCallback.getNetworkBlocking();
 
         sTunUtils = new TunUtils(sTunFd);
@@ -500,21 +500,20 @@
                         mISM.allocateSecurityParameterIndex(localOuter, spi);
                 IpSecManager.SecurityParameterIndex outSpi =
                         mISM.allocateSecurityParameterIndex(remoteOuter, spi);
-                IpSecManager.IpSecTunnelInterface tunnelIntf =
+                IpSecManager.IpSecTunnelInterface tunnelIface =
                         mISM.createIpSecTunnelInterface(localOuter, remoteOuter, sTunNetwork)) {
             // Build the test network
-            tunnelIntf.addAddress(localInner, innerPrefixLen);
-            testNetworkCb = setupAndGetTestNetwork(tunnelIntf.getInterfaceName());
+            tunnelIface.addAddress(localInner, innerPrefixLen);
+            testNetworkCb = setupAndGetTestNetwork(tunnelIface.getInterfaceName());
             Network testNetwork = testNetworkCb.getNetworkBlocking();
 
             // Check interface was created
-            NetworkInterface netIntf = NetworkInterface.getByName(tunnelIntf.getInterfaceName());
-            assertNotNull(netIntf);
+            assertNotNull(NetworkInterface.getByName(tunnelIface.getInterfaceName()));
 
             // Verify address was added
-            netIntf = NetworkInterface.getByInetAddress(localInner);
-            assertNotNull(netIntf);
-            assertEquals(tunnelIntf.getInterfaceName(), netIntf.getDisplayName());
+            final NetworkInterface netIface = NetworkInterface.getByInetAddress(localInner);
+            assertNotNull(netIface);
+            assertEquals(tunnelIface.getInterfaceName(), netIface.getDisplayName());
 
             // Configure Transform parameters
             IpSecTransform.Builder transformBuilder = new IpSecTransform.Builder(sContext);
@@ -533,8 +532,9 @@
                             transformBuilder.buildTunnelModeTransform(remoteOuter, inSpi);
                     IpSecTransform outTransform =
                             transformBuilder.buildTunnelModeTransform(localOuter, outSpi)) {
-                mISM.applyTunnelModeTransform(tunnelIntf, IpSecManager.DIRECTION_IN, inTransform);
-                mISM.applyTunnelModeTransform(tunnelIntf, IpSecManager.DIRECTION_OUT, outTransform);
+                mISM.applyTunnelModeTransform(tunnelIface, IpSecManager.DIRECTION_IN, inTransform);
+                mISM.applyTunnelModeTransform(
+                        tunnelIface, IpSecManager.DIRECTION_OUT, outTransform);
 
                 test.run(testNetwork);
             }
@@ -543,13 +543,13 @@
             sTNM.teardownTestNetwork(testNetwork);
 
             // Remove addresses and check that interface is still present, but fails lookup-by-addr
-            tunnelIntf.removeAddress(localInner, innerPrefixLen);
-            assertNotNull(NetworkInterface.getByName(tunnelIntf.getInterfaceName()));
+            tunnelIface.removeAddress(localInner, innerPrefixLen);
+            assertNotNull(NetworkInterface.getByName(tunnelIface.getInterfaceName()));
             assertNull(NetworkInterface.getByInetAddress(localInner));
 
             // Check interface was cleaned up
-            tunnelIntf.close();
-            assertNull(NetworkInterface.getByName(tunnelIntf.getInterfaceName()));
+            tunnelIface.close();
+            assertNull(NetworkInterface.getByName(tunnelIface.getInterfaceName()));
         } finally {
             if (testNetworkCb != null) {
                 sCM.unregisterNetworkCallback(testNetworkCb);
