Merge lp:~jamesh/storage-provider-webdav/download-job into lp:storage-provider-webdav/devel

Proposed by James Henstridge
Status: Merged
Approved by: James Henstridge
Approved revision: 22
Merged at revision: 14
Proposed branch: lp:~jamesh/storage-provider-webdav/download-job
Merge into: lp:storage-provider-webdav/devel
Diff against target: 544 lines (+480/-1)
5 files modified
src/CMakeLists.txt (+1/-0)
src/DavDownloadJob.cpp (+183/-0)
src/DavDownloadJob.h (+51/-0)
src/DavProvider.cpp (+5/-0)
tests/davprovider/davprovider_test.cpp (+240/-1)
To merge this branch: bzr merge lp:~jamesh/storage-provider-webdav/download-job
Reviewer Review Type Date Requested Status
unity-api-1-bot continuous-integration Approve
Michi Henning (community) Approve
Review via email: mp+310275@code.launchpad.net

Commit message

Implement download() D-Bus method.

Description of the change

Implement download() d-bus method.

To post a comment you must log in.
Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

FAILED: Continuous integration, rev:16
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/15/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build/1023/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/1030
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/821
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/821/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/821
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/821/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/821
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/821/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/821/console
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/821/console
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/821/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/821
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/821/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/821
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/821/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/821/console

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/15/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

FAILED: Continuous integration, rev:17
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/16/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build/1024/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/1031
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/822
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/822/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/822
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/822/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/822
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/822/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/822/console
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/822/console
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/822/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/822
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/822/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/822
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/822/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/822
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/822/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/16/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

FAILED: Continuous integration, rev:17
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/17/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build/1030/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/1037
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/828
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/828/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/828/console
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/828/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/828
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/828/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/828
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/828/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/828
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/828/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/828
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/828/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/828
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/828/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/828
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/828/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/17/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

FAILED: Continuous integration, rev:19
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/18/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build/1031/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/1038
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/829
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/829/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/829
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/829/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/829/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/829
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/829/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/829
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/829/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/829
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/829/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/829
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/829/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/829/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/829
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/829/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/18/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

PASSED: Continuous integration, rev:20
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/19/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build/1032
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/1039
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/830
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/830/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/830
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/830/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/830
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/830/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/830
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/830/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/830
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/830/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/830
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/830/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/830
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/830/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/830
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/830/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/830
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/830/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/19/rebuild

review: Approve (continuous-integration)
Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

FAILED: Continuous integration, rev:21
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/20/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build/1033/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/1040
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/831
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/831/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/831
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/831/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/831
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/831/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/831
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/831/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/831/console
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/831/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/831
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/831/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/831
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/831/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/831
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/831/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/20/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

PASSED: Continuous integration, rev:21
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/21/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build/1034
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/1041
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/832
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/832/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/832
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/832/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/832
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/832/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/832
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/832/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/832
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/832/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/832
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/832/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/832
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/832/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/832
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/832/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/832
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/832/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/21/rebuild

review: Approve (continuous-integration)
Revision history for this message
Michi Henning (michihenning) wrote :

This looks good! My only request is to add a test that compares the actually read contents with the expected contents (instead of comparing only the size). Without this, we have no guarantee that the data was read actually matches.

review: Approve
Revision history for this message
Michi Henning (michihenning) wrote :

Loverly, thanks! :-)

review: Approve
Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

FAILED: Continuous integration, rev:22
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/22/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build/1038/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/1045
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/836
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/836/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/836
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/836/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/836/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/836
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/836/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/836
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/836/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/836
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/836/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/836
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/836/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/836
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/836/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/836
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/836/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/22/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

FAILED: Autolanding.
More details in the following jenkins job:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-autoland/11/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build/1039/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/1046
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/837
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/837/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/837
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/837/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/837
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/837/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/837
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/837/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/837/console
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/837/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/837
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/837/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/837
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/837/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/837
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/837/artifact/output/*zip*/output.zip

review: Needs Fixing (continuous-integration)
Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

FAILED: Autolanding.
More details in the following jenkins job:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-autoland/12/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build/1040/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/1047
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/838
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/838/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/838
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/838/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/838
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/838/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/838
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/838/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/838/console
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/838/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/838
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/838/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/838
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/838/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/838
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/838/artifact/output/*zip*/output.zip

review: Needs Fixing (continuous-integration)
Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

FAILED: Autolanding.
More details in the following jenkins job:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-autoland/13/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build/1041/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/1048
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/839
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/839/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/839
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/839/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/839
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/839/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/839
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/839/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/839/console
    FAILURE: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/839/console
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/839
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/839/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/839
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/839/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/839
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/839/artifact/output/*zip*/output.zip

review: Needs Fixing (continuous-integration)
Revision history for this message
unity-api-1-bot (unity-api-1-bot) :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/CMakeLists.txt'
--- src/CMakeLists.txt 2016-10-31 07:33:19 +0000
+++ src/CMakeLists.txt 2016-11-10 07:22:07 +0000
@@ -1,6 +1,7 @@
11
2add_library(dav-provider-lib STATIC2add_library(dav-provider-lib STATIC
3 DavProvider.cpp3 DavProvider.cpp
4 DavDownloadJob.cpp
4 DavUploadJob.cpp5 DavUploadJob.cpp
5 MultiStatusParser.cpp6 MultiStatusParser.cpp
6 item_id.cpp7 item_id.cpp
78
=== added file 'src/DavDownloadJob.cpp'
--- src/DavDownloadJob.cpp 1970-01-01 00:00:00 +0000
+++ src/DavDownloadJob.cpp 2016-11-10 07:22:07 +0000
@@ -0,0 +1,183 @@
1#include "DavDownloadJob.h"
2#include "DavProvider.h"
3#include "RetrieveMetadataHandler.h"
4#include "item_id.h"
5
6#include <unity/storage/provider/Exceptions.h>
7#include <unity/storage/provider/metadata_keys.h>
8
9#include <unistd.h>
10#include <cassert>
11#include <cstdint>
12#include <string>
13
14using namespace std;
15using namespace unity::storage::provider;
16using unity::storage::ItemType;
17
18namespace
19{
20
21string make_download_id()
22{
23 static int counter = 0;
24 return to_string(counter++);
25}
26
27constexpr int CHUNK_SIZE = 64 * 1024;
28
29}
30
31DavDownloadJob::DavDownloadJob(DavProvider const& provider,
32 string const& item_id,
33 string const& match_etag,
34 Context const& ctx)
35 : QObject(), DownloadJob(make_download_id()), provider_(provider),
36 item_id_(item_id)
37{
38 QUrl base_url = provider.base_url(ctx);
39 QNetworkRequest request(id_to_url(item_id, base_url));
40 if (!match_etag.empty())
41 {
42 request.setRawHeader(QByteArrayLiteral("If-Match"),
43 QByteArray::fromStdString(match_etag));
44 }
45
46 reply_ = provider.send_request(
47 request, QByteArrayLiteral("GET"), nullptr, ctx);
48 assert(reply_ != nullptr);
49 reply_->setReadBufferSize(CHUNK_SIZE);
50 connect(reply_, &QNetworkReply::finished,
51 this, &DavDownloadJob::onReplyFinished);
52 connect(reply_, &QIODevice::readyRead,
53 this, &DavDownloadJob::onReplyReadyRead);
54 connect(reply_, &QIODevice::readChannelFinished,
55 this, &DavDownloadJob::onReplyReadChannelFinished);
56 writer_.setSocketDescriptor(
57 dup(write_socket()), QLocalSocket::ConnectedState, QIODevice::WriteOnly);
58 connect(&writer_, &QIODevice::bytesWritten,
59 this, &DavDownloadJob::onSocketBytesWritten);
60}
61
62DavDownloadJob::~DavDownloadJob()
63{
64 if (!reply_.isNull())
65 {
66 reply_->deleteLater();
67 }
68}
69
70void DavDownloadJob::onReplyFinished()
71{
72 // If we haven't seen HTTP response headers and are in an error
73 // state, report that.
74 if (!seen_header_ && reply_->error() != QNetworkReply::NoError)
75 {
76 handle_error(RemoteCommsException("Error connecting to server: " +
77 reply_->errorString().toStdString()));
78 }
79}
80
81void DavDownloadJob::onReplyReadyRead()
82{
83 if (error_)
84 {
85 return;
86 }
87
88 if (!seen_header_)
89 {
90 seen_header_ = true;
91 auto status = reply_->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
92 if (status != 200)
93 {
94 handle_error(RemoteCommsException("Unexpected status code: " +
95 to_string(status)));
96 return;
97 }
98 }
99
100 maybe_send_chunk();
101}
102
103void DavDownloadJob::onReplyReadChannelFinished()
104{
105 if (error_)
106 {
107 return;
108 }
109
110 read_channel_finished_ = true;
111 maybe_send_chunk();
112}
113
114void DavDownloadJob::onSocketBytesWritten(int64_t bytes)
115{
116 if (error_)
117 {
118 return;
119 }
120
121 bytes_written_ += bytes;
122 maybe_send_chunk();
123}
124
125void DavDownloadJob::maybe_send_chunk()
126{
127 assert(bytes_written_ <= bytes_read_);
128 // If there are outstanding writes, do nothing.
129 if (bytes_written_ < bytes_read_)
130 {
131 return;
132 }
133 // If there are no bytes available, return.
134 if (reply_->bytesAvailable() == 0)
135 {
136 // If we've reached the end of the input, and all data has been
137 // written out, signal completion.
138 if (read_channel_finished_ && bytes_written_ == bytes_read_)
139 {
140 writer_.close();
141 report_complete();
142 }
143 return;
144 }
145
146 char buffer[CHUNK_SIZE];
147 int n_read = reply_->read(buffer, CHUNK_SIZE);
148 if (n_read < 0)
149 {
150 handle_error(RemoteCommsException("Failed to read from server"));
151 return;
152 }
153 bytes_read_ += n_read;
154
155 int n_written = writer_.write(buffer, n_read);
156 if (n_written < 0)
157 {
158 handle_error(ResourceException("Error writing to socket", 0));
159 return;
160 }
161}
162
163void DavDownloadJob::handle_error(StorageException const& exc)
164{
165 error_ = true;
166 reply_->close();
167 writer_.close();
168 report_error(std::make_exception_ptr(exc));
169}
170
171
172boost::future<void> DavDownloadJob::cancel()
173{
174 reply_->abort();
175 writer_.close();
176 return boost::make_ready_future();
177}
178
179boost::future<void> DavDownloadJob::finish()
180{
181 return boost::make_exceptional_future<void>(
182 LogicException("finish called before all data sent"));
183}
0184
=== added file 'src/DavDownloadJob.h'
--- src/DavDownloadJob.h 1970-01-01 00:00:00 +0000
+++ src/DavDownloadJob.h 2016-11-10 07:22:07 +0000
@@ -0,0 +1,51 @@
1#pragma once
2
3#include <QLocalSocket>
4#include <QNetworkReply>
5#include <QObject>
6#include <QPointer>
7#include <QUrl>
8#include <unity/storage/provider/Exceptions.h>
9#include <unity/storage/provider/ProviderBase.h>
10#include <unity/storage/provider/DownloadJob.h>
11
12#include <cstdint>
13#include <memory>
14#include <string>
15
16class DavProvider;
17
18class DavDownloadJob : public QObject, public unity::storage::provider::DownloadJob
19{
20 Q_OBJECT
21public:
22 DavDownloadJob(DavProvider const& provider, std::string const& item_id,
23 std::string const& match_etag,
24 unity::storage::provider::Context const& ctx);
25 ~DavDownloadJob();
26
27 boost::future<void> cancel() override;
28 boost::future<void> finish() override;
29
30private Q_SLOTS:
31 void onReplyFinished();
32 void onReplyReadyRead();
33 void onReplyReadChannelFinished();
34
35 void onSocketBytesWritten(int64_t bytes);
36
37private:
38 void maybe_send_chunk();
39 void handle_error(unity::storage::provider::StorageException const& exc);
40
41 DavProvider const& provider_;
42 std::string const item_id_;
43 QLocalSocket writer_;
44 QPointer<QNetworkReply> reply_;
45
46 bool seen_header_ = false;
47 bool error_ = false;
48 bool read_channel_finished_ = false;
49 int64_t bytes_read_ = 0;
50 int64_t bytes_written_ = 0;
51};
052
=== modified file 'src/DavProvider.cpp'
--- src/DavProvider.cpp 2016-09-30 12:41:56 +0000
+++ src/DavProvider.cpp 2016-11-10 07:22:07 +0000
@@ -4,6 +4,7 @@
4#include "ListHandler.h"4#include "ListHandler.h"
5#include "LookupHandler.h"5#include "LookupHandler.h"
6#include "MetadataHandler.h"6#include "MetadataHandler.h"
7#include "DavDownloadJob.h"
7#include "DavUploadJob.h"8#include "DavUploadJob.h"
8#include "item_id.h"9#include "item_id.h"
910
@@ -87,6 +88,10 @@
87boost::future<unique_ptr<DownloadJob>> DavProvider::download(88boost::future<unique_ptr<DownloadJob>> DavProvider::download(
88 string const& item_id, Context const& ctx)89 string const& item_id, Context const& ctx)
89{90{
91 boost::promise<unique_ptr<DownloadJob>> p;
92 p.set_value(unique_ptr<DownloadJob>(new DavDownloadJob(
93 *this, item_id, string(), ctx)));
94 return p.get_future();
90}95}
9196
92boost::future<void> DavProvider::delete_item(97boost::future<void> DavProvider::delete_item(
9398
=== modified file 'tests/davprovider/davprovider_test.cpp'
--- tests/davprovider/davprovider_test.cpp 2016-11-03 08:33:58 +0000
+++ tests/davprovider/davprovider_test.cpp 2016-11-10 07:22:07 +0000
@@ -12,6 +12,7 @@
12#include <QTemporaryDir>12#include <QTemporaryDir>
13#include <QTimer>13#include <QTimer>
14#include <unity/storage/qt/client/Account.h>14#include <unity/storage/qt/client/Account.h>
15#include <unity/storage/qt/client/Downloader.h>
15#include <unity/storage/qt/client/Exceptions.h>16#include <unity/storage/qt/client/Exceptions.h>
16#include <unity/storage/qt/client/Root.h>17#include <unity/storage/qt/client/Root.h>
17#include <unity/storage/qt/client/Uploader.h>18#include <unity/storage/qt/client/Uploader.h>
@@ -45,7 +46,7 @@
45 "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor "46 "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor "
46 "in reprehenderit in voluptate velit esse cillum dolore eu fugiat "47 "in reprehenderit in voluptate velit esse cillum dolore eu fugiat "
47 "nulla pariatur. Excepteur sint occaecat cupidatat non proident, "48 "nulla pariatur. Excepteur sint occaecat cupidatat non proident, "
48 "sunt in culpa qui officia deserunt mollit anim id est laborum.";49 "sunt in culpa qui officia deserunt mollit anim id est laborum.\n";
4950
50constexpr int SIGNAL_WAIT_TIME = 30000;51constexpr int SIGNAL_WAIT_TIME = 30000;
5152
@@ -666,6 +667,244 @@
666 }667 }
667}668}
668669
670TEST_F(DavProviderTests, download)
671{
672 int const segments = 1000;
673 string large_contents;
674 large_contents.reserve(file_contents.size() * segments);
675 for (int i = 0; i < segments; i++)
676 {
677 large_contents += file_contents;
678 }
679 string const full_path = local_file("foo.txt");
680 {
681 int fd = open(full_path.c_str(), O_WRONLY | O_CREAT | O_EXCL, 0644);
682 ASSERT_GT(fd, 0);
683 ASSERT_EQ(large_contents.size(), write(fd, &large_contents[0], large_contents.size())) << strerror(errno);
684 ASSERT_EQ(0, close(fd));
685 }
686
687 auto account = get_client();
688 shared_ptr<Root> root;
689 {
690 QFutureWatcher<QVector<shared_ptr<Root>>> watcher;
691 QSignalSpy spy(&watcher, &decltype(watcher)::finished);
692 watcher.setFuture(account->roots());
693 if (spy.count() == 0)
694 {
695 ASSERT_TRUE(spy.wait(SIGNAL_WAIT_TIME));
696 }
697 auto roots = watcher.result();
698 ASSERT_EQ(1, roots.size());
699 root = roots[0];
700 }
701
702 shared_ptr<File> file;
703 {
704 QFutureWatcher<shared_ptr<Item>> watcher;
705 QSignalSpy spy(&watcher, &decltype(watcher)::finished);
706 watcher.setFuture(root->get("foo.txt"));
707 if (spy.count() == 0)
708 {
709 ASSERT_TRUE(spy.wait(SIGNAL_WAIT_TIME));
710 }
711 file = dynamic_pointer_cast<File>(watcher.result());
712 }
713 ASSERT_NE(nullptr, file.get());
714
715 shared_ptr<Downloader> downloader;
716 {
717 QFutureWatcher<shared_ptr<Downloader>> watcher;
718 QSignalSpy spy(&watcher, &decltype(watcher)::finished);
719 watcher.setFuture(file->create_downloader());
720 if (spy.count() == 0)
721 {
722 ASSERT_TRUE(spy.wait(SIGNAL_WAIT_TIME));
723 }
724 downloader = watcher.result();
725 }
726
727 int64_t n_read = 0;
728 auto socket = downloader->socket();
729 QObject::connect(socket.get(), &QIODevice::readyRead,
730 [socket, &large_contents, &n_read]() {
731 auto bytes = socket->readAll();
732 string const expected = large_contents.substr(
733 n_read, bytes.size());
734 EXPECT_EQ(expected, bytes.toStdString());
735 n_read += bytes.size();
736 });
737 {
738 QSignalSpy spy(socket.get(), &QIODevice::readChannelFinished);
739 ASSERT_TRUE(spy.wait(SIGNAL_WAIT_TIME));
740 }
741
742 {
743 QFutureWatcher<void> watcher;
744 QSignalSpy spy(&watcher, &decltype(watcher)::finished);
745 watcher.setFuture(downloader->finish_download());
746 if (spy.count() == 0)
747 {
748 ASSERT_TRUE(spy.wait(SIGNAL_WAIT_TIME));
749 }
750 watcher.waitForFinished(); // to check for errors
751 }
752
753 EXPECT_EQ(large_contents.size(), n_read);
754}
755
756TEST_F(DavProviderTests, download_short_read)
757{
758 int const segments = 1000;
759 {
760 string full_path = local_file("foo.txt");
761 int fd = open(full_path.c_str(), O_WRONLY | O_CREAT | O_EXCL, 0644);
762 ASSERT_GT(fd, 0);
763 for (int i = 0; i < segments; i++)
764 {
765 ASSERT_EQ(file_contents.size(), write(fd, &file_contents[0], file_contents.size())) << strerror(errno);
766 }
767 ASSERT_EQ(0, close(fd));
768 }
769
770 auto account = get_client();
771 shared_ptr<Root> root;
772 {
773 QFutureWatcher<QVector<shared_ptr<Root>>> watcher;
774 QSignalSpy spy(&watcher, &decltype(watcher)::finished);
775 watcher.setFuture(account->roots());
776 if (spy.count() == 0)
777 {
778 ASSERT_TRUE(spy.wait(SIGNAL_WAIT_TIME));
779 }
780 auto roots = watcher.result();
781 ASSERT_EQ(1, roots.size());
782 root = roots[0];
783 }
784
785 shared_ptr<File> file;
786 {
787 QFutureWatcher<shared_ptr<Item>> watcher;
788 QSignalSpy spy(&watcher, &decltype(watcher)::finished);
789 watcher.setFuture(root->get("foo.txt"));
790 if (spy.count() == 0)
791 {
792 ASSERT_TRUE(spy.wait(SIGNAL_WAIT_TIME));
793 }
794 file = dynamic_pointer_cast<File>(watcher.result());
795 }
796 ASSERT_NE(nullptr, file.get());
797
798 shared_ptr<Downloader> downloader;
799 {
800 QFutureWatcher<shared_ptr<Downloader>> watcher;
801 QSignalSpy spy(&watcher, &decltype(watcher)::finished);
802 watcher.setFuture(file->create_downloader());
803 if (spy.count() == 0)
804 {
805 ASSERT_TRUE(spy.wait(SIGNAL_WAIT_TIME));
806 }
807 downloader = watcher.result();
808 }
809
810 {
811 QFutureWatcher<void> watcher;
812 QSignalSpy spy(&watcher, &decltype(watcher)::finished);
813 watcher.setFuture(downloader->finish_download());
814 if (spy.count() == 0)
815 {
816 ASSERT_TRUE(spy.wait(SIGNAL_WAIT_TIME));
817 }
818
819 try
820 {
821 watcher.waitForFinished(); // to check for errors
822 FAIL();
823 }
824 catch (LogicException const& e)
825 {
826 EXPECT_EQ("finish called before all data sent", e.error_message());
827 }
828 }
829}
830
831TEST_F(DavProviderTests, download_not_found)
832{
833 auto account = get_client();
834 make_file("foo.txt");
835
836 shared_ptr<Root> root;
837 {
838 QFutureWatcher<QVector<shared_ptr<Root>>> watcher;
839 QSignalSpy spy(&watcher, &decltype(watcher)::finished);
840 watcher.setFuture(account->roots());
841 if (spy.count() == 0)
842 {
843 ASSERT_TRUE(spy.wait(SIGNAL_WAIT_TIME));
844 }
845 auto roots = watcher.result();
846 ASSERT_EQ(1, roots.size());
847 root = roots[0];
848 }
849
850 shared_ptr<File> file;
851 {
852 QFutureWatcher<shared_ptr<Item>> watcher;
853 QSignalSpy spy(&watcher, &decltype(watcher)::finished);
854 watcher.setFuture(root->get("foo.txt"));
855 if (spy.count() == 0)
856 {
857 ASSERT_TRUE(spy.wait(SIGNAL_WAIT_TIME));
858 }
859 file = dynamic_pointer_cast<File>(watcher.result());
860 }
861 ASSERT_NE(nullptr, file.get());
862
863 ASSERT_EQ(0, unlink(local_file("foo.txt").c_str()));
864
865 shared_ptr<Downloader> downloader;
866 {
867 QFutureWatcher<shared_ptr<Downloader>> watcher;
868 QSignalSpy spy(&watcher, &decltype(watcher)::finished);
869 watcher.setFuture(file->create_downloader());
870 if (spy.count() == 0)
871 {
872 ASSERT_TRUE(spy.wait(SIGNAL_WAIT_TIME));
873 }
874 downloader = watcher.result();
875 }
876
877 auto socket = downloader->socket();
878 QObject::connect(socket.get(), &QIODevice::readyRead,
879 [socket]() {
880 socket->readAll();
881 });
882 {
883 QSignalSpy spy(socket.get(), &QIODevice::readChannelFinished);
884 ASSERT_TRUE(spy.wait(SIGNAL_WAIT_TIME));
885 }
886
887 {
888 QFutureWatcher<void> watcher;
889 QSignalSpy spy(&watcher, &decltype(watcher)::finished);
890 watcher.setFuture(downloader->finish_download());
891 if (spy.count() == 0)
892 {
893 ASSERT_TRUE(spy.wait(SIGNAL_WAIT_TIME));
894 }
895
896 try
897 {
898 watcher.waitForFinished(); // to check for errors
899 FAIL();
900 }
901 catch (RemoteCommsException const& e)
902 {
903 EXPECT_EQ("Unexpected status code: 404", e.error_message());
904 }
905 }
906}
907
669int main(int argc, char**argv)908int main(int argc, char**argv)
670{909{
671 QCoreApplication app(argc, argv);910 QCoreApplication app(argc, argv);

Subscribers

People subscribed via source and target branches