Support HTTP responses with no body
Successful upsertLocalAuthInfo cloud requests returns no body and no
content type.
BUG=25766813
Change-Id: Id4deb57c8dfea04196f77c80b6f40ce62db9fa6f
Reviewed-on: https://weave-review.googlesource.com/1799
Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/examples/provider/curl_http_client.cc b/examples/provider/curl_http_client.cc
index 774c07b..6f0ba64 100644
--- a/examples/provider/curl_http_client.cc
+++ b/examples/provider/curl_http_client.cc
@@ -118,12 +118,6 @@
response->content_type = header.second;
}
- if (response->content_type.empty()) {
- Error::AddTo(&error, FROM_HERE, "curl", "no_content_header",
- "Content-Type header is missing");
- return {nullptr, std::move(error)};
- }
-
CHECK_EQ(CURLE_OK, curl_easy_getinfo(curl.get(), CURLINFO_RESPONSE_CODE,
&response->status));
diff --git a/src/device_registration_info.cc b/src/device_registration_info.cc
index 3bc7515..110ba81 100644
--- a/src/device_registration_info.cc
+++ b/src/device_registration_info.cc
@@ -712,6 +712,12 @@
return;
}
+ if (data->allow_response_without_content &&
+ response->GetContentType().empty()) {
+ cloud_backoff_entry_->InformOfRequest(true);
+ return data->callback.Run({}, nullptr);
+ }
+
auto json_resp = ParseJsonResponse(*response, &error);
if (!json_resp) {
cloud_backoff_entry_->InformOfRequest(true);
diff --git a/src/device_registration_info.h b/src/device_registration_info.h
index ff9c29b..bacab48 100644
--- a/src/device_registration_info.h
+++ b/src/device_registration_info.h
@@ -178,6 +178,8 @@
provider::HttpClient::Method method;
std::string url;
std::string body;
+ // Workaround for inconsistent APIs which returns no body.
+ bool allow_response_without_content = false;
CloudRequestDoneCallback callback;
};
void SendCloudRequest(const std::shared_ptr<const CloudRequestData>& data);
diff --git a/src/weave_unittest.cc b/src/weave_unittest.cc
index b8c4d9b..66850cf 100644
--- a/src/weave_unittest.cc
+++ b/src/weave_unittest.cc
@@ -198,7 +198,6 @@
.Times(AtLeast(1))
.WillRepeatedly(Return("application/json; charset=utf-8"));
EXPECT_CALL(*response, GetData())
- .Times(AtLeast(1))
.WillRepeatedly(Return(json_response));
callback.Run(std::move(response), nullptr);
})));