diff --git a/tests/cts/net/jni/NativeMultinetworkJni.cpp b/tests/cts/net/jni/NativeMultinetworkJni.cpp
index 332148b..d1a92a4 100644
--- a/tests/cts/net/jni/NativeMultinetworkJni.cpp
+++ b/tests/cts/net/jni/NativeMultinetworkJni.cpp
@@ -42,7 +42,7 @@
         if (actual < expected) {                                     \
             jniThrowExceptionFmt(env, "java/lang/AssertionError",    \
                     "%s:%d: %s EXPECT_GE: expected %d, got %d",      \
-                    __FILE__, __LINE__, expected, actual);           \
+                    __FILE__, __LINE__, msg, expected, actual);      \
         }                                                            \
     } while (0)
 
@@ -65,7 +65,7 @@
     } while (0)
 
 static const int MAXPACKET = 8 * 1024;
-static const int TIMEOUT_MS = 2000;
+static const int TIMEOUT_MS = 15000;
 static const char kHostname[] = "connectivitycheck.android.com";
 static const char kNxDomainName[] = "test1-nx.metric.gstatic.com";
 static const char kGoogleName[] = "www.google.com";
@@ -82,23 +82,29 @@
         int n = android_res_nresult(fd, rcode, buf, bufLen);
         // Verify that android_res_nresult() closed the fd
         char dummy;
-        EXPECT_EQ(env, -1, read(fd, &dummy, sizeof dummy), "res_nresult check for closing fd");
+        EXPECT_EQ(env, -1, read(fd, &dummy, sizeof(dummy)), "res_nresult check for closing fd");
         EXPECT_EQ(env, EBADF, errno, "res_nresult check for errno");
         return n;
     }
 
-    return -EREMOTEIO;
+    return -ETIMEDOUT;
 }
 
 int extractIpAddressAnswers(uint8_t* buf, size_t bufLen, int family) {
     ns_msg handle;
     if (ns_initparse((const uint8_t*) buf, bufLen, &handle) < 0) {
-        return -EREMOTEIO;
+        return -errno;
     }
     const int ancount = ns_msg_count(handle, ns_s_an);
+    // Answer count = 0 is valid(e.g. response of query with root)
+    if (!ancount) {
+        return 0;
+    }
     ns_rr rr;
+    bool hasValidAns = false;
     for (int i = 0; i < ancount; i++) {
         if (ns_parserr(&handle, ns_s_an, i, &rr) < 0) {
+            // If there is no valid answer, test will fail.
             continue;
         }
         const uint8_t* rdata = ns_rr_rdata(rr);
@@ -106,8 +112,9 @@
         if (inet_ntop(family, (const char*) rdata, buffer, sizeof(buffer)) == NULL) {
             return -errno;
         }
+        hasValidAns = true;
     }
-    return 0;
+    return hasValidAns ? 0 : -EBADMSG;
 }
 
 int expectAnswersValid(JNIEnv* env, int fd, int family, int expectedRcode) {
@@ -117,10 +124,8 @@
     if (res < 0) {
         return res;
     }
-    if(rcode != expectedRcode) {
-        ALOGD("rcode:%d, expectedRcode = %d", rcode, expectedRcode);
-        return -EREMOTEIO;
-    }
+
+    EXPECT_EQ(env, expectedRcode, rcode, "rcode is not expected");
 
     if (expectedRcode == ns_r_noerror && res > 0) {
         return extractIpAddressAnswers(buf, res, family);
@@ -151,8 +156,7 @@
             "v4 res_nquery check answers");
 
     // V4 NXDOMAIN
-    fd = android_res_nquery(handle, kNxDomainName, ns_c_in, ns_t_a,
-            ANDROID_RESOLV_NO_CACHE_LOOKUP);
+    fd = android_res_nquery(handle, kNxDomainName, ns_c_in, ns_t_a, 0);
     EXPECT_GE(env, fd, 0, "v4 res_nquery NXDOMAIN");
     EXPECT_EQ(env, 0, expectAnswersValid(env, fd, AF_INET, ns_r_nxdomain),
             "v4 res_nquery NXDOMAIN check answers");
@@ -164,8 +168,7 @@
             "v6 res_nquery check answers");
 
     // V6 NXDOMAIN
-    fd = android_res_nquery(handle, kNxDomainName, ns_c_in, ns_t_aaaa,
-            ANDROID_RESOLV_NO_CACHE_LOOKUP);
+    fd = android_res_nquery(handle, kNxDomainName, ns_c_in, ns_t_aaaa, 0);
     EXPECT_GE(env, fd, 0, "v6 res_nquery NXDOMAIN");
     EXPECT_EQ(env, 0, expectAnswersValid(env, fd, AF_INET, ns_r_nxdomain),
             "v6 res_nquery NXDOMAIN check answers");
@@ -201,7 +204,7 @@
     memset(buf1, 0, sizeof(buf1));
     len1 = makeQuery(kNxDomainName, ns_t_a, buf1, sizeof(buf1));
     EXPECT_GT(env, len1, 0, "v4 res_mkquery NXDOMAIN");
-    fd1 = android_res_nsend(handle, buf1, len1, ANDROID_RESOLV_NO_CACHE_LOOKUP);
+    fd1 = android_res_nsend(handle, buf1, len1, 0);
     EXPECT_GE(env, fd1, 0, "v4 res_nsend NXDOMAIN");
     EXPECT_EQ(env, 0, expectAnswersValid(env, fd1, AF_INET, ns_r_nxdomain),
             "v4 res_nsend NXDOMAIN check answers");
@@ -224,11 +227,11 @@
     EXPECT_EQ(env, 0, expectAnswersValid(env, fd1, AF_INET6, ns_r_noerror),
             "v6 res_nsend 1st check answers");
 
-    // // V6 NXDOMAIN
+    // V6 NXDOMAIN
     memset(buf1, 0, sizeof(buf1));
     len1 = makeQuery(kNxDomainName, ns_t_aaaa, buf1, sizeof(buf1));
     EXPECT_GT(env, len1, 0, "v6 res_mkquery NXDOMAIN");
-    fd1 = android_res_nsend(handle, buf1, len1, ANDROID_RESOLV_NO_CACHE_LOOKUP);
+    fd1 = android_res_nsend(handle, buf1, len1, 0);
     EXPECT_GE(env, fd1, 0, "v6 res_nsend NXDOMAIN");
     EXPECT_EQ(env, 0, expectAnswersValid(env, fd1, AF_INET6, ns_r_nxdomain),
             "v6 res_nsend NXDOMAIN check answers");
@@ -245,8 +248,9 @@
     int rcode = -1;
     uint8_t buf[MAXPACKET] = {};
     android_res_cancel(fd);
-    android_res_cancel(fd);
+    EXPECT_EQ(env, -EBADF, android_res_nresult(fd, &rcode, buf, MAXPACKET), "res_cancel");
 
+    android_res_cancel(fd);
     EXPECT_EQ(env, -EBADF, android_res_nresult(fd, &rcode, buf, MAXPACKET), "res_cancel");
     return 0;
 }
@@ -269,7 +273,7 @@
 
     fd = android_res_nquery(handle, exceedingLabelQuery.c_str(), ns_c_in, ns_t_a, 0);
     EXPECT_EQ(env, -EMSGSIZE, fd, "res_nquery exceedingLabelQuery");
-    fd = android_res_nquery(handle, exceedingDomainQuery.c_str(), ns_c_in, ns_t_a, 0);
+    fd = android_res_nquery(handle, exceedingDomainQuery.c_str(), ns_c_in, ns_t_aaaa, 0);
     EXPECT_EQ(env, -EMSGSIZE, fd, "res_nquery exceedingDomainQuery");
 
     uint8_t buf[10] = {};
