Behaving nice with AutoFill servers: Adjusting upload rate, processing 500, 502 and 503 responses, etc.
TEST=Unit-tested + by setting up the response from AutoFill server.
BUG=39921
Review URL: http://codereview.chromium.org/1535011

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43531 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/autofill/autofill_xml_parser_unittest.cc b/chrome/browser/autofill/autofill_xml_parser_unittest.cc
index 7e1e55c3..c06df83 100644
--- a/chrome/browser/autofill/autofill_xml_parser_unittest.cc
+++ b/chrome/browser/autofill/autofill_xml_parser_unittest.cc
@@ -135,4 +135,59 @@
   EXPECT_EQ(NO_SERVER_DATA, field_types[0]);
 }
 
+// Test successfull upload response.
+TEST(AutoFillUploadXmlParser, TestSuccessfulResponse) {
+  std::string xml = "<autofilluploadresponse positiveuploadrate=\"0.5\" "
+                    "negativeuploadrate=\"0.3\"/>";
+  double positive = 0;
+  double negative = 0;
+  AutoFillUploadXmlParser parse_handler(&positive, &negative);
+  buzz::XmlParser parser(&parse_handler);
+  parser.Parse(xml.c_str(), xml.length(), true);
+  EXPECT_TRUE(parse_handler.succeeded());
+  EXPECT_DOUBLE_EQ(0.5, positive);
+  EXPECT_DOUBLE_EQ(0.3, negative);
+}
+
+// Test failed upload response.
+TEST(AutoFillUploadXmlParser, TestFailedResponse) {
+  std::string xml = "<autofilluploadresponse positiveuploadrate=\"\" "
+                    "negativeuploadrate=\"0.3\"/>";
+  double positive = 0;
+  double negative = 0;
+  scoped_ptr<AutoFillUploadXmlParser> parse_handler(
+      new AutoFillUploadXmlParser(&positive, &negative));
+  scoped_ptr<buzz::XmlParser> parser(new buzz::XmlParser(parse_handler.get()));
+  parser->Parse(xml.c_str(), xml.length(), true);
+  EXPECT_TRUE(!parse_handler->succeeded());
+  EXPECT_DOUBLE_EQ(0, positive);
+  EXPECT_DOUBLE_EQ(0.3, negative);  // Partially parsed.
+  negative = 0;
+
+  xml = "<autofilluploadresponse positiveuploadrate=\"0.5\" "
+        "negativeuploadrate=\"0.3\"";
+  parse_handler.reset(new AutoFillUploadXmlParser(&positive, &negative));
+  parser.reset(new buzz::XmlParser(parse_handler.get()));
+  parser->Parse(xml.c_str(), xml.length(), true);
+  EXPECT_TRUE(!parse_handler->succeeded());
+  EXPECT_DOUBLE_EQ(0, positive);
+  EXPECT_DOUBLE_EQ(0, negative);
+
+  xml = "bad data";
+  parse_handler.reset(new AutoFillUploadXmlParser(&positive, &negative));
+  parser.reset(new buzz::XmlParser(parse_handler.get()));
+  parser->Parse(xml.c_str(), xml.length(), true);
+  EXPECT_TRUE(!parse_handler->succeeded());
+  EXPECT_DOUBLE_EQ(0, positive);
+  EXPECT_DOUBLE_EQ(0, negative);
+
+  xml = "";
+  parse_handler.reset(new AutoFillUploadXmlParser(&positive, &negative));
+  parser.reset(new buzz::XmlParser(parse_handler.get()));
+  parser->Parse(xml.c_str(), xml.length(), true);
+  EXPECT_TRUE(!parse_handler->succeeded());
+  EXPECT_DOUBLE_EQ(0, positive);
+  EXPECT_DOUBLE_EQ(0, negative);
+}
+
 }  // namespace