Changeset View
Changeset View
Standalone View
Standalone View
autotests/jobremotetest.cpp
Show First 20 Lines • Show All 270 Lines • ▼ Show 20 Line(s) | 267 | { | |||
---|---|---|---|---|---|
271 | fileJob->write(data); | 271 | fileJob->write(data); | ||
272 | 272 | | |||
273 | } | 273 | } | ||
274 | 274 | | |||
275 | void JobRemoteTest::slotFileJobClose(KIO::Job *job) | 275 | void JobRemoteTest::slotFileJobClose(KIO::Job *job) | ||
276 | { | 276 | { | ||
277 | Q_UNUSED(job); | 277 | Q_UNUSED(job); | ||
278 | m_closeSignalCalled = true; | 278 | m_closeSignalCalled = true; | ||
279 | qDebug() << "+++++++++ closed"; | 279 | qDebug() << "+++++++++ filejob closed"; | ||
280 | } | 280 | } | ||
281 | 281 | | |||
282 | //// | 282 | //// | ||
283 | 283 | | |||
284 | void JobRemoteTest::openFileReading() | 284 | void JobRemoteTest::openFileReading() | ||
285 | { | 285 | { | ||
286 | QUrl u(remoteTmpUrl()); | 286 | QUrl u(remoteTmpUrl()); | ||
287 | u.setPath(u.path() + "openFileReading"); | 287 | u.setPath(u.path() + "openFileReading"); | ||
Show All 26 Lines | |||||
314 | connect(fileJob, &KIO::FileJob::data, | 314 | connect(fileJob, &KIO::FileJob::data, | ||
315 | this, &JobRemoteTest::slotFileJob2Data); | 315 | this, &JobRemoteTest::slotFileJob2Data); | ||
316 | connect(fileJob, &KIO::FileJob::open, | 316 | connect(fileJob, &KIO::FileJob::open, | ||
317 | this, &JobRemoteTest::slotFileJob2Open); | 317 | this, &JobRemoteTest::slotFileJob2Open); | ||
318 | connect(fileJob, &KIO::FileJob::written, | 318 | connect(fileJob, &KIO::FileJob::written, | ||
319 | this, &JobRemoteTest::slotFileJob2Written); | 319 | this, &JobRemoteTest::slotFileJob2Written); | ||
320 | connect(fileJob, &KIO::FileJob::position, | 320 | connect(fileJob, &KIO::FileJob::position, | ||
321 | this, &JobRemoteTest::slotFileJob2Position); | 321 | this, &JobRemoteTest::slotFileJob2Position); | ||
322 | // Can reuse this slot (same for all tests). | ||||
322 | connect(fileJob, QOverload<KIO::Job*>::of(&KIO::FileJob::close), | 323 | connect(fileJob, QOverload<KIO::Job*>::of(&KIO::FileJob::close), | ||
323 | this, &JobRemoteTest::slotFileJob2Close); | 324 | this, &JobRemoteTest::slotFileJobClose); | ||
324 | m_result = -1; | 325 | m_result = -1; | ||
325 | m_closeSignalCalled = false; | 326 | m_closeSignalCalled = false; | ||
326 | 327 | | |||
327 | enterLoop(); | 328 | enterLoop(); | ||
328 | QVERIFY(m_result == 0); // no error | 329 | QVERIFY(m_result == 0); // no error | ||
329 | QVERIFY(m_closeSignalCalled); // close signal called. | 330 | QVERIFY(m_closeSignalCalled); // close signal called. | ||
330 | qDebug() << "resulting m_data: " << QString(m_data); | 331 | qDebug() << "resulting m_data: " << QString(m_data); | ||
331 | QCOMPARE(m_data, QByteArray("test5test4test3test2test1")); | 332 | QCOMPARE(m_data, QByteArray("test5test4test3test2test1")); | ||
Show All 39 Lines | |||||
371 | 372 | | |||
372 | void JobRemoteTest::slotFileJob2Position(KIO::Job *job, KIO::filesize_t offset) | 373 | void JobRemoteTest::slotFileJob2Position(KIO::Job *job, KIO::filesize_t offset) | ||
373 | { | 374 | { | ||
374 | Q_UNUSED(job); | 375 | Q_UNUSED(job); | ||
375 | qDebug() << "position : " << offset << " -> read (5)"; | 376 | qDebug() << "position : " << offset << " -> read (5)"; | ||
376 | fileJob->read(5); | 377 | fileJob->read(5); | ||
377 | } | 378 | } | ||
378 | 379 | | |||
379 | void JobRemoteTest::slotFileJob2Close(KIO::Job *job) | | |||
380 | { | | |||
381 | Q_UNUSED(job); | | |||
382 | m_closeSignalCalled = true; | | |||
383 | qDebug() << "+++++++++ job2 closed"; | | |||
384 | } | | |||
385 | | ||||
386 | //// | 380 | //// | ||
387 | 381 | | |||
388 | void JobRemoteTest::slotMimetype(KIO::Job *job, const QString &type) | 382 | void JobRemoteTest::slotMimetype(KIO::Job *job, const QString &type) | ||
389 | { | 383 | { | ||
390 | QVERIFY(job != nullptr); | 384 | QVERIFY(job != nullptr); | ||
391 | m_mimetype = type; | 385 | m_mimetype = type; | ||
392 | } | 386 | } | ||
393 | 387 | | |||
Show All 32 Lines | 419 | connect(fileJob, &KIO::FileJob::open, | |||
426 | this, &JobRemoteTest::slotFileJob3Open); | 420 | this, &JobRemoteTest::slotFileJob3Open); | ||
427 | // Can reuse this slot (it's a noop). | 421 | // Can reuse this slot (it's a noop). | ||
428 | connect(fileJob, &KIO::FileJob::written, | 422 | connect(fileJob, &KIO::FileJob::written, | ||
429 | this, &JobRemoteTest::slotFileJob2Written); | 423 | this, &JobRemoteTest::slotFileJob2Written); | ||
430 | connect(fileJob, &KIO::FileJob::position, | 424 | connect(fileJob, &KIO::FileJob::position, | ||
431 | this, &JobRemoteTest::slotFileJob3Position); | 425 | this, &JobRemoteTest::slotFileJob3Position); | ||
432 | // Can reuse this as well. | 426 | // Can reuse this as well. | ||
433 | connect(fileJob, QOverload<KIO::Job*>::of(&KIO::FileJob::close), | 427 | connect(fileJob, QOverload<KIO::Job*>::of(&KIO::FileJob::close), | ||
434 | this, &JobRemoteTest::slotFileJob3Close); | 428 | this, &JobRemoteTest::slotFileJobClose); | ||
435 | m_result = -1; | 429 | m_result = -1; | ||
436 | m_closeSignalCalled = false; | 430 | m_closeSignalCalled = false; | ||
437 | 431 | | |||
438 | enterLoop(); | 432 | enterLoop(); | ||
439 | // Previously reading 0 bytes would cause both data() and error() being emitted... | 433 | // Previously reading 0 bytes would cause both data() and error() being emitted... | ||
440 | QVERIFY(m_result == 0); // no error | 434 | QVERIFY(m_result == 0); // no error | ||
441 | QVERIFY(m_closeSignalCalled); // close signal called. | 435 | QVERIFY(m_closeSignalCalled); // close signal called. | ||
442 | } | 436 | } | ||
Show All 13 Lines | |||||
456 | 450 | | |||
457 | void JobRemoteTest::slotFileJob3Data(KIO::Job *job, const QByteArray& data) | 451 | void JobRemoteTest::slotFileJob3Data(KIO::Job *job, const QByteArray& data) | ||
458 | { | 452 | { | ||
459 | Q_UNUSED(job); | 453 | Q_UNUSED(job); | ||
460 | QVERIFY(data.isEmpty()); | 454 | QVERIFY(data.isEmpty()); | ||
461 | fileJob->close(); | 455 | fileJob->close(); | ||
462 | } | 456 | } | ||
463 | 457 | | |||
464 | void JobRemoteTest::slotFileJob3Close(KIO::Job *job) | 458 | void JobRemoteTest::openFileTruncating() | ||
459 | { | ||||
460 | QUrl u(remoteTmpUrl()); | ||||
461 | u.setPath(u.path() + "openFileTruncating"); | ||||
462 | | ||||
463 | const QByteArray putData("test1"); | ||||
464 | | ||||
465 | KIO::StoredTransferJob *putJob = KIO::storedPut(putData, | ||||
466 | u, | ||||
467 | 0600, KIO::Overwrite | KIO::HideProgressInfo | ||||
468 | ); | ||||
469 | | ||||
470 | quint64 secsSinceEpoch = QDateTime::currentSecsSinceEpoch(); // Use second granularity, supported on all filesystems | ||||
471 | QDateTime mtime = QDateTime::fromSecsSinceEpoch(secsSinceEpoch - 30); // 30 seconds ago | ||||
472 | putJob->setModificationTime(mtime); | ||||
473 | putJob->setUiDelegate(nullptr); | ||||
474 | connect(putJob, &KJob::result, | ||||
475 | this, &JobRemoteTest::slotResult); | ||||
476 | m_result = -1; | ||||
477 | enterLoop(); | ||||
478 | QVERIFY(m_result == 0); // no error | ||||
479 | | ||||
480 | m_truncatedFile.setFileName(u.toLocalFile()); | ||||
481 | QVERIFY(m_truncatedFile.exists()); | ||||
482 | QVERIFY(m_truncatedFile.open(QIODevice::ReadOnly)); | ||||
483 | fileJob = KIO::open(u, QIODevice::ReadWrite); | ||||
484 | | ||||
485 | fileJob->setUiDelegate(nullptr); | ||||
486 | connect(fileJob, &KJob::result, | ||||
487 | this, &JobRemoteTest::slotResult); | ||||
488 | connect(fileJob, &KIO::FileJob::open, | ||||
489 | this, &JobRemoteTest::slotFileJob4Open); | ||||
490 | connect(fileJob, &KIO::FileJob::truncated, | ||||
491 | this, &JobRemoteTest::slotFileJob4Truncated); | ||||
492 | // Can reuse this slot (same for all tests). | ||||
493 | connect(fileJob, QOverload<KIO::Job*>::of(&KIO::FileJob::close), | ||||
494 | this, &JobRemoteTest::slotFileJobClose); | ||||
495 | m_result = -1; | ||||
496 | m_closeSignalCalled = false; | ||||
497 | | ||||
498 | enterLoop(); | ||||
499 | QVERIFY(m_result == 0); // no error | ||||
500 | QVERIFY(m_closeSignalCalled); // close signal called. | ||||
501 | } | ||||
502 | | ||||
503 | void JobRemoteTest::slotFileJob4Open(KIO::Job *job) | ||||
465 | { | 504 | { | ||
466 | Q_UNUSED(job); | 505 | Q_UNUSED(job); | ||
467 | m_closeSignalCalled = true; | 506 | fileJob->truncate(10); | ||
468 | qDebug() << "+++++++++ job2 closed"; | 507 | qDebug() << "Truncating file to 10"; | ||
508 | } | ||||
509 | | ||||
510 | void JobRemoteTest::slotFileJob4Truncated(KIO::Job *job, KIO::filesize_t length) | ||||
511 | { | ||||
512 | Q_UNUSED(job); | ||||
513 | if(length == 10) { | ||||
514 | m_truncatedFile.seek(0); | ||||
515 | QCOMPARE(m_truncatedFile.readAll(), QByteArray("test1\x00\x00\x00\x00\x00", 10)); | ||||
516 | fileJob->truncate(4); | ||||
517 | qDebug() << "Truncating file to 4"; | ||||
518 | } else if(length == 4) { | ||||
519 | m_truncatedFile.seek(0); | ||||
520 | QCOMPARE(m_truncatedFile.readAll(), QByteArray("test")); | ||||
521 | fileJob->truncate(0); | ||||
522 | qDebug() << "Truncating file to 0"; | ||||
523 | } else { | ||||
524 | m_truncatedFile.seek(0); | ||||
525 | QCOMPARE(m_truncatedFile.readAll(), QByteArray()); | ||||
526 | fileJob->close(); | ||||
527 | qDebug() << "Truncating file finished"; | ||||
528 | } | ||||
469 | } | 529 | } |