I am running Android UI tests. I use a separate Firestore DB for testing. I want to delete all documents after a test finishes. This curl command works.
curl -v -X DELETE "http://127.0.0.1:8080/emulator/v1/projects/test/databases/(default)/documents"
I want to use this in a method in my test class.
class MainActivityTest {
@Rule
// rule goes here
@BeforeClass
public static void setUp() {
String androidLocalHost = "10.0.2.2";
int portNumber = 8080;
FirebaseFirestore.getInstance().useEmulator(androidLocalHost, portNumber);
Log.d("DBT", "Connected to local Firestore");
}
@After
public void tearDown() {
String projectId = "test";
URL url = null;
try {
url = new URL("http://10.0.2.2:8080/emulator/v1/projects/" + projectId + "/databases/(default)/documents");
} catch (MalformedURLException exception) {
Log.e("URLError", Objects.requireNonNull(exception.getMessage()));
}
HttpURLConnection urlConnection = null;
Log.d("TeardownURL", "Connecting to: " + url.toString());
try {
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("DELETE");
int response = urlConnection.getResponseCode();
String msg = urlConnection.getResponseMessage();
Log.i("ResponseCode", "[Response Code: " + response + "] msg: " + msg);
} catch (IOException exception) {
Log.e("IOError", Objects.requireNonNull(exception.getMessage()));
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
}
}
I added network_security_config.xml to allow cleartext and include the host 10.0.2.2 and updated the manifest file accordingly.
However, I get 404 Not found (in ResponseCode log).
My curl command works fine. The only difference is curl uses localhost/127.0.0.1. Since this is in Android studio, I use 10.0.2.2.
After a couple of rounds of prompting with Gemini, I found the solution. I needed to include this line after the urlConnection.requestMethod()
call.
urlConnection.setRequestProperty("Content-Type", "application/json");
Now, I am getting the 200 OK response code/msg.