diff --git a/http_fetcher_unittest.cc b/http_fetcher_unittest.cc
index a579ea3..0a38c5c 100644
--- a/http_fetcher_unittest.cc
+++ b/http_fetcher_unittest.cc
@@ -339,6 +339,7 @@
     data.append(bytes, length);
   }
   virtual void TransferComplete(HttpFetcher* fetcher, bool successful) {
+    EXPECT_TRUE(successful);
     g_main_loop_quit(loop_);
   }
   string data;
diff --git a/libcurl_http_fetcher.cc b/libcurl_http_fetcher.cc
index e2f18af..84f0972 100644
--- a/libcurl_http_fetcher.cc
+++ b/libcurl_http_fetcher.cc
@@ -119,8 +119,10 @@
       return false;
     } else {
       if (delegate_) {
-        // success is when http_response_code is 200
-        delegate_->TransferComplete(this, http_response_code == 200);
+        // success is when http_response_code is 2xx
+        bool success = (http_response_code >= 200) &&
+            (http_response_code < 300);
+        delegate_->TransferComplete(this, success);
       }
     }
   } else {
diff --git a/test_http_server.cc b/test_http_server.cc
index 9fbe97f..3f6897c 100644
--- a/test_http_server.cc
+++ b/test_http_server.cc
@@ -31,8 +31,10 @@
 namespace chromeos_update_engine {
 
 struct HttpRequest {
+  HttpRequest() : offset(0), return_code(200) {}
   string url;
   off_t offset;
+  int return_code;
 };
 
 namespace {
@@ -76,6 +78,7 @@
     LOG(INFO) << "Range: " << range_header;
     CHECK(*range_header.rbegin() == '-');
     request->offset = atoll(range_header.c_str() + strlen("bytes="));
+    request->return_code = 206;  // Success for Range: request
     LOG(INFO) << "Offset: " << request->offset;
   }
   request->url = url;
@@ -104,9 +107,9 @@
 }
 
 void WriteHeaders(int fd, bool support_range, off_t full_size,
-                  off_t start_offset) {
+                  off_t start_offset, int return_code) {
   LOG(INFO) << "writing headers";
-  WriteString(fd, "HTTP/1.1 200 OK\r\n");
+  WriteString(fd, string("HTTP/1.1 ") + Itoa(return_code) + " OK\r\n");
   WriteString(fd, "Content-Type: application/octet-stream\r\n");
   if (support_range) {
     WriteString(fd, "Accept-Ranges: bytes\r\n");
@@ -121,13 +124,13 @@
 }
 
 void HandleQuitQuitQuit(int fd) {
-  WriteHeaders(fd, true, 0, 0);
+  WriteHeaders(fd, true, 0, 0, 200);
   exit(0);
 }
 
 void HandleBig(int fd, const HttpRequest& request) {
   const off_t full_length = kBigLength;
-  WriteHeaders(fd, true, full_length, request.offset);
+  WriteHeaders(fd, true, full_length, request.offset, request.return_code);
   const off_t content_length = full_length - request.offset;
   int i = request.offset;
   for (; i % 10; i++)
@@ -143,7 +146,7 @@
 // (technically, when (offset % (9000 * 7)) == 0).
 void HandleFlaky(int fd, const HttpRequest& request) {
   const off_t full_length = kBigLength;
-  WriteHeaders(fd, true, full_length, request.offset);
+  WriteHeaders(fd, true, full_length, request.offset, request.return_code);
   const off_t content_length =
       min(static_cast<off_t>(9000), full_length - request.offset);
   const bool should_sleep = (request.offset % (9000 * 7)) == 0;
@@ -172,7 +175,7 @@
 
 void HandleDefault(int fd, const HttpRequest& request) {
   const string data("unhandled path");
-  WriteHeaders(fd, true, data.size(), request.offset);
+  WriteHeaders(fd, true, data.size(), request.offset, request.return_code);
   const string data_to_write(data.substr(request.offset,
                                          data.size() - request.offset));
   WriteString(fd, data_to_write);
