File indexing completed on 2024-04-28 16:08:21

0001 /*
0002     SPDX-FileCopyrightText: 2006 Richard Lärkäng <nouseforaname@home.se>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 
0008 #include "asyncmusicbrainztest.h"
0009 #include "libkcddb/cache.h"
0010 #include "libkcddb/lookup.h"
0011 #include "config-musicbrainz.h"
0012 #include <QTest>
0013 
0014 void AsyncMusicBrainzTest::testLookup()
0015 {
0016   using namespace KCDDB;
0017 
0018 #ifndef HAVE_MUSICBRAINZ5
0019   QSKIP("This test requires libmusicbrainz", SkipAll);
0020 #endif
0021 
0022   client_ = new Client;
0023   client_->config().setCacheLookupEnabled(false);
0024   client_->config().setFreedbLookupEnabled(false);
0025   client_->config().setMusicBrainzLookupEnabled(true);
0026   client_->setBlockingMode( false );
0027 
0028   connect(client_,&KCDDB::Client::finished,this, &AsyncMusicBrainzTest::slotFinished);
0029 
0030   TrackOffsetList list;
0031 
0032   // Various Artists / Definitivt 50 Spänn 10
0033   list
0034     << 150
0035     << 17130
0036     << 26340
0037     << 44855
0038     << 60530
0039     << 75800
0040     << 90182
0041     << 106605
0042     << 122995
0043     << 139005
0044     << 153317
0045     << 167967
0046     << 179012
0047     << 190190
0048     << 202162
0049     << 211312
0050     << 229037
0051     << 240035;
0052 
0053   client_->lookup(list);
0054 
0055   m_eventLoop.exec(QEventLoop::ExcludeUserInputEvents);
0056 
0057   QVERIFY(m_result == Success);
0058 
0059   // See https://musicbrainz.org/release/dbb3e39a-4bea-4e32-a546-456654f30ca6.html for changes
0060   QCOMPARE(m_info.numberOfTracks(),17);
0061 
0062   QCOMPARE(m_info.get(Artist).toString(),QString::fromUtf8("Various Artists"));
0063   QCOMPARE(m_info.get(Title).toString(),QString::fromUtf8("Definitivt 50 spänn 10"));
0064   // genre not really supported for musicbrainz
0065   QCOMPARE(m_info.get(Genre).toString(),QString());
0066   QCOMPARE(m_info.get(Year).toInt(),2001);
0067   QCOMPARE(m_info.track(0).get(Title).toString(),QString::fromUtf8("Uphill Struggle"));
0068   QCOMPARE(m_info.track(1).get(Title).toString(),QString::fromUtf8("Vill du bli miljonär?"));
0069   QCOMPARE(m_info.track(2).get(Title).toString(),QString::fromUtf8("Här är jag"));
0070   QCOMPARE(m_info.track(3).get(Title).toString(),QString::fromUtf8("Århundradets fest"));
0071   QCOMPARE(m_info.track(4).get(Title).toString(),QString::fromUtf8("Vem valde mittemellan"));
0072   QCOMPARE(m_info.track(5).get(Title).toString(),QString::fromUtf8("Hippieambulansen"));
0073   QCOMPARE(m_info.track(6).get(Title).toString(),QString::fromUtf8("Jonsson"));
0074   QCOMPARE(m_info.track(7).get(Title).toString(),QString::fromUtf8("Jag lämnar filmen"));
0075   QCOMPARE(m_info.track(8).get(Title).toString(),QString::fromUtf8("39 Steg"));
0076   QCOMPARE(m_info.track(9).get(Title).toString(),QString::fromUtf8("Lyckliga land"));
0077   QCOMPARE(m_info.track(10).get(Title).toString(),QString::fromUtf8("Helpless"));
0078   QCOMPARE(m_info.track(11).get(Title).toString(),QString::fromUtf8("Tunna skivor"));
0079   QCOMPARE(m_info.track(12).get(Title).toString(),QString::fromUtf8("God läskeblask"));
0080   QCOMPARE(m_info.track(13).get(Title).toString(),QString::fromUtf8("Hur snygg é du då?"));
0081   QCOMPARE(m_info.track(14).get(Title).toString(),QString::fromUtf8("Självupptagen"));
0082   QCOMPARE(m_info.track(15).get(Title).toString(),QString::fromUtf8("Sound Is Compressed; Words Rebel and Hiss"));
0083   QCOMPARE(m_info.track(16).get(Title).toString(),QString::fromUtf8("Vi är på väg"));
0084   QCOMPARE(m_info.track(0).get(Artist).toString(),QString::fromUtf8("Adhesive"));
0085   QCOMPARE(m_info.track(1).get(Artist).toString(),QString::fromUtf8("Troublemakers"));
0086   QCOMPARE(m_info.track(2).get(Artist).toString(),QString::fromUtf8("Mimikry"));
0087   QCOMPARE(m_info.track(3).get(Artist).toString(),QString::fromUtf8("Lundberg & Dellamorte"));
0088   QCOMPARE(m_info.track(4).get(Artist).toString(),QString::fromUtf8("Charta 77"));
0089   QCOMPARE(m_info.track(5).get(Artist).toString(),QString::fromUtf8("UBBA"));
0090   QCOMPARE(m_info.track(6).get(Artist).toString(),QString::fromUtf8("Coca Carola"));
0091   QCOMPARE(m_info.track(7).get(Artist).toString(),QString::fromUtf8("Spoiler"));
0092   QCOMPARE(m_info.track(8).get(Artist).toString(),QString::fromUtf8("Strebers"));
0093   QCOMPARE(m_info.track(9).get(Artist).toString(),QString::fromUtf8("Iguana Party"));
0094   QCOMPARE(m_info.track(10).get(Artist).toString(),QString::fromUtf8("Stoned"));
0095   QCOMPARE(m_info.track(11).get(Artist).toString(),QString::fromUtf8("Per Bertil Birgers orkester"));
0096   QCOMPARE(m_info.track(12).get(Artist).toString(),QString::fromUtf8("Slutstation Tjernobyl"));
0097   QCOMPARE(m_info.track(13).get(Artist).toString(),QString::fromUtf8("SBD"));
0098   QCOMPARE(m_info.track(14).get(Artist).toString(),QString::fromUtf8("Skumdum"));
0099   QCOMPARE(m_info.track(15).get(Artist).toString(),QString::fromUtf8("Text"));
0100   QCOMPARE(m_info.track(16).get(Artist).toString(),QString::fromUtf8("Ohlson Har Semester Production"));
0101   // comments not supported in a simple way
0102   for (int j=0; j < 17; j++)
0103     QCOMPARE(m_info.track(j).get(Comment).toString(),QString());
0104 
0105   // Make sure it's the same when loaded from the cache again
0106   client_->config().setCacheLookupEnabled(true);
0107   client_->config().setFreedbLookupEnabled(false);
0108   client_->config().setMusicBrainzLookupEnabled(false);
0109   client_->setBlockingMode(true);
0110 
0111   client_->lookup(list);
0112 
0113   CDInfoList response = client_->lookupResponse();
0114   QVERIFY(response.count() > 0);
0115 
0116   CDInfo cacheInfo(response.first());
0117   QCOMPARE(m_info.get(Artist).toString(),cacheInfo.get(Artist).toString());
0118   QCOMPARE(m_info.get(Title).toString(),cacheInfo.get(Title).toString());
0119   QCOMPARE(m_info.get(Year).toInt(),cacheInfo.get(Year).toInt());
0120   for (int j=0; j < 17; j++)
0121   {
0122     QCOMPARE(m_info.track(j).get(Title).toString(),cacheInfo.track(j).get(Title).toString());
0123     QCOMPARE(m_info.track(j).get(Comment).toString(),cacheInfo.track(j).get(Comment).toString());
0124   }
0125 
0126   // Try to provoke crashes (see bug 336678):
0127   client_->config().setCacheLookupEnabled(false);
0128   client_->config().setFreedbLookupEnabled(false);
0129   client_->config().setMusicBrainzLookupEnabled(true);
0130   client_->setBlockingMode( false );
0131 
0132   qDebug() << "Trying to crash AsyncMusicBrainzLookup by starting multiple lookups";
0133   client_->lookup(list);
0134   client_->lookup(list);
0135   m_eventLoop.exec(QEventLoop::ExcludeUserInputEvents);
0136 
0137   qDebug() << "Trying to crash AsyncMusicBrainzLookup by deleting object while lookup is still in progress";
0138   client_->lookup(list);
0139   delete client_;
0140 }
0141 
0142 void AsyncMusicBrainzTest::slotFinished(Result r)
0143 {
0144   m_result = r;
0145   qDebug() << ": Got " << KCDDB::resultToString(r);
0146 
0147   CDInfoList l = client_->lookupResponse();
0148 
0149   qDebug() << ": Item count: " <<  l.count();
0150 
0151   QVERIFY(l.count() > 0);
0152   m_info = l.first();
0153 
0154   m_eventLoop.quit();
0155 }
0156 
0157 QTEST_GUILESS_MAIN(AsyncMusicBrainzTest)
0158 
0159 #include "moc_asyncmusicbrainztest.cpp"