Internet access in Instrumented Test

Viewed 334

I'm trying to reach one of our servers in an Android Instrumented Test. I'm running the test on a device with Android 10 and I obtain the following Exception:

Permission denied (missing INTERNET permission?)

To avoid this I've tried (I'm using kotlin)

@Rule
@JvmField
var runtimePermission = GrantPermissionRule.grant(Manifest.permission.INTERNET)

but in this case I've got thi error:

junit.framework.AssertionFailedError: Failed to grant permissions

Even the following code has no success:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        getInstrumentation().getUiAutomation().executeShellCommand(
                "pm grant " + context.getPackageName()
                        + " android.permission.INTERNET");
}

Is it possible to achieve my goal?

[UPDATED] Here is a minimal test:

class Minimal {

@Rule
@JvmField
var runtimePermission: GrantPermissionRule = GrantPermissionRule.grant(Manifest.permission.INTERNET)

@Test
fun minimalReproducible() {

    val buffer = CharArray(2000)
    val url = URL("https://example.net/new-message.php")
    val connection = url.openConnection() as HttpsURLConnection
    connection.requestMethod = "POST"

    val urlParameters: String = ""      // buildParameterUrlString(params)

    connection.doOutput = true
    val outputStream = DataOutputStream(connection.outputStream)
    outputStream.writeBytes(urlParameters)
    outputStream.flush()
    outputStream.close()
    val responseCode = connection.responseCode
  }
}
1 Answers

You might be missing this on your manifest

<uses-permission android:name="android.permission.INTERNET" />
Related