| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "remoting/jingle_glue/server_log_entry_unittest.h" | |
| 6 | |
| 7 #include <sstream> | |
| 8 | |
| 9 #include "testing/gtest/include/gtest/gtest.h" | |
| 10 #include "third_party/libjingle/source/talk/xmllite/xmlelement.h" | |
| 11 | |
| 12 using buzz::QName; | |
| 13 using buzz::XmlAttr; | |
| 14 using buzz::XmlElement; | |
| 15 | |
| 16 namespace remoting { | |
| 17 | |
| 18 const char kJabberClientNamespace[] = "jabber:client"; | |
| 19 const char kChromotingNamespace[] = "google:remoting"; | |
| 20 | |
| 21 XmlElement* GetLogElementFromStanza(XmlElement* stanza) { | |
| 22 if (stanza->Name() != QName(kJabberClientNamespace, "iq")) { | |
| 23 ADD_FAILURE() << "Expected element 'iq'"; | |
| 24 return NULL; | |
| 25 } | |
| 26 XmlElement* log_element = stanza->FirstChild()->AsElement(); | |
| 27 if (log_element->Name() != QName(kChromotingNamespace, "log")) { | |
| 28 ADD_FAILURE() << "Expected element 'log'"; | |
| 29 return NULL; | |
| 30 } | |
| 31 if (log_element->NextChild()) { | |
| 32 ADD_FAILURE() << "Expected only 1 child of 'iq'"; | |
| 33 return NULL; | |
| 34 } | |
| 35 return log_element; | |
| 36 } | |
| 37 | |
| 38 XmlElement* GetSingleLogEntryFromStanza(XmlElement* stanza) { | |
| 39 XmlElement* log_element = GetLogElementFromStanza(stanza); | |
| 40 if (!log_element) { | |
| 41 // Test failure already recorded, so just return NULL here. | |
| 42 return NULL; | |
| 43 } | |
| 44 XmlElement* entry = log_element->FirstChild()->AsElement(); | |
| 45 if (entry->Name() != QName(kChromotingNamespace, "entry")) { | |
| 46 ADD_FAILURE() << "Expected element 'entry'"; | |
| 47 return NULL; | |
| 48 } | |
| 49 if (entry->NextChild()) { | |
| 50 ADD_FAILURE() << "Expected only 1 child of 'log'"; | |
| 51 return NULL; | |
| 52 } | |
| 53 return entry; | |
| 54 } | |
| 55 | |
| 56 bool VerifyStanza( | |
| 57 const std::map<std::string, std::string>& key_value_pairs, | |
| 58 const std::set<std::string> keys, | |
| 59 const XmlElement* elem, | |
| 60 std::string* error) { | |
| 61 int attrCount = 0; | |
| 62 for (const XmlAttr* attr = elem->FirstAttr(); attr != NULL; | |
| 63 attr = attr->NextAttr(), attrCount++) { | |
| 64 if (attr->Name().Namespace().length() != 0) { | |
| 65 *error = "attribute has non-empty namespace " + | |
| 66 attr->Name().Namespace(); | |
| 67 return false; | |
| 68 } | |
| 69 const std::string& key = attr->Name().LocalPart(); | |
| 70 const std::string& value = attr->Value(); | |
| 71 std::map<std::string, std::string>::const_iterator iter = | |
| 72 key_value_pairs.find(key); | |
| 73 if (iter == key_value_pairs.end()) { | |
| 74 if (keys.find(key) == keys.end()) { | |
| 75 *error = "unexpected attribute " + key; | |
| 76 return false; | |
| 77 } | |
| 78 } else { | |
| 79 if (iter->second != value) { | |
| 80 *error = "attribute " + key + " has value " + iter->second + | |
| 81 ": expected " + value; | |
| 82 return false; | |
| 83 } | |
| 84 } | |
| 85 } | |
| 86 int attr_count_expected = key_value_pairs.size() + keys.size(); | |
| 87 if (attrCount != attr_count_expected) { | |
| 88 std::stringstream s; | |
| 89 s << "stanza has " << attrCount << " keys: expected " | |
| 90 << attr_count_expected; | |
| 91 *error = s.str(); | |
| 92 return false; | |
| 93 } | |
| 94 return true; | |
| 95 } | |
| 96 | |
| 97 } // namespace remoting | |
| OLD | NEW |