Add finalizer to check whether destroy was called

Logs wtf if destroy() was not called.

Test: atest NsdManagerDownstreamTetheringTest
Change-Id: I1c1693113c4ce4be8121a5af1bd4b7082eec15a3
diff --git a/tests/cts/net/util/java/android/net/cts/util/EthernetTestInterface.kt b/tests/cts/net/util/java/android/net/cts/util/EthernetTestInterface.kt
index f254cb9..a93430c 100644
--- a/tests/cts/net/util/java/android/net/cts/util/EthernetTestInterface.kt
+++ b/tests/cts/net/util/java/android/net/cts/util/EthernetTestInterface.kt
@@ -26,10 +26,12 @@
 import android.net.TestNetworkInterface
 import android.net.cts.util.EthernetTestInterface.EthernetStateListener.CallbackEntry.InterfaceStateChanged
 import android.os.Handler
+import android.util.Log
 import com.android.net.module.util.ArrayTrackRecord
 import com.android.testutils.runAsShell
 import kotlin.test.assertNotNull
 
+private const val TAG = "EthernetTestInterface"
 private const val TIMEOUT_MS = 5_000L
 
 /**
@@ -75,6 +77,7 @@
     val name get() = testIface.interfaceName
     private val listener = EthernetStateListener(name)
     private val em = context.getSystemService(EthernetManager::class.java)!!
+    private var cleanedUp = false
 
     init{
         em.addInterfaceStateListener(handler::post, listener)
@@ -98,5 +101,14 @@
             em.setIncludeTestInterfaces(false)
         }
         em.removeInterfaceStateListener(listener)
+
+        cleanedUp = true
+    }
+
+    protected fun finalize() {
+        if (!cleanedUp) {
+            Log.wtf(TAG, "destroy() was not called for interface $name.")
+            destroy()
+        }
     }
 }