void check_slave_sync(Volume& v, const be::BackendTestSetup::WithRandomNamespace& wrns, const MDSNodeConfig& cfg, bool wait = true) { MetaDataBackendInterfacePtr mdb(std::make_shared<MDSMetaDataBackend>(cfg, wrns.ns(), boost::none)); const uint32_t secs = mds_manager_->poll_interval().count(); const uint32_t sleep_msecs = 100; const uint32_t count = wait ? 3 * 1000 * secs / sleep_msecs : 1; for (size_t i = 0; i < count; ++i) { if (mdb->lastCorkUUID() == v.getMetaDataStore()->lastCork()) { CachedMetaDataStore md(mdb, "slave"); check_metadata(v, md); return; } else { boost::this_thread::sleep_for(boost::chrono::milliseconds(sleep_msecs)); } } FAIL() << "slave not in sync after " << (count * sleep_msecs) << " milliseconds"; }
void NotesNode::clearAll() { ContentManager & db = mdb(); ScopedDB<ContentManager> lock(db); // Retrieve the nodes from database. children_.erase(children_.begin()); util::DeletePtrContainer(&children_); db.removeAllNotes(); }
void NotesNode::updateChildren() { if (children_.size() > 0) { children_.erase(children_.begin()); } util::DeletePtrContainer(&children_); NodePtr ptr = 0; ContentManager & db = mdb(); ScopedDB<ContentManager> lock(db); cms::Notes notes; db.allNotes(notes); children_.reserve(notes.size() + 1); for(int i = 0; i < notes.size(); ++i) { ptr = new NoteNode(this, notes.at(i)); ptr->mutable_type() = NODE_TYPE_NOTE; children_.push_back(ptr); } children_.insert(children_.begin(), &action_node_); }
bool CGUIWindowMusicPlaylistEditor::GetDirectory(const std::string &strDirectory, CFileItemList &items) { items.Clear(); if (strDirectory.empty()) { // root listing - list files:// and musicdb:// CFileItemPtr files(new CFileItem("files://", true)); files->SetLabel(g_localizeStrings.Get(744)); files->SetLabelPreformatted(true); files->m_bIsShareOrDrive = true; items.Add(files); CFileItemPtr mdb(new CFileItem("musicdb://", true)); mdb->SetLabel(g_localizeStrings.Get(14022)); mdb->SetLabelPreformatted(true); mdb->m_bIsShareOrDrive = true; items.SetPath(""); items.Add(mdb); CFileItemPtr vdb(new CFileItem("videodb://musicvideos/", true)); vdb->SetLabel(g_localizeStrings.Get(20389)); vdb->SetLabelPreformatted(true); vdb->m_bIsShareOrDrive = true; items.SetPath(""); items.Add(vdb); return true; } if (!CGUIWindowMusicBase::GetDirectory(strDirectory, items)) return false; // check for .CUE files here. items.FilterCueItems(); return true; }
void tst_QContactDetail::classHierarchy() { QContactDetail f1; QContactDetail f2; QVERIFY(f1.isEmpty()); QVERIFY(f2.isEmpty()); QContactPhoneNumber p1; p1.setNumber("123456"); QVERIFY(!p1.isEmpty()); QVERIFY(p1.definitionName() == QContactPhoneNumber::DefinitionName); QContactName m1; m1.setFirstName("Bob"); QVERIFY(!m1.isEmpty()); QVERIFY(m1.definitionName() == QContactName::DefinitionName); QVERIFY(p1 != m1); QVERIFY(f1 == f2); f1 = p1; // f1 is a phonenumber QVERIFY(f1 == p1); f1 = f1; // assign to itself QVERIFY(f1 == f1); QVERIFY(f1 == p1); QVERIFY(f1 != f2); QVERIFY(p1 != f2); p1 = p1; // assign leaf class to itself QVERIFY(p1 == p1); QVERIFY(f1 == p1); QVERIFY(p1 == f1); f2 = f1; // f2 = f1 = phonenumber QVERIFY(f1 == f2); QVERIFY(f2 == f1); QVERIFY(f2 == p1); QVERIFY(f1 == p1); f1 = m1; // f1 = name, f2 = phonenumber QVERIFY(f1 == m1); QVERIFY(f1 != f2); QVERIFY(f2 == p1); QContactPhoneNumber p2(f2); // p2 = f2 = phonenumber QVERIFY(p1 == p2); QVERIFY(p1 == f2); QCOMPARE(p2.number(), p1.number()); QCOMPARE(p2.number(), QString("123456")); p2 = p1; // phone number to phone number QVERIFY(p1 == p2); QVERIFY(p1 == f2); QCOMPARE(p2.number(), p1.number()); QCOMPARE(p2.number(), QString("123456")); p2.setNumber("5678"); // NOTE: implicitly shared, this has caused a detach so p1 != 2 QVERIFY(p1 != p2); QVERIFY(p1 == f2); QVERIFY(p2 != f2); QCOMPARE(p2.number(), QString("5678")); QCOMPARE(p1.number(), QString("123456")); /* Bad assignment */ p2 = m1; // assign a name to a phone number QVERIFY(p2 != m1); QVERIFY(p2.definitionName() == QContactPhoneNumber::DefinitionName); // should still be a phone number though QVERIFY(p2.isEmpty()); /* copy ctor */ QContactName m2(m1); QVERIFY(m2 == m1); /* another bad assignment */ m2 = p2; // phone number to a name QVERIFY(m2 != m1); QVERIFY(m2.definitionName() == QContactName::DefinitionName); QVERIFY(m2.isEmpty()); /* Check contexts are considered for equality */ p2 = QContactPhoneNumber(); // new id / detach p2.setNumber(p1.number()); p2.setContexts(QContactDetail::ContextHome); QVERIFY(p1 != p2); p2.removeValue(QContactDetail::FieldContext); // note, context is a value. QVERIFY(p1 == p2); // different ids but same values should be equal /* Copy ctor from valid type */ QContactDetail f3(p2); QVERIFY(f3 == p2); QVERIFY(f3.definitionName() == QContactPhoneNumber::DefinitionName); /* Copy ctor from invalid type */ QContactPhoneNumber p3(m1); QVERIFY(p3 != m1); QVERIFY(p3.definitionName() == QContactPhoneNumber::DefinitionName); QVERIFY(p3.isEmpty()); /* Copy ctore from invalid type, through base type */ f3 = m1; QContactPhoneNumber p4(f3); QVERIFY(p4 != f3); QVERIFY(p4.definitionName() == QContactPhoneNumber::DefinitionName); QVERIFY(p4.isEmpty()); /* Try a reference */ p1.setNumber("123456"); QContactDetail& ref = p1; QVERIFY(p1.number() == "123456"); QVERIFY(p1.value(QContactPhoneNumber::FieldNumber) == "123456"); QVERIFY(ref.value(QContactPhoneNumber::FieldNumber) == "123456"); QVERIFY(p1 == ref); QVERIFY(ref == p1); /* Try changing the original */ p1.setNumber("56789"); QVERIFY(p1.number() == "56789"); QVERIFY(p1.value(QContactPhoneNumber::FieldNumber) == "56789"); QVERIFY(ref.value(QContactPhoneNumber::FieldNumber) == "56789"); QVERIFY(p1 == ref); QVERIFY(ref == p1); /* Try changing the reference */ ref.setValue(QContactPhoneNumber::FieldNumber, "654321"); QVERIFY(p1.number() == "654321"); QVERIFY(p1.value(QContactPhoneNumber::FieldNumber) == "654321"); QVERIFY(ref.value(QContactPhoneNumber::FieldNumber) == "654321"); QVERIFY(p1 == ref); QVERIFY(ref == p1); /* Random other test */ NonMacroCustomDetail md; QVERIFY(md.definitionName() == "malicious"); QVERIFY(md.setValue("key", "value")); QVERIFY(!md.isEmpty()); md.doAssign(md); // self assignment QVERIFY(!md.isEmpty()); QVERIFY(md.value("key") == "value"); QContactDetail mdv; mdv = md; QVERIFY(mdv.definitionName() == "malicious"); QVERIFY(mdv.value("key") == "value"); md = mdv; QVERIFY(md.definitionName() == "malicious"); QVERIFY(md.value("key") == "value"); NonMacroCustomDetail2 md2; QVERIFY(md2.setValue("key", "value")); QVERIFY(md2.definitionName() == "malicious"); QVERIFY(md2.value("key") == "value"); md2.doAssign(md); QVERIFY(md2 == md); md2 = md; QVERIFY(md.definitionName() == "malicious"); QVERIFY(md.value("key") == "value"); // Self assignment md2.doAssign(md2); QVERIFY(md2.definitionName() == "malicious"); QVERIFY(md2.value("key") == "value"); md.doAssign(md2); QVERIFY(md == md2); // Assigning something else QContactPhoneNumber pn; pn.setNumber("12345"); md2.doAssign(pn); QVERIFY(md2.isEmpty()); QVERIFY(md2.definitionName() == "malicious"); NonMacroCustomDetail mdb(pn); QVERIFY(mdb.isEmpty()); QVERIFY(mdb.definitionName() == "malicious"); NonMacroCustomDetail2 md2b(pn); QVERIFY(md2b.isEmpty()); QVERIFY(md2b.definitionName() == "malicious"); }