123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- // Copyright 2014 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "remoting/signaling/server_log_entry_unittest.h"
- #include <sstream>
- #include "testing/gtest/include/gtest/gtest.h"
- #include "third_party/libjingle_xmpp/xmllite/xmlelement.h"
- using jingle_xmpp::QName;
- using jingle_xmpp::XmlAttr;
- using jingle_xmpp::XmlElement;
- namespace remoting {
- const char kJabberClientNamespace[] = "jabber:client";
- const char kChromotingNamespace[] = "google:remoting";
- XmlElement* GetLogElementFromStanza(XmlElement* stanza) {
- if (stanza->Name() != QName(kJabberClientNamespace, "iq")) {
- ADD_FAILURE() << "Expected element 'iq'";
- return nullptr;
- }
- XmlElement* log_element = stanza->FirstChild()->AsElement();
- if (log_element->Name() != QName(kChromotingNamespace, "log")) {
- ADD_FAILURE() << "Expected element 'log'";
- return nullptr;
- }
- if (log_element->NextChild()) {
- ADD_FAILURE() << "Expected only 1 child of 'iq'";
- return nullptr;
- }
- return log_element;
- }
- XmlElement* GetSingleLogEntryFromStanza(XmlElement* stanza) {
- XmlElement* log_element = GetLogElementFromStanza(stanza);
- if (!log_element) {
- // Test failure already recorded, so just return nullptr here.
- return nullptr;
- }
- XmlElement* entry = log_element->FirstChild()->AsElement();
- if (entry->Name() != QName(kChromotingNamespace, "entry")) {
- ADD_FAILURE() << "Expected element 'entry'";
- return nullptr;
- }
- if (entry->NextChild()) {
- ADD_FAILURE() << "Expected only 1 child of 'log'";
- return nullptr;
- }
- return entry;
- }
- bool VerifyStanza(
- const std::map<std::string, std::string>& key_value_pairs,
- const std::set<std::string> keys,
- const XmlElement* elem,
- std::string* error) {
- int attrCount = 0;
- for (const XmlAttr* attr = elem->FirstAttr(); attr != nullptr;
- attr = attr->NextAttr(), attrCount++) {
- if (attr->Name().Namespace().length() != 0) {
- *error = "attribute has non-empty namespace " +
- attr->Name().Namespace();
- return false;
- }
- const std::string& key = attr->Name().LocalPart();
- const std::string& value = attr->Value();
- auto iter = key_value_pairs.find(key);
- if (iter == key_value_pairs.end()) {
- if (keys.find(key) == keys.end()) {
- *error = "unexpected attribute " + key;
- return false;
- }
- } else {
- if (iter->second != value) {
- *error = "attribute " + key + " has value " + iter->second +
- ": expected " + value;
- return false;
- }
- }
- }
- int attr_count_expected = key_value_pairs.size() + keys.size();
- if (attrCount != attr_count_expected) {
- std::stringstream s;
- s << "stanza has " << attrCount << " keys: expected "
- << attr_count_expected;
- *error = s.str();
- return false;
- }
- return true;
- }
- } // namespace remoting
|