mirror of
https://github.com/henrybear327/Proton-API-Bridge.git
synced 2026-01-15 18:48:26 -05:00
The Proton-API-Bridge should not be attempting to take over, nor re-define, the existing proton-go-api interfaces. This is known has an "unfriendly fork" and increases the overall complexity of maintaining the Proton-API-Bridge. All changes to the proton-go-api should be done as "friendly" as possible, and should be submitted back upstream for inclusion. This improves the functionality of the proton-go-api for more than just 1 project, and it reduces the long-term maintenance required for Proton-API-Bridge. To this end, Proton-API-Bridge should be written to always assume it is using github.com/ProtonMail/proton-go-api and leverage the `replace` operation in go.mod in order to leverage our "friendly fork" of proton-go-api. I.e. the long-term goal should be to _not_ maintain a fork of proton-go-api. > Anything else would be uncivilized.
459 lines
21 KiB
Go
459 lines
21 KiB
Go
package proton_api_bridge
|
|
|
|
import (
|
|
"log"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/ProtonMail/go-proton-api"
|
|
)
|
|
|
|
func TestCreateAndDeleteFolder(t *testing.T) {
|
|
ctx, cancel, protonDrive := setup(t, false)
|
|
t.Cleanup(func() {
|
|
defer cancel()
|
|
defer tearDown(t, ctx, protonDrive)
|
|
})
|
|
|
|
log.Println("Create a folder tmp at root")
|
|
createFolder(t, ctx, protonDrive, "", "tmp")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/tmp"})
|
|
|
|
log.Println("Delete folder tmp")
|
|
deleteBySearchingFromRoot(t, ctx, protonDrive, "tmp", true, false)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
}
|
|
|
|
func TestCreateAndCreateAndDeleteFolder(t *testing.T) {
|
|
ctx, cancel, protonDrive := setup(t, false)
|
|
t.Cleanup(func() {
|
|
defer cancel()
|
|
defer tearDown(t, ctx, protonDrive)
|
|
})
|
|
|
|
log.Println("Create a folder tmp at root")
|
|
createFolder(t, ctx, protonDrive, "", "tmp")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/tmp"})
|
|
|
|
log.Println("Create a folder tmp at root again")
|
|
createFolderExpectError(t, ctx, protonDrive, "", "tmp", proton.ErrFolderNameExist)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/tmp"})
|
|
|
|
log.Println("Delete folder tmp")
|
|
deleteBySearchingFromRoot(t, ctx, protonDrive, "tmp", true, false)
|
|
}
|
|
|
|
func TestUploadAndDownloadAndDeleteAFile(t *testing.T) {
|
|
ctx, cancel, protonDrive := setup(t, true)
|
|
t.Cleanup(func() {
|
|
defer cancel()
|
|
defer tearDown(t, ctx, protonDrive)
|
|
})
|
|
|
|
log.Println("Upload integrationTestImage.png")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage.png", 0)
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 1, 1, 0, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/integrationTestImage.png"})
|
|
downloadFile(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage.png", "")
|
|
|
|
log.Println("Delete file integrationTestImage.png")
|
|
deleteBySearchingFromRoot(t, ctx, protonDrive, "integrationTestImage.png", false, false)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
}
|
|
|
|
func TestUploadAndUploadAndDownloadAndDeleteAFile(t *testing.T) {
|
|
ctx, cancel, protonDrive := setup(t, true)
|
|
t.Cleanup(func() {
|
|
defer cancel()
|
|
defer tearDown(t, ctx, protonDrive)
|
|
})
|
|
|
|
log.Println("Upload integrationTestImage.png")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage.png", 0)
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 1, 1, 0, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/integrationTestImage.png"})
|
|
downloadFile(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage.png", "")
|
|
|
|
log.Println("Upload a new revision to replace integrationTestImage.png")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage2.png", 0) /* Add a revision */
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 2, 1, 0, 1)
|
|
downloadFile(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage2.png", "")
|
|
|
|
log.Println("Delete file integrationTestImage.png")
|
|
deleteBySearchingFromRoot(t, ctx, protonDrive, "integrationTestImage.png", false, false)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
}
|
|
|
|
func TestPartialUploadAndReuploadFailedAndDownloadAndDeleteAFile(t *testing.T) {
|
|
ctx, cancel, protonDrive := setup(t, false)
|
|
t.Cleanup(func() {
|
|
defer cancel()
|
|
defer tearDown(t, ctx, protonDrive)
|
|
})
|
|
|
|
log.Println("Create a new draft revision of integrationTestImage.png")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage.png", 1)
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 1, 0, 1, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
|
|
log.Println("Create a new draft revision of integrationTestImage.png again")
|
|
uploadFileByFilepathWithError(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage.png", 1, ErrDraftExists)
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 1, 0, 1, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
|
|
// FIXME: delete file with draft revision only
|
|
// log.Println("Delete file integrationTestImage.png")
|
|
// deleteBySearchingFromRoot(t, ctx, protonDrive, "integrationTestImage.png", false, true)
|
|
// checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
}
|
|
|
|
func TestPartialUploadAndReuploadAndDownloadAndDeleteAFile(t *testing.T) {
|
|
ctx, cancel, protonDrive := setup(t, true)
|
|
t.Cleanup(func() {
|
|
defer cancel()
|
|
defer tearDown(t, ctx, protonDrive)
|
|
})
|
|
|
|
log.Println("Create a new draft revision of integrationTestImage.png")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage.png", 1)
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 1, 0, 1, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
|
|
log.Println("Create a new draft revision of integrationTestImage.png again")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage.png", 1)
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 1, 0, 1, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
|
|
log.Println("Create a new revision and don't commit integrationTestImage.png")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage2.png", 2)
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 1, 0, 1, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
|
|
log.Println("Create a new revision and commit it to replace integrationTestImage.png")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage2.png", 0) /* Add a revision */
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 1, 1, 0, 0)
|
|
downloadFile(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage2.png", "")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/integrationTestImage.png"})
|
|
|
|
log.Println("Delete file integrationTestImage.png")
|
|
deleteBySearchingFromRoot(t, ctx, protonDrive, "integrationTestImage.png", false, false)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
}
|
|
|
|
func TestUploadAndDownloadThreeRevisionsAndDeleteAFile(t *testing.T) {
|
|
ctx, cancel, protonDrive := setup(t, true)
|
|
t.Cleanup(func() {
|
|
defer cancel()
|
|
defer tearDown(t, ctx, protonDrive)
|
|
})
|
|
|
|
log.Println("Create a new revision and commit it to replace integrationTestImage.png")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage.png", 0) /* Add a revision */
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 1, 1, 0, 0)
|
|
downloadFile(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage.png", "")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/integrationTestImage.png"})
|
|
|
|
log.Println("Create a new revision 2 and commit it to replace integrationTestImage.png")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/empty.txt", 0) /* Add a revision */
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 2, 1, 0, 1)
|
|
downloadFile(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/empty.txt", "")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/integrationTestImage.png"})
|
|
|
|
log.Println("Create a new revision 3 and commit it to replace integrationTestImage.png")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage2.png", 0) /* Add a revision */
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 3, 1, 0, 2)
|
|
downloadFile(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage2.png", "")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/integrationTestImage.png"})
|
|
|
|
log.Println("Delete file integrationTestImage.png")
|
|
deleteBySearchingFromRoot(t, ctx, protonDrive, "integrationTestImage.png", false, false)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
}
|
|
|
|
func TestPartialUploadAndReuploadAndDownloadTwiceAndDeleteAFileSmallBig(t *testing.T) {
|
|
ctx, cancel, protonDrive := setup(t, true)
|
|
t.Cleanup(func() {
|
|
defer cancel()
|
|
defer tearDown(t, ctx, protonDrive)
|
|
})
|
|
|
|
log.Println("Create a new draft revision of integrationTestImage.png")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/empty.txt", 1)
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 1, 0, 1, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
|
|
log.Println("Create a new draft revision of integrationTestImage.png again")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/empty.txt", 1)
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 1, 0, 1, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
|
|
log.Println("Create a new revision and don't commit integrationTestImage.png")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/empty.txt", 2)
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 1, 0, 1, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
|
|
log.Println("Create a new revision and commit it to replace integrationTestImage.png")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/empty.txt", 0) /* Add a revision */
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 1, 1, 0, 0)
|
|
downloadFile(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/empty.txt", "")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/integrationTestImage.png"})
|
|
|
|
log.Println("Create a new revision 2 and don't commit integrationTestImage.png")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/empty.txt", 2)
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 2, 1, 1, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/integrationTestImage.png"})
|
|
|
|
// testing the reduce new revision size
|
|
log.Println("Create a new revision 2 and commit it to replace integrationTestImage.png")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage.png", 0) /* Add a revision */
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 2, 1, 0, 1)
|
|
downloadFile(t, ctx, protonDrive, "", "integrationTestImage.png", "testcase/integrationTestImage.png", "")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/integrationTestImage.png"})
|
|
|
|
log.Println("Delete file integrationTestImage.png")
|
|
deleteBySearchingFromRoot(t, ctx, protonDrive, "integrationTestImage.png", false, false)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
}
|
|
|
|
func TestUploadAndDeleteAnEmptyFileAtRoot(t *testing.T) {
|
|
ctx, cancel, protonDrive := setup(t, false)
|
|
t.Cleanup(func() {
|
|
defer cancel()
|
|
defer tearDown(t, ctx, protonDrive)
|
|
})
|
|
|
|
log.Println("Upload empty.txt")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "empty.txt", "testcase/empty.txt", 0)
|
|
checkRevisions(protonDrive, ctx, t, "empty.txt", 1, 1, 0, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/empty.txt"})
|
|
downloadFile(t, ctx, protonDrive, "", "empty.txt", "testcase/empty.txt", "")
|
|
|
|
log.Println("Upload a new revision to replace empty.txt")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "", "empty.txt", "testcase/empty.txt", 0) /* Add a revision */
|
|
checkRevisions(protonDrive, ctx, t, "empty.txt", 2, 1, 0, 1)
|
|
downloadFile(t, ctx, protonDrive, "", "empty.txt", "testcase/empty.txt", "")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/empty.txt"})
|
|
|
|
log.Println("Delete file empty.txt")
|
|
deleteBySearchingFromRoot(t, ctx, protonDrive, "empty.txt", false, false)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
}
|
|
|
|
func TestUploadAndDownloadAndDeleteAFileAtAFolderOneLevelFromRoot(t *testing.T) {
|
|
ctx, cancel, protonDrive := setup(t, false)
|
|
t.Cleanup(func() {
|
|
defer cancel()
|
|
defer tearDown(t, ctx, protonDrive)
|
|
})
|
|
|
|
log.Println("Create folder level1")
|
|
createFolder(t, ctx, protonDrive, "", "level1")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/level1"})
|
|
|
|
log.Println("Upload integrationTestImage.png to level1")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "level1", "integrationTestImage.png", "testcase/integrationTestImage.png", 0)
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 1, 1, 0, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/level1", "/level1/integrationTestImage.png"})
|
|
downloadFile(t, ctx, protonDrive, "level1", "integrationTestImage.png", "testcase/integrationTestImage.png", "")
|
|
|
|
log.Println("Upload a new revision to replace integrationTestImage.png in level1")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "level1", "integrationTestImage.png", "testcase/integrationTestImage2.png", 0) /* Add a revision */
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 2, 1, 0, 1)
|
|
downloadFile(t, ctx, protonDrive, "level1", "integrationTestImage.png", "testcase/integrationTestImage2.png", "")
|
|
|
|
log.Println("Delete folder level1")
|
|
deleteBySearchingFromRoot(t, ctx, protonDrive, "level1", true, false)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
}
|
|
|
|
func TestCreateAndMoveAndDeleteFolder(t *testing.T) {
|
|
ctx, cancel, protonDrive := setup(t, false)
|
|
t.Cleanup(func() {
|
|
defer cancel()
|
|
defer tearDown(t, ctx, protonDrive)
|
|
})
|
|
|
|
log.Println("Create a folder src at root")
|
|
createFolder(t, ctx, protonDrive, "", "src")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/src"})
|
|
|
|
log.Println("Create a folder dst at root")
|
|
createFolder(t, ctx, protonDrive, "", "dst")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/src", "/dst"})
|
|
|
|
log.Println("Move folder src to under folder dst")
|
|
moveFolder(t, ctx, protonDrive, "src", "dst")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/dst", "/dst/src"})
|
|
|
|
log.Println("Delete folder dst")
|
|
deleteBySearchingFromRoot(t, ctx, protonDrive, "dst", true, false)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
}
|
|
|
|
func TestCreateAndMoveAndDeleteFolderWithAFile(t *testing.T) {
|
|
ctx, cancel, protonDrive := setup(t, false)
|
|
t.Cleanup(func() {
|
|
defer cancel()
|
|
defer tearDown(t, ctx, protonDrive)
|
|
})
|
|
|
|
log.Println("Create a folder src at root")
|
|
createFolder(t, ctx, protonDrive, "", "src")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/src"})
|
|
|
|
log.Println("Upload integrationTestImage.png to src")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "src", "integrationTestImage.png", "testcase/integrationTestImage.png", 0)
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 1, 1, 0, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/src", "/src/integrationTestImage.png"})
|
|
downloadFile(t, ctx, protonDrive, "src", "integrationTestImage.png", "testcase/integrationTestImage.png", "")
|
|
|
|
log.Println("Create a folder dst at root")
|
|
createFolder(t, ctx, protonDrive, "", "dst")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/src", "/src/integrationTestImage.png", "/dst"})
|
|
|
|
log.Println("Upload a new revision to replace integrationTestImage.png in src")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "src", "integrationTestImage.png", "testcase/integrationTestImage2.png", 0) /* Add a revision */
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 2, 1, 0, 1)
|
|
downloadFile(t, ctx, protonDrive, "src", "integrationTestImage.png", "testcase/integrationTestImage2.png", "")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/src", "/src/integrationTestImage.png", "/dst"})
|
|
|
|
log.Println("Move folder src to under folder dst")
|
|
moveFolder(t, ctx, protonDrive, "src", "dst")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/dst", "/dst/src", "/dst/src/integrationTestImage.png"})
|
|
|
|
log.Println("Delete folder dst")
|
|
deleteBySearchingFromRoot(t, ctx, protonDrive, "dst", true, false)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
}
|
|
|
|
func TestCreateAndMoveAndDeleteAFileOneLevelFromRoot(t *testing.T) {
|
|
ctx, cancel, protonDrive := setup(t, false)
|
|
t.Cleanup(func() {
|
|
defer cancel()
|
|
defer tearDown(t, ctx, protonDrive)
|
|
})
|
|
|
|
log.Println("Create a folder src at root")
|
|
createFolder(t, ctx, protonDrive, "", "src")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/src"})
|
|
|
|
log.Println("Upload integrationTestImage.png to src")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "src", "integrationTestImage.png", "testcase/integrationTestImage.png", 0)
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 1, 1, 0, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/src", "/src/integrationTestImage.png"})
|
|
downloadFile(t, ctx, protonDrive, "src", "integrationTestImage.png", "testcase/integrationTestImage.png", "")
|
|
|
|
log.Println("Create a folder dst at root")
|
|
createFolder(t, ctx, protonDrive, "", "dst")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/src", "/src/integrationTestImage.png", "/dst"})
|
|
|
|
log.Println("Upload a new revision to replace integrationTestImage.png in src")
|
|
uploadFileByFilepath(t, ctx, protonDrive, "src", "integrationTestImage.png", "testcase/integrationTestImage2.png", 0) /* Add a revision */
|
|
checkRevisions(protonDrive, ctx, t, "integrationTestImage.png", 2, 1, 0, 1)
|
|
downloadFile(t, ctx, protonDrive, "src", "integrationTestImage.png", "testcase/integrationTestImage2.png", "")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/src", "/src/integrationTestImage.png", "/dst"})
|
|
|
|
log.Println("Move file integrationTestImage.png to under folder dst")
|
|
moveFile(t, ctx, protonDrive, "integrationTestImage.png", "dst")
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/src", "/dst", "/dst/integrationTestImage.png"})
|
|
|
|
log.Println("Delete folder dst")
|
|
deleteBySearchingFromRoot(t, ctx, protonDrive, "dst", true, false)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/src"})
|
|
|
|
log.Println("Delete folder src")
|
|
deleteBySearchingFromRoot(t, ctx, protonDrive, "src", true, false)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
}
|
|
|
|
func TestUploadLargeNumberOfBlocks(t *testing.T) {
|
|
ctx, cancel, protonDrive := setup(t, false)
|
|
t.Cleanup(func() {
|
|
defer cancel()
|
|
defer tearDown(t, ctx, protonDrive)
|
|
})
|
|
|
|
// in order to simulate uploading large files
|
|
// we use 1KB for the UPLOAD_BLOCK_SIZE
|
|
// so a 1000KB file will generate 1000 blocks to test the uploading mechanism
|
|
// and also testing the downloading mechanism
|
|
ORIGINAL_UPLOAD_BLOCK_SIZE := UPLOAD_BLOCK_SIZE
|
|
defer func() {
|
|
UPLOAD_BLOCK_SIZE = ORIGINAL_UPLOAD_BLOCK_SIZE
|
|
}()
|
|
blocks := 100
|
|
UPLOAD_BLOCK_SIZE = 10
|
|
|
|
filename := "fileContent.txt"
|
|
file1Content := RandomString(UPLOAD_BLOCK_SIZE*blocks + 1) // intentionally make the data not aligned to a block
|
|
file1ContentReader := strings.NewReader(file1Content)
|
|
file2Content := RandomString(UPLOAD_BLOCK_SIZE*blocks + 5)
|
|
file2ContentReader := strings.NewReader(file2Content)
|
|
|
|
log.Println("Upload fileContent.txt")
|
|
uploadFileByReader(t, ctx, protonDrive, "", filename, file1ContentReader, 0)
|
|
checkRevisions(protonDrive, ctx, t, filename, 1, 1, 0, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/" + filename})
|
|
downloadFile(t, ctx, protonDrive, "", filename, "", file1Content)
|
|
|
|
log.Println("Upload a new revision to replace fileContent.txt")
|
|
uploadFileByReader(t, ctx, protonDrive, "", filename, file2ContentReader, 0)
|
|
checkRevisions(protonDrive, ctx, t, filename, 2, 1, 0, 1)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/" + filename})
|
|
downloadFile(t, ctx, protonDrive, "", filename, "", file2Content)
|
|
|
|
log.Println("Delete file fileContent.txt")
|
|
deleteBySearchingFromRoot(t, ctx, protonDrive, filename, false, false)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
}
|
|
|
|
func TestFileSeek(t *testing.T) {
|
|
ctx, cancel, protonDrive := setup(t, false)
|
|
t.Cleanup(func() {
|
|
defer cancel()
|
|
defer tearDown(t, ctx, protonDrive)
|
|
})
|
|
|
|
// in order to simulate seeking over blocks
|
|
// we use 1KB for the UPLOAD_BLOCK_SIZE
|
|
ORIGINAL_UPLOAD_BLOCK_SIZE := UPLOAD_BLOCK_SIZE
|
|
defer func() {
|
|
UPLOAD_BLOCK_SIZE = ORIGINAL_UPLOAD_BLOCK_SIZE
|
|
}()
|
|
blocks := 10
|
|
UPLOAD_BLOCK_SIZE = 10
|
|
|
|
filename := "fileContent.txt"
|
|
file1Content := RandomString(UPLOAD_BLOCK_SIZE*blocks + 5) // intentionally make the data not aligned to a block
|
|
file1ContentReader := strings.NewReader(file1Content)
|
|
|
|
log.Println("Upload fileContent.txt")
|
|
uploadFileByReader(t, ctx, protonDrive, "", filename, file1ContentReader, 0)
|
|
checkRevisions(protonDrive, ctx, t, filename, 1, 1, 0, 0)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{"/" + filename})
|
|
|
|
{
|
|
log.Println("Download fileContent.txt with offset 0")
|
|
downloadFileWithOffset(t, ctx, protonDrive, "", filename, "", file1Content, 0)
|
|
}
|
|
{
|
|
offset := int64(UPLOAD_BLOCK_SIZE)
|
|
log.Println("Download fileContent.txt with offset", offset)
|
|
downloadFileWithOffset(t, ctx, protonDrive, "", filename, "", file1Content[offset:], offset)
|
|
}
|
|
{
|
|
offset := int64(UPLOAD_BLOCK_SIZE + 5)
|
|
log.Println("Download fileContent.txt with offset", offset)
|
|
downloadFileWithOffset(t, ctx, protonDrive, "", filename, "", file1Content[offset:], offset)
|
|
}
|
|
{
|
|
offset := int64(UPLOAD_BLOCK_SIZE*blocks/2 + 3)
|
|
log.Println("Download fileContent.txt with offset", offset)
|
|
downloadFileWithOffset(t, ctx, protonDrive, "", filename, "", file1Content[offset:], offset)
|
|
}
|
|
|
|
log.Println("Delete file fileContent.txt")
|
|
deleteBySearchingFromRoot(t, ctx, protonDrive, filename, false, false)
|
|
checkActiveFileListing(t, ctx, protonDrive, []string{})
|
|
}
|