123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package ulozto
- import (
- "context"
- "errors"
- "testing"
- "time"
- "github.com/rclone/rclone/backend/ulozto/api"
- "github.com/rclone/rclone/fs"
- "github.com/rclone/rclone/fs/hash"
- "github.com/rclone/rclone/fs/operations"
- "github.com/rclone/rclone/fstest"
- "github.com/stretchr/testify/require"
- "github.com/rclone/rclone/fstest/fstests"
- )
- // TestIntegration runs integration tests against the remote
- func TestIntegration(t *testing.T) {
- fstests.Run(t, &fstests.Opt{
- RemoteName: "TestUlozto:",
- NilObject: (*Object)(nil),
- })
- }
- // TestListWithoutMetadata verifies that basic operations can be performed even if the remote file wasn't written by
- // rclone, or the serialized metadata can't be read.
- func TestListWithoutMetadata(t *testing.T) {
- const (
- remoteName = "TestUlozto:"
- payload = "42foobar42"
- sha256 = "d41f400003e93eb0891977f525e73ecedfa04272d2036f6137106168ecb196ab"
- md5 = "8ad32cfeb3dc0f5092261268f335e0a5"
- filesize = len(payload)
- )
- ctx := context.Background()
- fstest.Initialise()
- subRemoteName, subRemoteLeaf, err := fstest.RandomRemoteName(remoteName)
- require.NoError(t, err)
- f, err := fs.NewFs(ctx, subRemoteName)
- if errors.Is(err, fs.ErrorNotFoundInConfigFile) {
- t.Logf("Didn't find %q in config file - skipping tests", remoteName)
- return
- }
- require.NoError(t, err)
- file := fstest.Item{ModTime: time.UnixMilli(123456789), Path: subRemoteLeaf, Size: int64(filesize), Hashes: map[hash.Type]string{
- hash.SHA256: sha256,
- hash.MD5: md5,
- }}
- // Create a file with the given content and metadata
- obj := fstests.PutTestContents(ctx, t, f, &file, payload, false)
- // Verify the file has been uploaded
- fstest.CheckListing(t, f, []fstest.Item{file})
- // Now delete the description metadata
- uloztoObj := obj.(*Object)
- err = uloztoObj.updateFileProperties(ctx, api.UpdateDescriptionRequest{
- Description: "",
- })
- require.NoError(t, err)
- // Listing the file should still succeed, although with estimated mtime and no hashes
- fileWithoutDetails := fstest.Item{Path: subRemoteLeaf, Size: int64(filesize), ModTime: uloztoObj.remoteFsMtime, Hashes: map[hash.Type]string{
- hash.SHA256: "",
- hash.MD5: "",
- }}
- fstest.CheckListing(t, f, []fstest.Item{fileWithoutDetails})
- mtime := time.UnixMilli(987654321)
- // When we update the mtime it should be reflected but hashes should stay intact
- require.NoError(t, obj.SetModTime(ctx, mtime))
- updatedMtimeFile := fstest.Item{Path: subRemoteLeaf, Size: int64(filesize), ModTime: mtime, Hashes: map[hash.Type]string{
- hash.SHA256: "",
- hash.MD5: "",
- }}
- fstest.CheckListing(t, f, []fstest.Item{updatedMtimeFile})
- // Tear down
- require.NoError(t, operations.Purge(ctx, f, ""))
- }
|