Skip to content

Terabox backend#8508

Open
x1arch wants to merge 1 commit intorclone:masterfrom
x1arch:backend/terabox
Open

Terabox backend#8508
x1arch wants to merge 1 commit intorclone:masterfrom
x1arch:backend/terabox

Conversation

@x1arch
Copy link
Copy Markdown

@x1arch x1arch commented Apr 13, 2025

What is the purpose of this change?

This is Terabox storage implementation.

This integrations is not official, because official integration required special client id and client secret which only can be provided by Terabox. I made a request for this, but did not got a response, yet. If Terabox will provide the keys for official integration, will update the integration.

This is alpha version, not finished, not all scenarios are tested.

Issues: #7496; #8507; #8356; #7244; #6904; #6122

Checklist

  • I have read the contribution guidelines.
  • I have added tests for all changes in this PR if appropriate.
  • I have added documentation for the changes if appropriate.
  • All commit messages are in house style.
  • I'm done, this Pull Request is ready for review :-)

@BenjiThatFoxGuy
Copy link
Copy Markdown

BenjiThatFoxGuy commented Apr 17, 2025

I tried the fork and it fails to list files in a mount and in rclone ls if i specify / for listing the whole terabox account, and i have to do rclone ls teraboxbackend:. to achieve that
very weird (yes i know it's a WIP, just reporting what i see in case it isn't picked up on why files don't list when someone reviews it)

@x1arch
Copy link
Copy Markdown
Author

x1arch commented Apr 18, 2025

@BenjiThatFoxGuy This is a bug of code clearance before the commit, I'll fix it.
for your local testing you can fix it by your self, just replace line 300 in the file backend/terabox/terabox.go to next line if f.root != "/" && f.origRootItem == nil { and you will get a working ls. Mount I didn't checked yet.

@fidodido48
Copy link
Copy Markdown

Been testing a bit - heres the feedback:

  • Mounting seems to be working (no errors)
  • Can create directories (no errors)
  • Can copy files to remote despite constant IO Error ("Cant close file" error on every file, but files show up on remote eventually with a bit of lag - checked both via cli/web interfaces):
WriteFileHandle.Flush error: close /home/user/terabox/.dmz/8tpms1j682t6gf4c4kdlsvsa1pggf3eg3i6faud2covctj96n1h0: input/output error
2025/04/18 11:02:10 ERROR : IO error: close /home/user/terabox/.dmz/8tpms1j682t6gf4c4kdlsvsa1pggf3eg3i6faud2covctj96n1h0: input/output error
  • Can't delete files/directories (IO Error):
2025/04/18 11:16:30 DEBUG : .dmz/fp5nffpdg3k57mg163cf8dv9g0/8t27d9orjfuvrtlrjh8kbvgjjo: >Attr: a=valid=1s ino=0 size=32 mode=-rw-r--r--, err=<nil>
2025/04/18 11:16:30 DEBUG : .dmz/fp5nffpdg3k57mg163cf8dv9g0/: Remove: name="8t27d9orjfuvrtlrjh8kbvgjjo"
2025/04/18 11:16:30 DEBUG : .dmz/fp5nffpdg3k57mg163cf8dv9g0/8t27d9orjfuvrtlrjh8kbvgjjo: Remove:
2025/04/18 11:16:30 DEBUG : .dmz/fp5nffpdg3k57mg163cf8dv9g0/8t27d9orjfuvrtlrjh8kbvgjjo: File.Remove file error: Unknown error 450016
2025/04/18 11:16:30 DEBUG : .dmz/fp5nffpdg3k57mg163cf8dv9g0/8t27d9orjfuvrtlrjh8kbvgjjo: >Remove: err=Unknown error 450016
2025/04/18 11:16:30 ERROR : IO error: Unknown error 450016
2025/04/18 11:16:30 DEBUG : .dmz/fp5nffpdg3k57mg163cf8dv9g0/: >Remove: err=Unknown error 450016

2025/04/18 11:16:30 DEBUG : TEST/: Remove: name="file2.txt"
2025/04/18 11:16:30 DEBUG : TEST/file2.txt: Remove:
2025/04/18 11:16:30 DEBUG : TEST/file2.txt: File.Remove file error: remove /home/user/terabox/.dmz/fp5nffpdg3k57mg163cf8dv9g0/8t27d9orjfuvrtlrjh8kbvgjjo: input/output error

@x1arch
Copy link
Copy Markdown
Author

x1arch commented Apr 21, 2025

@fidodido48 fixed remove and files upload.

@fidodido48
Copy link
Copy Markdown

Ive had to change crypt storage pass, so it doesn't contain special chars which was messing up data reads (Read IO Error) and now it mostly works ok, but can't delete a directory still:

2025/04/21 19:54:28 DEBUG : .dmz/: Remove: name="8mn7bk54lhf3jeffhp7hlnfmr0"
2025/04/21 19:54:28 ERROR : .dmz/8mn7bk54lhf3jeffhp7hlnfmr0/: Dir.Remove failed to remove directory: optional feature not implemented
2025/04/21 19:54:28 DEBUG : .dmz/: >Remove: err=function not implemented

Thank you.

@x1arch
Copy link
Copy Markdown
Author

x1arch commented Apr 21, 2025

@fidodido48 do you know, the rmdir - This removes empty directory given by path. Will not remove the path if it has any objects in it, not even empty subdirectories.

I did not implement this method, because I do not understand why it should be there.... Just use purge it can delete files or directories. It's not a rocket science, to make this method, but I do not understand why it should be there.

I have a lot of questions about rClone commands. And want to make a suggestion in 2.0 version implement commands from *nix, like ls (without recursive scan and it should show all the files and catalogs on requested level), rm, cp and mv which will have a predictable behavior like in Linux, BSD or OS X. This tool mainly for System Admins, whom knows this commands.

@mimi0000oo
Copy link
Copy Markdown

mimi0000oo commented Apr 23, 2025

Hey, I tested out the project right now, using the docs you added to the backend/terabox/docs/content/terabox.md.
I didn't manage to find the TSID cookie in the TeraBox website, which seems a bit wired. I've tried using the browserid and csrfToken instead but this doesn't seem to be anything related to that TSID.

I guess this way it doesn't connect to TeraBox in any way but this is the error:

[mimi07@archlinux bin]$ ./rclone lsd remote:
panic: runtime error: slice bounds out of range [:1] with length 0

goroutine 1 [running]:
github.com/rclone/rclone/backend/terabox.NewFs({0x400ee80, 0x57e4ca0}, {0x7ffddf75ea87, 0x6}, {0x7ffddf75ea87, 0x0}, {0x3ff8b28, 0xc00057e600})
	/home/mimi07/Desktop/rclone/backend/terabox/terabox.go:174 +0x585
github.com/rclone/rclone/fs.NewFs({0x400ee80, 0x57e4ca0}, {0x7ffddf75ea87, 0x7})
	/home/mimi07/Desktop/rclone/fs/newfs.go:68 +0x33c
github.com/rclone/rclone/fs/cache.GetFn.func1({0x7ffddf75ea87?, 0x100c0000659f8?})
	/home/mimi07/Desktop/rclone/fs/cache/cache.go:102 +0x38
github.com/rclone/rclone/lib/cache.(*Cache).Get(0xc00057e060, {0x7ffddf75ea87, 0x7}, 0xc000065a20)
	/home/mimi07/Desktop/rclone/lib/cache/cache.go:88 +0xe2
github.com/rclone/rclone/fs/cache.GetFn({0x400ee80, 0x57e4ca0}, {0x7ffddf75ea87, 0x7}, 0x3c87c10)
	/home/mimi07/Desktop/rclone/fs/cache/cache.go:101 +0x125
github.com/rclone/rclone/fs/cache.Get({0x400ee80, 0x57e4ca0}, {0x7ffddf75ea87, 0x7})
	/home/mimi07/Desktop/rclone/fs/cache/cache.go:182 +0x7b
github.com/rclone/rclone/cmd.NewFsFile({0x7ffddf75ea87, 0x7})
	/home/mimi07/Desktop/rclone/cmd/cmd.go:92 +0x111
github.com/rclone/rclone/cmd.newFsFileAddFilter({0x7ffddf75ea87, 0x7})
	/home/mimi07/Desktop/rclone/cmd/cmd.go:114 +0x57
github.com/rclone/rclone/cmd.NewFsSrc(...)
	/home/mimi07/Desktop/rclone/cmd/cmd.go:136
github.com/rclone/rclone/cmd/lsd.init.func1(0x55f5b40, {0xc0003d2e80, 0x1, 0x1})
	/home/mimi07/Desktop/rclone/cmd/lsd/lsd.go:60 +0x96
github.com/spf13/cobra.(*Command).execute(0x55f5b40, {0xc0003d2e30, 0x1, 0x1})
	/home/mimi07/go/pkg/mod/github.com/spf13/[email protected]/command.go:1019 +0xa7b
github.com/spf13/cobra.(*Command).ExecuteC(0x55ec6c0)
	/home/mimi07/go/pkg/mod/github.com/spf13/[email protected]/command.go:1148 +0x40c
github.com/spf13/cobra.(*Command).Execute(...)
	/home/mimi07/go/pkg/mod/github.com/spf13/[email protected]/command.go:1071
github.com/rclone/rclone/cmd.Main()
	/home/mimi07/Desktop/rclone/cmd/cmd.go:541 +0x31
main.main()
	/home/mimi07/Desktop/rclone/rclone.go:14 +0xf

Thank you for your work, i can't wait to try this when it will be released! I'll try to provide more testing for you, let me know if you have any questions.

@b0rrasca
Copy link
Copy Markdown

b0rrasca commented May 2, 2025

@x1arch out of curiosity, did you ever hear back form terabox regarding being able to authenticate using the API itself?

@fidodido48
Copy link
Copy Markdown

Uploading seems to go ok, but theres problem with downloading:

2025/05/05 02:34:59 DEBUG : mini.iso: Open: flags=OpenReadOnly+OpenNonblock+0
x20000
2025/05/05 02:34:59 DEBUG : mini.iso: Open: flags=O_RDONLY|0x20800
2025/05/05 02:34:59 DEBUG : mini.iso: >Open: fd=mini.iso (r), err=<nil>
2025/05/05 02:34:59 DEBUG : mini.iso: >Open: fh=&{mini.iso (r)}, err=<nil>
2025/05/05 02:34:59 DEBUG : mini.iso: Open: flags=OpenReadOnly
2025/05/05 02:34:59 DEBUG : mini.iso: Open: flags=O_RDONLY
2025/05/05 02:34:59 DEBUG : mini.iso: >Open: fd=mini.iso (r), err=<nil>
2025/05/05 02:34:59 DEBUG : mini.iso: >Open: fh=&{mini.iso (r)}, err=<nil>
2025/05/05 02:34:59 DEBUG : &{mini.iso (r)}: Release: 
2025/05/05 02:34:59 DEBUG : &{mini.iso (r)}: >Release: err=<nil>
2025/05/05 02:34:59 DEBUG : &{mini.iso (r)}: Flush:
2025/05/05 02:34:59 DEBUG : &{mini.iso (r)}: >Flush: err=<nil>
2025/05/05 02:34:59 DEBUG : &{mini.iso (r)}: Release: 
2025/05/05 02:34:59 DEBUG : &{mini.iso (r)}: >Release: err=<nil>
2025/05/05 02:34:59 DEBUG : mini.iso: Open: flags=OpenReadOnly
2025/05/05 02:34:59 DEBUG : mini.iso: Open: flags=O_RDONLY
2025/05/05 02:34:59 DEBUG : mini.iso: >Open: fd=mini.iso (r), err=<nil>
2025/05/05 02:34:59 DEBUG : mini.iso: >Open: fh=&{mini.iso (r)}, err=<nil>
2025/05/05 02:34:59 DEBUG : &{mini.iso (r)}: Read: len=131072, offset=0
2025/05/05 02:35:00 DEBUG : mini.iso: ChunkedReader.openRange at 0 length 134217728
2025/05/05 02:35:00 DEBUG : Response body: {"errno":12,"info":[{"errno":-9}],"request_id":8649778708818601695}
**********************************************************************************************************************
2025/05/05 02:35:01 ERROR : IO error: json: cannot unmarshal string into Go struct field .dlink.fs_id of type uint64
**********************************************************************************************************************
2025/05/05 02:35:01 DEBUG : &{mini.iso (r)}: >Read: read=0, err=json: cannot unmarshal string into Go struct field .dlink.fs_id of type uint64
2025/05/05 02:35:01 DEBUG : &{mini.iso (r)}: Read: len=4096, offset=0
2025/05/05 02:35:01 DEBUG : mini.iso: ChunkedReader.openRange at 0 length 134217728
2025/05/05 02:35:01 DEBUG : Object Open [HashesOption([]) RangeOption(0,-1)];
2025/05/05 02:35:02 DEBUG : Response body: {"errno":113,"request_id":8649779151634273614}
2025/05/05 02:35:02 ERROR : IO error: Unknown error 113
2025/05/05 02:35:02 DEBUG : &{mini.iso (r)}: >Read: read=0, err=Unknown error 113

This happens for both non-crypt & crypt and is a bit weird, cause i am able to download the file in first 10-20 secs after upload & local vfs cache gets deleted (to make sure it downloads from the server), but after that it feels like there must be some api restrictions applied resulting in those errors.

Possible solution for the error marked with the asterisks:
https://stackoverflow.com/questions/47063079/cannot-unmarshal-string-into-go-struct-field

Sys info:

rclone v1.70.0-beta.8631.9a2c795cd.backend/terabox
- os/version: arch (64 bit)
- os/kernel: 6.14.1-zen1-1-zen (x86_64)
- os/type: linux
- os/arch: amd64
- go/version: go1.24.2
- go/linking: dynamic
- go/tags: none

@x1arch
Copy link
Copy Markdown
Author

x1arch commented May 5, 2025

Sorry guys, I'm now in relocation mode and lot of working tasks have pilled up.

@mimi0000oo
I don't know why you have no TSID, as I understand other guys, who test the backend found this variable. Of course if you have no this variable, skip it, but I had errors with some operations without this variable.

I guess this way it doesn't connect to TeraBox in any way but this is the error:

I see, this error related with . path, please use /, before next commit.

@b0rrasca Not yet, I sent two letters with API client_id and client_secret requests, but still have not got any answers. You can try send a request from yourself, maybe you have more luck, than I. You need fill this form: https://www.terabox.com/integrations/contact-us?from=0

@fidodido48 the API answers, `The file doesn't exist or request parameter spd is incorrect.". What mean spd, I don't know, first part, you can understand without me. Need more debug information. How many files, file names, sizes. Try to turn on debug in config to 4 and provide full log upload and download.

In theory, if it available in first 20 seconds to download, then file was upload successfully, this could be some Terabox limitations. Earlier, on Terabox website, in comparison tariffs you could saw number of files limitations, but now it has no any more. But new limitation added, you can download only 1 file per time, maybe this is it?

@fidodido48
Copy link
Copy Markdown

I also couldnt find the TSID var. Could this be the culprit of the errors then?

Available cookies:

_ndus 
browserid 
lang 
__bid_n 
csrfToken 
ab_ymg_result 
ndut_fmt 
__stripe_mid_ 

Ive used csrfToken which seemed to logged me successfully so i didn't dwell on it, but maybe that's the issue here.

@x1arch Are you not getting those errors? Can you upload/download successfully for both non-crypt & crypt?

UPDATE:
So after a bit of more testing it seems i can download .txt and .mp4 from non-crypt (terabox:/) remote no problem, but anything that is encrypted/compressed (.zip/.img/.iso/etc.) is being blocked by the api.

I cant download anything for crypt (terabox_crypt:/) tho, not even .txt and .mp4.

@mimi0000oo
Copy link
Copy Markdown

@fidodido48 yea, that's basically the same scenario that i have.

can you please share the cookie that worked for you?

@BenjiThatFoxGuy
Copy link
Copy Markdown

BenjiThatFoxGuy commented May 6, 2025

Hello. To configure the backend I just use https://cookie-editor.com/ on terabox and export as "Header String".
If your account has access to their AI thing, just make sure to click "My Cloud" on the sidebar before exporting the cookies, just in case.
It gives you multiple cookies in a oneliner, paste the whole thing while configuring the backend and it just works.

@x1arch
Copy link
Copy Markdown
Author

x1arch commented May 6, 2025

@fidodido48 @mimi0000oo Here is instruction:

To configure an Terabox backend you need provide cookie from your logined account. Three variables need to be provided TSID, ndus, ndut_fmt separated by semicolon.

How to obtain the cookie:

For Chrome dev variant you can take full cookie string (with other variables), and add it to config.

I have no any problems with download crypted or any other files, I upload and download any files. I didn't check rclone crypt, but I was upload and download crypted/binary/text files without problems.

@fidodido48
Copy link
Copy Markdown

I think i know what's going on now.

The errors I've been getting are related to a mounted(!) remote:

$HOME/go/bin/rclone -vvv --terabox-debug-level 4 --cache-workers=8 --cache-writes --vfs-cache-mode writes --terabox-delete-permanently --vfs-cache-max-age=1m --poll-interval=1m mount terabox:/ terabox

Using Midnight Commander file manager to download files (only) on a mounted remote results in this happening in most cases:

2025/05/07 16:30:28 DEBUG : &{u5o6sqc9l8o6s1o46kmjl4j4r110ho568paknejr90bess3qv3ro4aj3bj6mb8mg22qgrefr9l954: (r)}: >Read: read=0, err=json: cannot unmarshal string into Go struct field .dlink.fs_id of type uint64
2025/05/07 16:31:55 DEBUG : Response body: {"errno":12,"info":[{"errno":-7}],"request_id":8709643768103951960}
2025/05/07 16:31:55 DEBUG : Response body: {"errno":113,"request_id":8709643846570462917}
2025/05/07 16:31:55 ERROR : IO error: Unknown error 113

Uploading (via mc) on the other hand, works fine as i can download the file via web interface, decrypt it and do stuff with the file.

@x1arch Funny thing is that everything works good whenever i DON'T use mount, so there might be a bug somewhere in mount function (json "cant unmarshal" error probably ends up with invalid path/filename requested from the server, so it can't find the file (errno "-7")). This doesn't happend when i skip mount.

Can anyone test file operations on a mounted remote using mc for example?

(@mimi0000oo: here's your cookie answer too)
As for the TSID, i think your docs guide is misinformative as already 2 people told you they don't have such key/cookie. I think it would be best to update the docs by saying "Copy whatever Cookie key/value found in the Request headers of Developer tools and use it". Ive checked it again like you said (just to be sure), and the format used by the browser in my case is:

Cookie: browserid=xxx; lang=xx; __bid_n=xxx; csrfToken=xxx; ab_ymg_result={"data":"xxx","key_id":"xx","sign":"xxx"}; __stripe_mid=xxx; __stripe_sid=xxx; ndus=xxx; ndut_fmt=xxx

Anyways, the most important thing is it works (when not using mount) finally.

@b0rrasca
Copy link
Copy Markdown

b0rrasca commented May 8, 2025

Just chiming in to confirm another case of NOT having TSID. Using chrome dev tools.

@seiya-git
Copy link
Copy Markdown

seiya-git commented May 9, 2025

Only "ndus=Y..." and "lang=en" cookie is needed, other cookies not required for their api, one thing only needed for some methods it's get jsToken from https://www.terabox.com/main

also for premium users terabox allow upload files up to 128GB, you need calculate chunk size based on filesize:
https://github.com/seiya-npm/terabox-api/blob/master/helper.js#L10

@fidodido48
Copy link
Copy Markdown

@seiya-git I've pasted whole cookie (like a browser does) just to be on a safe side.

UPDATE:
So apparently they don't like heavy API usage. After uploading ~200-250gb over 2 days and treating their storage like a network drive i started to see jsToken not found errors and it seems to be caused by unresolved captcha (see the log file attached). I used a for loop, so the files were uploaded 1-by-1 instead of multiple at once (to not hammer their API/bw too much). This restricts any changes to the account storage apart from downloading.

Terabox backend needs to automatically support jsToken/Cookie refreshing (and captcha resolving), otherwise its almost unusable (only downloading is possible via API, forget about mounted remote file management).

On a free account, file upload is limited to 1,5-3mb/s per file, altho rclone can upload 4-5 simultaneously so one can do ~10mb/s. This is slower than the web interface, where i'm able to do ~12mb/s per 1 file only.

Also theres a minor issue with free space reporting:

Total:   1 TiB
Used:    492.155 GiB
Free:    1 TiB

rclone_jsToken_err.log

@seiya-git
Copy link
Copy Markdown

seiya-git commented May 10, 2025

@fidodido48 probably because of user agent, I use Terabox PC user client:

terabox;1.37.0.7;PC;PC-Windows;10.0.22631;WindowsTeraBox

And web interface uses threaded chunks upload

@fidodido48
Copy link
Copy Markdown

@seiya-git Yes, it's just as simple as changing U/A to avoid captcha at all. It seems they base on just this with their rate/limiting. Im switching between Terabox backend default U/A and your one whenever i need to and it allows me to keep going. Thanks.
This switch should be the default terabox backend action to handle jstoken/captcha errors.

As for the transfers...
Sadly, nor --multi-thread-streams or --drive-chunk-size seem to increase single file upload speed for me. Would probably need somebody to do a bit js reverse-engineering to implement an interal option switch just for the purpose of this backend (IE. filen.io backend offers their own: --filen-max-download-threads = 5 --filen-max-download-threads-per-file = 5).

Good thing is at least --transfers works fine. I've achieved my max upload saturation (19mb/s) using: --multi-thread-streams 8 --transfers 6
(tried --transfers 8, but it triggered captcha, even with the official app U/A).

@b0rrasca b0rrasca mentioned this pull request May 30, 2025
@x1arch x1arch force-pushed the backend/terabox branch from 9a2c795 to 8c6902e Compare June 13, 2025 19:46
@x1arch
Copy link
Copy Markdown
Author

x1arch commented Jun 13, 2025

Branch updated:

  • fixed free space reporting (the server returns a free value equal to the total, added manual calculation)
  • fixed empty path issue
  • updated UserAgent
  • updated cookie setting, for now it is allow to provide only ndus value
  • added reupload chunk if server's MD5 not equal to our MD5
  • added retry file create if file create request is failed (faced a few times with SSL handshake timeouts)
  • added final hash check when the file upload finished.

@URenko
Copy link
Copy Markdown
Contributor

URenko commented Jun 14, 2025

Thanks for your fix!
But names like abc:xyz still don't work, e.g.:

$ ./rclone lsl --max-depth 1 abc:xyz -vvv
2025/06/14 …… DEBUG : rclone: Version "v1.70.0-beta.xxx.backend/terabox" starting with parameters ["./rclone" "lsl" "--max-depth" "1" "abc:xyz" "-vvv"]
2025/06/14 …… DEBUG : Creating backend with remote "abc:xyz"
2025/06/14 …… DEBUG : Using config file from "……"
2025/06/14 …… DEBUG : NewFS abc; xyz; ……
2025/06/14 …… CRITICAL: Failed to create file system for "abc:xyz": Invalid file name

Only abc:/xyz can work

@x1arch
Copy link
Copy Markdown
Author

x1arch commented Jun 14, 2025

But names like abc:xyz still don't work, e.g.:

Yeah, I already faced yesterday with this issue, while checking the mount, fixed it. It because terabox can't find file in root, if file name not starts from / (mount case), but can recognize file with path, like text/ts1500 - works, ts1500 - not works.

After the fix, I have interesting side effect, when I mount terabox backend, the rclone try to start automatically download random file. Early, when name was without / and download not works, rclone tried download a few files and then show you files list, but now it starting download and freezing. Oo

One more thing I getting lots of net/http: TLS handshake timeout errors.

UPDATE:
Looks like this is OS "feature", Nautilus (Files) on Ubuntu and Explorer on Windows pre-download a part of file, https://forum.rclone.org/t/can-rclone-pre-download-files-on-mount/36250. Midnight Commander (MC) do not pre-download a part of file and works correct with the mount now. Will try to fix it.

@x1arch
Copy link
Copy Markdown
Author

x1arch commented Dec 20, 2025

@ameer1234567890 one more time, please use -vvvvvvv --dump responses --dump bodies optional could add --dump headers, but in this case, don't forget remove your ndus from log.

this:

2025/12/20 09:58:06 ERROR : ... : Couldn't move: couldn't move file: System Error

or this:

Terabox root '...': not deleting directories as there were IO errors

Do not contains enough information for debug. I never faced with IO error for delete, one more interesting thing usually second try is success, you got 3 failed responses. Not sure it it related with the driver. Before you got system error, that's unusual.

If this is not repeatable error, I can't fix it, Because that's could be related wit your ISP, Terabox regional infrastructure or some third party services, like ddos protectors or firewalls, if we know conditions when it happens, we can fix it.

@ameer1234567890
Copy link
Copy Markdown
Contributor

I haven't had an error for the last 3 days. I am starting to guess that the issue has somehow disappeared. It would well be an issue with Terabox itself. So, ... Let's consider it fixed.

@GwynethLlewelyn
Copy link
Copy Markdown

For what's worth, I've tested this PR merged with the current code, both under linux/amd64 as well as darwin/arm64 and it works flawlessly. Well done!

The only issue right now is the insane amount of time it takes to download anything from Terabox, but I understand that this is all deliberately throttled by them and not an issue with your rclone backend at all.

@x1arch
Copy link
Copy Markdown
Author

x1arch commented Dec 31, 2025

@GwynethLlewelyn You could take a Premium. Pay or if you have enough time, win in embedded app games. It's increase speed.

@roucc
Copy link
Copy Markdown
Member

roucc commented Jan 6, 2026

Can you show the result of the test_all tests please. If it looks good are we ready to merge?

@x1arch
Copy link
Copy Markdown
Author

x1arch commented Jan 6, 2026

Can you show the result of the test_all tests please. If it looks good are we ready to merge?

Here: #8508 (comment) in Tests section

@erictroebs
Copy link
Copy Markdown

Here: #8508 (comment) in Tests section

Your latest commit is dated Dec. 8, whereas the referenced test execution is dated Dec. 7?

@x1arch
Copy link
Copy Markdown
Author

x1arch commented Jan 8, 2026

Here: #8508 (comment) in Tests section

Your latest commit is dated Dec. 8, whereas the referenced test execution is dated Dec. 7?

Yea, this was a fix for the very specific (exotic) case, which not covered by the tests. This case only for people from specific locations, most users will never face with this.

I have a request for documentation fix (#8508 (comment)), after that do I need publish a new test result?

@x1arch
Copy link
Copy Markdown
Author

x1arch commented Jan 8, 2026

new tests:

Tests
=== RUN   TestIntegration
    fstests.go:438: Using remote "TestTerabox:"
=== RUN   TestIntegration/FsCheckWrap
    fstests.go:479: Not a wrapping Fs
=== RUN   TestIntegration/FsCommand
    fstests.go:507: No commands in this remote
=== RUN   TestIntegration/FsRmdirNotFound
=== RUN   TestIntegration/FsString
=== RUN   TestIntegration/FsName
=== RUN   TestIntegration/FsRoot
=== RUN   TestIntegration/FsRmdirEmpty
=== RUN   TestIntegration/FsMkdir
=== RUN   TestIntegration/FsMkdir/FsMkdirRmdirSubdir
=== RUN   TestIntegration/FsMkdir/FsListEmpty
=== RUN   TestIntegration/FsMkdir/FsListDirEmpty
=== RUN   TestIntegration/FsMkdir/FsListRDirEmpty
    fstests.go:399: FS has no ListR interface
=== RUN   TestIntegration/FsMkdir/FsListDirNotFound
2026/01/08 21:14:30 ERROR : does not exist: error listing: directory not found
=== RUN   TestIntegration/FsMkdir/FsListRDirNotFound
    fstests.go:399: FS has no ListR interface
=== RUN   TestIntegration/FsMkdir/FsEncoding
=== RUN   TestIntegration/FsMkdir/FsEncoding/control_chars
    fstests.go:707: testing "␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟␡"
=== RUN   TestIntegration/FsMkdir/FsEncoding/dot
    fstests.go:707: testing "."
=== RUN   TestIntegration/FsMkdir/FsEncoding/dot_dot
    fstests.go:707: testing ".."
=== RUN   TestIntegration/FsMkdir/FsEncoding/punctuation
    fstests.go:707: testing "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"
=== RUN   TestIntegration/FsMkdir/FsEncoding/leading_space
    fstests.go:707: testing " leading space"
=== RUN   TestIntegration/FsMkdir/FsEncoding/leading_tilde
    fstests.go:707: testing "~leading tilde"
=== RUN   TestIntegration/FsMkdir/FsEncoding/leading_CR
    fstests.go:707: testing "␍leading CR"
=== RUN   TestIntegration/FsMkdir/FsEncoding/leading_LF
    fstests.go:707: testing "␊leading LF"
=== RUN   TestIntegration/FsMkdir/FsEncoding/leading_HT
    fstests.go:707: testing "␉leading HT"
=== RUN   TestIntegration/FsMkdir/FsEncoding/leading_VT
    fstests.go:707: testing "␋leading VT"
=== RUN   TestIntegration/FsMkdir/FsEncoding/leading_dot
    fstests.go:707: testing ".leading dot"
=== RUN   TestIntegration/FsMkdir/FsEncoding/trailing_space
    fstests.go:707: testing "trailing space "
=== RUN   TestIntegration/FsMkdir/FsEncoding/trailing_CR
    fstests.go:707: testing "trailing CR␍"
=== RUN   TestIntegration/FsMkdir/FsEncoding/trailing_LF
    fstests.go:707: testing "trailing LF␊"
=== RUN   TestIntegration/FsMkdir/FsEncoding/trailing_HT
    fstests.go:707: testing "trailing HT␉"
=== RUN   TestIntegration/FsMkdir/FsEncoding/trailing_VT
    fstests.go:707: testing "trailing VT␋"
=== RUN   TestIntegration/FsMkdir/FsEncoding/trailing_dot
    fstests.go:707: testing "trailing dot."
=== RUN   TestIntegration/FsMkdir/FsEncoding/invalid_UTF-8
    fstests.go:707: testing "invalid utf-8\xfe"
=== RUN   TestIntegration/FsMkdir/FsEncoding/URL_encoding
    fstests.go:707: testing "test%46.txt"
=== RUN   TestIntegration/FsMkdir/FsNewObjectNotFound
=== RUN   TestIntegration/FsMkdir/FsPutError
=== RUN   TestIntegration/FsMkdir/FsPutZeroLength
    fstests.go:248: Can't upload zero length files
=== RUN   TestIntegration/FsMkdir/FsOpenWriterAt
    fstests.go:786: FS has no OpenWriterAt interface
=== RUN   TestIntegration/FsMkdir/FsOpenChunkWriter
    fstests.go:819: FS has no OpenChunkWriter interface
=== RUN   TestIntegration/FsMkdir/FsChangeNotify
    fstests.go:868: FS has no ChangeNotify interface
=== RUN   TestIntegration/FsMkdir/FsPutFiles
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsListDirFile2
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsListRDirFile2
    fstests.go:399: FS has no ListR interface
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsListR
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsListRSubdir
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsListDirRoot
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsListRDirRoot
    fstests.go:399: FS has no ListR interface
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsListSubdir
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsListRSubdir#01
    fstests.go:399: FS has no ListR interface
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsListLevel2
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsListRLevel2
    fstests.go:399: FS has no ListR interface
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsListFile1
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsNewObject
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsNewObjectCaseInsensitive
    fstests.go:1121: Not Case Insensitive
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsListFile1and2
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsNewObjectDir
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsPurge
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsPurgeRoot
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsListRootedSubdir
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsCopy
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsCopy/Metadata
    fstests.go:1289: Skipping test as can't write metadata
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsMove
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsMove/Metadata
    fstests.go:1398: Skipping test as can't write metadata
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsDirMove
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsRmdirFull
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsPrecision
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectString
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectFs
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectRemote
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectHashes
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectModTime
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectMimeType
    fstests.go:1592: MimeType method not supported
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectMetadata
    fstests.go:1623: Metadata method not supported
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectSetMetadata
    fstests.go:1694: SetMetadata method not supported
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectSetModTime
    fstests.go:1751: can't set modified time
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectSize
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectOpen
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectOpenSeek
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectOpenRange
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectPartialRead
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectUpdate
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectStorable
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsIsFile
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsIsFile/FsRoot
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsIsFileNotFound
2026/01/08 21:16:41 ERROR : error listing: directory not found
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FromRoot
    fstests.go:1911: Opening root remote "TestTerabox:" path "rclone-test-fujunom9fihe" from "TestTerabox:rclone-test-fujunom9fihe"
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FromRoot/List
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FromRoot/ListEntries
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FromRoot/ListR
    fstests.go:1945: FS has no ListR interface
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FromRoot/Put
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FromRoot/Put/Remove
=== RUN   TestIntegration/FsMkdir/FsPutFiles/PublicLink
    fstests.go:2004: FS has no PublicLinker interface
=== RUN   TestIntegration/FsMkdir/FsPutFiles/SetTier
    fstests.go:412: FS has no SetTier & GetTier interfaces
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectCheckWrap
    fstests.go:2109: Not a wrapping Fs
=== RUN   TestIntegration/FsMkdir/FsPutFiles/Bucket
    fstests.go:2125: Not a bucket based backend
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectRemove
=== RUN   TestIntegration/FsMkdir/FsPutFiles/ObjectAbout
=== RUN   TestIntegration/FsMkdir/FsPutFiles/FsPutStream
    fstests.go:2299: FS has no PutStream interface
=== RUN   TestIntegration/FsMkdir/FsPutFiles/Internal
    fstests.go:2343: *terabox.Fs does not implement InternalTester
=== RUN   TestIntegration/FsMkdir/FsPutChunked
    fstests.go:2364: *terabox.Fs does not implement SetUploadChunkSizer
=== RUN   TestIntegration/FsMkdir/FsCopyChunked
    fstests.go:2485: *terabox.Fs does not implement SetCopyCutoff
=== RUN   TestIntegration/FsMkdir/FsUploadUnknownSize
=== RUN   TestIntegration/FsMkdir/FsUploadUnknownSize/FsPutUnknownSize
=== RUN   TestIntegration/FsMkdir/FsUploadUnknownSize/FsUpdateUnknownSize
=== RUN   TestIntegration/FsMkdir/FsRootCollapse
=== RUN   TestIntegration/FsMkdir/FsDirSetModTime
    fstests.go:2625: FS has no DirSetModTime interface
=== RUN   TestIntegration/FsMkdir/FsMkdirMetadata
    fstests.go:2668: FS has no MkdirMetadata interface
=== RUN   TestIntegration/FsMkdir/FsDirectory
    fstests.go:2725: FS has no Directory methods and doesn't Wrap
2026/01/08 21:16:55 ERROR : error listing: directory not found
=== RUN   TestIntegration/FsShutdown
    fstests.go:2831: Shutdown method not supported
--- PASS: TestIntegration (152.67s)
    --- SKIP: TestIntegration/FsCheckWrap (0.00s)
    --- SKIP: TestIntegration/FsCommand (0.00s)
    --- PASS: TestIntegration/FsRmdirNotFound (0.24s)
    --- PASS: TestIntegration/FsString (0.00s)
    --- PASS: TestIntegration/FsName (0.00s)
    --- PASS: TestIntegration/FsRoot (0.00s)
    --- PASS: TestIntegration/FsRmdirEmpty (1.44s)
    --- PASS: TestIntegration/FsMkdir (149.68s)
        --- PASS: TestIntegration/FsMkdir/FsMkdirRmdirSubdir (3.11s)
        --- PASS: TestIntegration/FsMkdir/FsListEmpty (0.25s)
        --- PASS: TestIntegration/FsMkdir/FsListDirEmpty (0.34s)
        --- SKIP: TestIntegration/FsMkdir/FsListRDirEmpty (0.00s)
        --- PASS: TestIntegration/FsMkdir/FsListDirNotFound (0.21s)
        --- SKIP: TestIntegration/FsMkdir/FsListRDirNotFound (0.00s)
        --- PASS: TestIntegration/FsMkdir/FsEncoding (65.64s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/control_chars (4.47s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/dot (3.51s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/dot_dot (3.37s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/punctuation (3.44s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/leading_space (3.34s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/leading_tilde (3.45s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/leading_CR (3.30s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/leading_LF (3.64s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/leading_HT (3.42s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/leading_VT (3.12s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/leading_dot (3.21s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/trailing_space (3.28s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/trailing_CR (3.89s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/trailing_LF (3.06s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/trailing_HT (3.24s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/trailing_VT (3.62s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/trailing_dot (3.31s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/invalid_UTF-8 (3.11s)
            --- PASS: TestIntegration/FsMkdir/FsEncoding/URL_encoding (3.55s)
        --- PASS: TestIntegration/FsMkdir/FsNewObjectNotFound (0.47s)
        --- PASS: TestIntegration/FsMkdir/FsPutError (0.68s)
        --- SKIP: TestIntegration/FsMkdir/FsPutZeroLength (0.00s)
        --- SKIP: TestIntegration/FsMkdir/FsOpenWriterAt (0.00s)
        --- SKIP: TestIntegration/FsMkdir/FsOpenChunkWriter (0.00s)
        --- SKIP: TestIntegration/FsMkdir/FsChangeNotify (0.00s)
        --- PASS: TestIntegration/FsMkdir/FsPutFiles (74.12s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsListDirFile2 (1.16s)
            --- SKIP: TestIntegration/FsMkdir/FsPutFiles/FsListRDirFile2 (0.00s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsListR (1.19s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsListRSubdir (0.89s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsListDirRoot (1.22s)
            --- SKIP: TestIntegration/FsMkdir/FsPutFiles/FsListRDirRoot (0.00s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsListSubdir (0.45s)
            --- SKIP: TestIntegration/FsMkdir/FsPutFiles/FsListRSubdir#01 (0.00s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsListLevel2 (0.47s)
            --- SKIP: TestIntegration/FsMkdir/FsPutFiles/FsListRLevel2 (0.00s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsListFile1 (1.18s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsNewObject (0.22s)
            --- SKIP: TestIntegration/FsMkdir/FsPutFiles/FsNewObjectCaseInsensitive (0.00s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsListFile1and2 (1.34s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsNewObjectDir (0.20s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsPurge (4.84s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsPurgeRoot (6.22s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsListRootedSubdir (6.75s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsCopy (2.45s)
                --- SKIP: TestIntegration/FsMkdir/FsPutFiles/FsCopy/Metadata (0.00s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsMove (8.58s)
                --- SKIP: TestIntegration/FsMkdir/FsPutFiles/FsMove/Metadata (0.00s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsDirMove (7.67s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsRmdirFull (0.22s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsPrecision (0.00s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/ObjectString (0.22s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/ObjectFs (0.21s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/ObjectRemote (0.21s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/ObjectHashes (0.21s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/ObjectModTime (0.21s)
            --- SKIP: TestIntegration/FsMkdir/FsPutFiles/ObjectMimeType (0.29s)
            --- SKIP: TestIntegration/FsMkdir/FsPutFiles/ObjectMetadata (0.20s)
            --- SKIP: TestIntegration/FsMkdir/FsPutFiles/ObjectSetMetadata (0.22s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/ObjectSetModTime (0.21s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/ObjectSize (0.20s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/ObjectOpen (2.22s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/ObjectOpenSeek (0.67s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/ObjectOpenRange (2.98s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/ObjectPartialRead (0.85s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/ObjectUpdate (3.11s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/ObjectStorable (0.22s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsIsFile (1.13s)
                --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsIsFile/FsRoot (0.00s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FsIsFileNotFound (1.20s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/FromRoot (8.47s)
                --- PASS: TestIntegration/FsMkdir/FsPutFiles/FromRoot/List (1.23s)
                --- PASS: TestIntegration/FsMkdir/FsPutFiles/FromRoot/ListEntries (0.23s)
                --- SKIP: TestIntegration/FsMkdir/FsPutFiles/FromRoot/ListR (0.00s)
                --- PASS: TestIntegration/FsMkdir/FsPutFiles/FromRoot/Put (5.99s)
                    --- PASS: TestIntegration/FsMkdir/FsPutFiles/FromRoot/Put/Remove (1.52s)
            --- SKIP: TestIntegration/FsMkdir/FsPutFiles/PublicLink (0.00s)
            --- SKIP: TestIntegration/FsMkdir/FsPutFiles/SetTier (0.00s)
            --- SKIP: TestIntegration/FsMkdir/FsPutFiles/ObjectCheckWrap (0.00s)
            --- SKIP: TestIntegration/FsMkdir/FsPutFiles/Bucket (0.00s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/ObjectRemove (1.62s)
            --- PASS: TestIntegration/FsMkdir/FsPutFiles/ObjectAbout (0.21s)
            --- SKIP: TestIntegration/FsMkdir/FsPutFiles/FsPutStream (0.00s)
            --- SKIP: TestIntegration/FsMkdir/FsPutFiles/Internal (0.00s)
        --- SKIP: TestIntegration/FsMkdir/FsPutChunked (0.00s)
        --- SKIP: TestIntegration/FsMkdir/FsCopyChunked (0.00s)
        --- PASS: TestIntegration/FsMkdir/FsUploadUnknownSize (1.59s)
            --- PASS: TestIntegration/FsMkdir/FsUploadUnknownSize/FsPutUnknownSize (0.00s)
            --- PASS: TestIntegration/FsMkdir/FsUploadUnknownSize/FsUpdateUnknownSize (1.59s)
        --- PASS: TestIntegration/FsMkdir/FsRootCollapse (1.24s)
        --- SKIP: TestIntegration/FsMkdir/FsDirSetModTime (0.00s)
        --- SKIP: TestIntegration/FsMkdir/FsMkdirMetadata (0.00s)
        --- SKIP: TestIntegration/FsMkdir/FsDirectory (0.00s)
    --- SKIP: TestIntegration/FsShutdown (0.00s)
PASS
ok      github.com/rclone/rclone/backend/terabox        152.676s

@roucc
Copy link
Copy Markdown
Member

roucc commented Jan 9, 2026

Hi @x1arch those are passing which is great! Can you show a screenshot of the webpage produced from:
go run ./fstest/test_all -backends remote

As seen in https://github.com/rclone/rclone/blob/master/CONTRIBUTING.md#backend-documentation

@ameer1234567890
Copy link
Copy Markdown
Contributor

New error log:

2026/01/20 18:05:03 DEBUG : <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
2026/01/20 18:05:03 ERROR : Backup.usb3/docker/jellyfin/cache/omdb/tt32058735.json: Couldn't move: couldn't move file: The frequency of operation is too soon, please try again later
2026/01/20 18:05:03 ERROR : Backup.usb3/docker/jellyfin/cache/omdb/tt32058735.json: Couldn't move into backup dir: couldn't move file: The frequency of operation is too soon, please try again later
2026/01/20 18:05:03 DEBUG : <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
2026/01/20 18:05:03 DEBUG : HTTP RESPONSE (req 0x40011cf180)
2026/01/20 18:05:03 DEBUG : HTTP/1.1 200 OK
Cache-Control: no-cache
Connection: keep-alive
Content-Type: application/json; charset=UTF-8
Date: Tue, 20 Jan 2026 13:05:03 GMT
Flow-Level: 3
Logid: 461038764905422744
Server: nginx
Vary: Accept-Encoding
X-Powered-By: DuboxServer
Yld: XXXXXXXXXXXXXXXXXXX
Yme: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@hexahigh
Copy link
Copy Markdown

hexahigh commented Jan 31, 2026

Hi @x1arch those are passing which is great! Can you show a screenshot of the webpage produced from: go run ./fstest/test_all -backends remote

As seen in https://github.com/rclone/rclone/blob/master/CONTRIBUTING.md#backend-documentation

Noticed that x1arch hasn't responded to this yet and since I'm kinda impatient I ran the command you provided and took a screenshot.
image
I just really want this backend to finally be in upstream Rclone.

@christaikobo
Copy link
Copy Markdown

Hi @x1arch those are passing which is great! Can you show a screenshot of the webpage produced from: go run ./fstest/test_all -backends remote
As seen in https://github.com/rclone/rclone/blob/master/CONTRIBUTING.md#backend-documentation

Noticed that x1arch hasn't responded to this yet and since I'm kinda impatient I ran the command you provided and took a screenshot. image I just really want this backend to finally be in upstream Rclone.

Thanks for taking the initiative! Really hope we can get this merged upstream!

I have tested it and it is working stably for me for a couple of days, I think it's ready.

@b0rrasca
Copy link
Copy Markdown

b0rrasca commented Jan 31, 2026

Thanks for the update @x1arch

Did you get an official client_id/client_secret? If you like I can try asking from an official rclone.org email address.

Nope I didn't get any answers from Terabox. Yes, I suppose it would be great.

We'll have a go at that.

Do you think this will be ready to merge for 1.72?

I believe, it's ready for regular scenarios. I didn't check this and that messages, yet.

How are the integration tests doing? In particular did you get test_all to run clean ?

I tested it manually as most of users here. I'll try to find time on this week to run integration tests.

The integration tests will make sure the complete rclone API is working and making them work will probably clear up the last remaining user problems 🤞

Check out the docs here

https://github.com/rclone/rclone/blob/master/CONTRIBUTING.md#backend-testing

We would expect the test_all tests to run without any errors. This may mean disabling a few tests in the config.yaml but hopefully not too many.

@ncw Is there anything pending to be able to finalize this?

@madeupandprobablydoesnotexist
Copy link
Copy Markdown

Has been incredibly stable for me; can't wait for upstream.

@fidodido48
Copy link
Copy Markdown

Generally, works good for me too with 1 caveat - im getting quite frequent 'operation not permitted' error on remove/delete file. Retrying always fixes it on first attempt.

Id also like to see it in the upstream already. Been a long time...

@gablilli
Copy link
Copy Markdown

is this pr completely dead? any chance to get it into upstream?

@hexahigh
Copy link
Copy Markdown

is this pr completely dead? any chance to get it into upstream?

I have not experienced any issues while using the Terabox remote, so I think it's ready to be merged.
As for why it hasn't been merged, I guess the PR has just kinda been forgotten.

@ncw
Copy link
Copy Markdown
Member

ncw commented Mar 3, 2026

@hexahigh @x1arch

go run ./fstest/test_all -backends remote

You need to put the name of your actual remote on the end of that command with a : on the end, so something like

go run ./fstest/test_all -backends MyTeraboxRemote:

The integration tests normally take about 20 minutes, not 2ms :-)

Once it is passing the tests we can enter the final review process.

@x1arch
Copy link
Copy Markdown
Author

x1arch commented Mar 3, 2026

@ncw I use unit tests, runs by command: RCLONE_CONFIG=/workspaces/rclone/config go test -v from backend/terabox folder as described here: https://github.com/rclone/rclone/blob/master/CONTRIBUTING.md#backend-testing
Results are posted here: #8508 (comment) and here #8508 (comment) time of the tests 150 seconds.

As @hexahigh shows the framework aren't work, for me it shows the same 3ms and empty result

Manual integrity testing:

cd fs/sync && go test -v -remote tb:

Tests
=== RUN   TestPipe
--- PASS: TestPipe (0.00s)
=== RUN   TestPipeConcurrent
--- PASS: TestPipeConcurrent (0.01s)
=== RUN   TestPipeOrderBy
=== RUN   TestPipeOrderBy/#00
=== RUN   TestPipeOrderBy/size
=== RUN   TestPipeOrderBy/name
=== RUN   TestPipeOrderBy/modtime
=== RUN   TestPipeOrderBy/size,ascending
=== RUN   TestPipeOrderBy/name,asc
=== RUN   TestPipeOrderBy/modtime,ascending
=== RUN   TestPipeOrderBy/size,descending
=== RUN   TestPipeOrderBy/name,desc
=== RUN   TestPipeOrderBy/modtime,descending
=== RUN   TestPipeOrderBy/size,mixed,50
=== RUN   TestPipeOrderBy/size,mixed,51
--- PASS: TestPipeOrderBy (0.00s)
    --- PASS: TestPipeOrderBy/#00 (0.00s)
    --- PASS: TestPipeOrderBy/size (0.00s)
    --- PASS: TestPipeOrderBy/name (0.00s)
    --- PASS: TestPipeOrderBy/modtime (0.00s)
    --- PASS: TestPipeOrderBy/size,ascending (0.00s)
    --- PASS: TestPipeOrderBy/name,asc (0.00s)
    --- PASS: TestPipeOrderBy/modtime,ascending (0.00s)
    --- PASS: TestPipeOrderBy/size,descending (0.00s)
    --- PASS: TestPipeOrderBy/name,desc (0.00s)
    --- PASS: TestPipeOrderBy/modtime,descending (0.00s)
    --- PASS: TestPipeOrderBy/size,mixed,50 (0.00s)
    --- PASS: TestPipeOrderBy/size,mixed,51 (0.00s)
=== RUN   TestNewLess
=== RUN   TestNewLess/blankOK
=== RUN   TestNewLess/tooManyParts
=== RUN   TestNewLess/tooManyParts2
=== RUN   TestNewLess/badMixed
=== RUN   TestNewLess/unknownComparison
=== RUN   TestNewLess/unknownSortDirection
=== RUN   TestNewLess/size
=== RUN   TestNewLess/name
=== RUN   TestNewLess/modtime
=== RUN   TestNewLess/size,ascending
=== RUN   TestNewLess/name,asc
=== RUN   TestNewLess/modtime,ascending
=== RUN   TestNewLess/size,descending
=== RUN   TestNewLess/name,desc
=== RUN   TestNewLess/modtime,descending
=== RUN   TestNewLess/modtime,mixed
=== RUN   TestNewLess/modtime,mixed,30
--- PASS: TestNewLess (0.00s)
    --- PASS: TestNewLess/blankOK (0.00s)
    --- PASS: TestNewLess/tooManyParts (0.00s)
    --- PASS: TestNewLess/tooManyParts2 (0.00s)
    --- PASS: TestNewLess/badMixed (0.00s)
    --- PASS: TestNewLess/unknownComparison (0.00s)
    --- PASS: TestNewLess/unknownSortDirection (0.00s)
    --- PASS: TestNewLess/size (0.00s)
    --- PASS: TestNewLess/name (0.00s)
    --- PASS: TestNewLess/modtime (0.00s)
    --- PASS: TestNewLess/size,ascending (0.00s)
    --- PASS: TestNewLess/name,asc (0.00s)
    --- PASS: TestNewLess/modtime,ascending (0.00s)
    --- PASS: TestNewLess/size,descending (0.00s)
    --- PASS: TestNewLess/name,desc (0.00s)
    --- PASS: TestNewLess/modtime,descending (0.00s)
    --- PASS: TestNewLess/modtime,mixed (0.00s)
    --- PASS: TestNewLess/modtime,mixed,30 (0.00s)
=== RUN   TestRcCopy
    rc_test.go:16: Skipping test on non local remote
--- SKIP: TestRcCopy (0.00s)
=== RUN   TestRcMove
    rc_test.go:16: Skipping test on non local remote
--- SKIP: TestRcMove (0.00s)
=== RUN   TestRcSync
    rc_test.go:16: Skipping test on non local remote
--- SKIP: TestRcSync (0.00s)
=== RUN   TestCopyWithDryRun
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
2026/03/03 15:43:41 NOTICE: sub dir/hello world: Skipped copy as --dry-run is set (size 11)
--- PASS: TestCopyWithDryRun (1.40s)
=== RUN   TestCopy
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestCopy (5.99s)
=== RUN   TestCopyMetadata
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:98: Skipping as metadata not supported
--- SKIP: TestCopyMetadata (0.50s)
=== RUN   TestCopyMetadataNoEmptyDirs
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:98: Skipping as metadata not supported
--- SKIP: TestCopyMetadataNoEmptyDirs (0.57s)
=== RUN   TestCopyMissingDirectory
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
2026/03/03 15:43:49 ERROR : Local file system at /non-existing: error reading source root directory: directory not found
--- PASS: TestCopyMissingDirectory (0.77s)
=== RUN   TestCopyNoTraverse
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestCopyNoTraverse (4.27s)
=== RUN   TestCopyNoTraverseDeadlock
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:222: Only runs on local
--- SKIP: TestCopyNoTraverseDeadlock (0.59s)
=== RUN   TestCopyCheckFirst
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestCopyCheckFirst (4.77s)
=== RUN   TestSyncNoTraverse
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
2026/03/03 15:43:59 ERROR : Ignoring --no-traverse with sync
--- PASS: TestSyncNoTraverse (5.06s)
=== RUN   TestCopyWithDepth
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestCopyWithDepth (3.28s)
=== RUN   TestCopyWithFilesFrom
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestCopyWithFilesFrom (3.00s)
=== RUN   TestCopyWithFilesFromAndNoTraverse
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestCopyWithFilesFromAndNoTraverse (3.45s)
=== RUN   TestCopyEmptyDirectories
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestCopyEmptyDirectories (7.70s)
=== RUN   TestCopyNoEmptyDirectories
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestCopyNoEmptyDirectories (4.79s)
=== RUN   TestMoveEmptyDirectories
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestMoveEmptyDirectories (7.48s)
=== RUN   TestSyncNoUpdateDirModtime
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:438: Skipping test as backend does not support DirSetModTime
--- SKIP: TestSyncNoUpdateDirModtime (0.63s)
=== RUN   TestMoveNoEmptyDirectories
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestMoveNoEmptyDirectories (5.30s)
=== RUN   TestSyncEmptyDirectories
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncEmptyDirectories (6.38s)
=== RUN   TestSyncSetDelayedModTimes
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:537: Backend doesn't have DirModTimeUpdatesOnWrite set
--- SKIP: TestSyncSetDelayedModTimes (0.56s)
=== RUN   TestSyncNoEmptyDirectories
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncNoEmptyDirectories (4.64s)
=== RUN   TestServerSideCopy
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:620: Server side copy (if possible) Terabox root 'rclone-test-voxutuq8pema' -> Terabox root 'rclone-test-redudiz5tawi'
--- PASS: TestServerSideCopy (9.03s)
=== RUN   TestCopyOverSelf
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestCopyOverSelf (6.13s)
=== RUN   TestServerSideCopyOverSelf
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:656: Server side copy (if possible) Terabox root 'rclone-test-voxutuq8pema' -> Terabox root 'rclone-test-fogujim5besa'
2026/03/03 15:45:15 ERROR : sub dir/hello world: Failed to copy: couldn't copy file: The file already exists
    sync_test.go:669: 
                Error Trace:    /workspaces/rclone/fs/sync/sync_test.go:669
                Error:          Received unexpected error:
                                couldn't copy file: The file already exists
                Test:           TestServerSideCopyOverSelf
--- FAIL: TestServerSideCopyOverSelf (11.44s)
=== RUN   TestMoveOverSelf
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestMoveOverSelf (6.27s)
=== RUN   TestServerSideMoveOverSelf
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:701: Server side copy (if possible) Terabox root 'rclone-test-voxutuq8pema' -> Terabox root 'rclone-test-torofel8nuce'
--- PASS: TestServerSideMoveOverSelf (19.06s)
=== RUN   TestCopyAfterDelete
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
2026/03/03 15:45:45 ERROR : error listing: directory not found
--- PASS: TestCopyAfterDelete (5.52s)
=== RUN   TestCopyRedownload
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestCopyRedownload (7.37s)
=== RUN   TestSyncBasedOnCheckSum
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
2026/03/03 15:45:59 NOTICE: Terabox root 'rclone-test-voxutuq8pema': --checksum is in use but the source and destination have no hashes in common; falling back to --size-only
--- PASS: TestSyncBasedOnCheckSum (3.59s)
=== RUN   TestSyncSizeOnly
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncSizeOnly (3.55s)
=== RUN   TestSyncIgnoreSize
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncIgnoreSize (3.62s)
=== RUN   TestSyncIgnoreTimes
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncIgnoreTimes (5.25s)
=== RUN   TestSyncIgnoreExisting
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncIgnoreExisting (3.60s)
=== RUN   TestSyncIgnoreErrors
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncIgnoreErrors (12.98s)
=== RUN   TestSyncAfterChangingModtimeOnly
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncAfterChangingModtimeOnly (3.83s)
=== RUN   TestSyncAfterChangingModtimeOnlyWithNoUpdateModTime
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:1046: Can't check this if no hashes supported
--- PASS: TestSyncAfterChangingModtimeOnlyWithNoUpdateModTime (0.58s)
=== RUN   TestSyncDoesntUpdateModtime
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:1072: Can't run this test on fs which doesn't support mod time
--- SKIP: TestSyncDoesntUpdateModtime (0.67s)
=== RUN   TestSyncAfterAddingAFile
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncAfterAddingAFile (4.99s)
=== RUN   TestSyncAfterChangingFilesSizeOnly
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncAfterChangingFilesSizeOnly (4.39s)
=== RUN   TestSyncAfterChangingContentsOnly
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:1136: ModTimeNotSupported so forcing file to be a different size
--- PASS: TestSyncAfterChangingContentsOnly (4.66s)
=== RUN   TestSyncAfterRemovingAFileAndAddingAFileDryRun
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
2026/03/03 15:46:51 NOTICE: potato2: Skipped copy as --dry-run is set (size 60)
2026/03/03 15:46:51 NOTICE: potato: Skipped delete as --dry-run is set (size 21)
--- PASS: TestSyncAfterRemovingAFileAndAddingAFileDryRun (4.38s)
=== RUN   TestSyncAfterRemovingAFileAndAddingAFile
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncAfterRemovingAFileAndAddingAFile (6.96s)
=== RUN   TestSyncAfterRemovingAFileAndAddingAFileSubDir
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncAfterRemovingAFileAndAddingAFileSubDir (12.91s)
=== RUN   TestSyncAfterRemovingAFileAndAddingAFileSubDirWithErrors
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
2026/03/03 15:47:18 ERROR : Terabox root 'rclone-test-voxutuq8pema': not deleting files as there were IO errors
2026/03/03 15:47:18 ERROR : Terabox root 'rclone-test-voxutuq8pema': not deleting directories as there were IO errors
--- PASS: TestSyncAfterRemovingAFileAndAddingAFileSubDirWithErrors (12.49s)
=== RUN   TestSyncDeleteAfter
--- PASS: TestSyncDeleteAfter (0.00s)
=== RUN   TestSyncDeleteDuring
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncDeleteDuring (6.70s)
=== RUN   TestSyncDeleteBefore
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncDeleteBefore (7.41s)
=== RUN   TestCopyDeleteBefore
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestCopyDeleteBefore (5.18s)
=== RUN   TestSyncWithExclude
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncWithExclude (6.02s)
=== RUN   TestSyncWithExcludeAndDeleteExcluded
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncWithExcludeAndDeleteExcluded (8.40s)
=== RUN   TestSyncWithUpdateOlder
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:1453: Can't run this test on fs which doesn't support mod time
--- SKIP: TestSyncWithUpdateOlder (0.57s)
=== RUN   TestSyncWithMaxDuration
=== RUN   TestSyncWithMaxDuration/Hard
    sync_test.go:1496: Skipping test on non local remote
=== RUN   TestSyncWithMaxDuration/Soft
    sync_test.go:1496: Skipping test on non local remote
--- PASS: TestSyncWithMaxDuration (0.00s)
    --- SKIP: TestSyncWithMaxDuration/Hard (0.00s)
    --- SKIP: TestSyncWithMaxDuration/Soft (0.00s)
=== RUN   TestSyncWithTrackRenames
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:1568: Can track renames: false
2026/03/03 15:47:59 ERROR : Terabox root 'rclone-test-voxutuq8pema': Ignoring --track-renames as the source and destination do not have a common hash
2026/03/03 15:48:01 ERROR : Terabox root 'rclone-test-voxutuq8pema': Ignoring --track-renames as the source and destination do not have a common hash
--- PASS: TestSyncWithTrackRenames (8.11s)
=== RUN   TestParseRenamesStrategyModtime
--- PASS: TestParseRenamesStrategyModtime (0.00s)
=== RUN   TestRenamesStrategyModtime
--- PASS: TestRenamesStrategyModtime (0.00s)
=== RUN   TestSyncWithTrackRenamesStrategyModtime
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:1640: Can track renames: false
2026/03/03 15:48:07 ERROR : Terabox root 'rclone-test-voxutuq8pema': Ignoring --track-renames as either the source or destination do not support modtime
2026/03/03 15:48:09 ERROR : Terabox root 'rclone-test-voxutuq8pema': Ignoring --track-renames as either the source or destination do not support modtime
--- PASS: TestSyncWithTrackRenamesStrategyModtime (5.73s)
=== RUN   TestSyncWithTrackRenamesStrategyLeaf
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:1679: Can track renames: false
--- PASS: TestSyncWithTrackRenamesStrategyLeaf (6.83s)
=== RUN   TestServerSideMoveLocal
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestServerSideMoveLocal (0.64s)
=== RUN   TestMoveWithDeleteEmptySrcDirs
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestMoveWithDeleteEmptySrcDirs (6.96s)
=== RUN   TestMoveWithoutDeleteEmptySrcDirs
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestMoveWithoutDeleteEmptySrcDirs (7.51s)
=== RUN   TestMoveWithIgnoreExisting
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestMoveWithIgnoreExisting (3.66s)
=== RUN   TestServerSideMove
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:1735: Server side move (if possible) Terabox root 'rclone-test-voxutuq8pema' -> Terabox root 'rclone-test-yunejin9gafa'
2026/03/03 15:48:55 ERROR : error listing: directory not found
2026/03/03 15:48:56 NOTICE: purge failed: directory not found
--- PASS: TestServerSideMove (17.89s)
=== RUN   TestServerSideMoveWithFilter
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:1735: Server side move (if possible) Terabox root 'rclone-test-voxutuq8pema' -> Terabox root 'rclone-test-budiqus3dayi'
2026/03/03 15:49:10 ERROR : error listing: invalid character '<' looking for beginning of value
    fstest.go:282: Error listing: invalid character '<' looking for beginning of value
--- FAIL: TestServerSideMoveWithFilter (15.48s)
=== RUN   TestServerSideMoveDeleteEmptySourceDirs
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:1735: Server side move (if possible) Terabox root 'rclone-test-voxutuq8pema' -> Terabox root 'rclone-test-cusuvip9nebe'
2026/03/03 15:49:32 ERROR : error listing: directory not found
2026/03/03 15:49:32 ERROR : error listing: directory not found
2026/03/03 15:49:33 NOTICE: purge failed: directory not found
--- PASS: TestServerSideMoveDeleteEmptySourceDirs (21.89s)
=== RUN   TestServerSideMoveOverlap
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:1940: Skipping test as remote supports DirMove
2026/03/03 15:49:35 ERROR : error listing: invalid character '<' looking for beginning of value
    fstest.go:282: Error listing: invalid character '<' looking for beginning of value
--- FAIL: TestServerSideMoveOverlap (0.85s)
=== RUN   TestSyncOverlap
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncOverlap (1.76s)
=== RUN   TestSyncOverlapWithFilter
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncOverlapWithFilter (19.74s)
=== RUN   TestSyncCompareDest
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:2205: No hash on uploaded file so skipping compare timestamp test
--- PASS: TestSyncCompareDest (25.09s)
=== RUN   TestSyncMultipleCompareDest
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncMultipleCompareDest (16.49s)
=== RUN   TestSyncCopyDest
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
2026/03/03 15:50:42 ERROR : one: Failed to copy: jsToken not found
2026/03/03 15:50:42 ERROR : Terabox root 'rclone-test-voxutuq8pema/dst': not deleting files as there were IO errors
2026/03/03 15:50:42 ERROR : Terabox root 'rclone-test-voxutuq8pema/dst': not deleting directories as there were IO errors
    sync_test.go:2281: 
                Error Trace:    /workspaces/rclone/fs/sync/sync_test.go:2281
                Error:          Received unexpected error:
                                jsToken not found
                Test:           TestSyncCopyDest
--- FAIL: TestSyncCopyDest (4.72s)
=== RUN   TestSyncBackupDir
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
2026/03/03 15:50:51 ERROR : one: Couldn't move: couldn't move file: jsToken not found
2026/03/03 15:50:51 ERROR : Terabox root 'rclone-test-voxutuq8pema/dst': not deleting files as there were IO errors
2026/03/03 15:50:51 ERROR : Terabox root 'rclone-test-voxutuq8pema/dst': not deleting directories as there were IO errors
    sync_test.go:2415: 
                Error Trace:    /workspaces/rclone/fs/sync/sync_test.go:2415
                                                        /workspaces/rclone/fs/sync/sync_test.go:2457
                Error:          Received unexpected error:
                                couldn't move file: jsToken not found
                Test:           TestSyncBackupDir
--- FAIL: TestSyncBackupDir (10.56s)
=== RUN   TestSyncBackupDirWithSuffix
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
2026/03/03 15:51:01 ERROR : one: Couldn't move: couldn't move file: jsToken not found
2026/03/03 15:51:01 ERROR : Terabox root 'rclone-test-voxutuq8pema/dst': not deleting files as there were IO errors
2026/03/03 15:51:01 ERROR : Terabox root 'rclone-test-voxutuq8pema/dst': not deleting directories as there were IO errors
    sync_test.go:2415: 
                Error Trace:    /workspaces/rclone/fs/sync/sync_test.go:2415
                                                        /workspaces/rclone/fs/sync/sync_test.go:2461
                Error:          Received unexpected error:
                                couldn't move file: jsToken not found
                Test:           TestSyncBackupDirWithSuffix
--- FAIL: TestSyncBackupDirWithSuffix (10.40s)
=== RUN   TestSyncBackupDirWithSuffixKeepExtension
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
2026/03/03 15:51:12 ERROR : one: Couldn't move: couldn't move file: jsToken not found
2026/03/03 15:51:12 ERROR : Terabox root 'rclone-test-voxutuq8pema/dst': not deleting files as there were IO errors
2026/03/03 15:51:12 ERROR : Terabox root 'rclone-test-voxutuq8pema/dst': not deleting directories as there were IO errors
    sync_test.go:2415: 
                Error Trace:    /workspaces/rclone/fs/sync/sync_test.go:2415
                                                        /workspaces/rclone/fs/sync/sync_test.go:2465
                Error:          Received unexpected error:
                                couldn't move file: jsToken not found
                Test:           TestSyncBackupDirWithSuffixKeepExtension
--- FAIL: TestSyncBackupDirWithSuffixKeepExtension (11.61s)
=== RUN   TestSyncBackupDirSuffixOnly
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
2026/03/03 15:51:22 ERROR : one: Couldn't move: couldn't move file: jsToken not found
2026/03/03 15:51:22 ERROR : Terabox root 'rclone-test-voxutuq8pema/dst': not deleting files as there were IO errors
2026/03/03 15:51:22 ERROR : Terabox root 'rclone-test-voxutuq8pema/dst': not deleting directories as there were IO errors
    sync_test.go:2415: 
                Error Trace:    /workspaces/rclone/fs/sync/sync_test.go:2415
                                                        /workspaces/rclone/fs/sync/sync_test.go:2469
                Error:          Received unexpected error:
                                couldn't move file: jsToken not found
                Test:           TestSyncBackupDirSuffixOnly
--- FAIL: TestSyncBackupDirSuffixOnly (10.01s)
=== RUN   TestSyncSuffix
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
2026/03/03 15:51:32 ERROR : one: Couldn't move: couldn't move file: jsToken not found
    sync_test.go:2503: 
                Error Trace:    /workspaces/rclone/fs/sync/sync_test.go:2503
                                                        /workspaces/rclone/fs/sync/sync_test.go:2553
                Error:          Received unexpected error:
                                moving to --backup-dir failed: couldn't move file: jsToken not found
                Test:           TestSyncSuffix
--- FAIL: TestSyncSuffix (9.67s)
=== RUN   TestSyncSuffixKeepExtension
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
2026/03/03 15:51:41 ERROR : one: Couldn't move: couldn't move file: jsToken not found
    sync_test.go:2503: 
                Error Trace:    /workspaces/rclone/fs/sync/sync_test.go:2503
                                                        /workspaces/rclone/fs/sync/sync_test.go:2554
                Error:          Received unexpected error:
                                moving to --backup-dir failed: couldn't move file: jsToken not found
                Test:           TestSyncSuffixKeepExtension
--- FAIL: TestSyncSuffixKeepExtension (9.54s)
=== RUN   TestSyncUTFNorm
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncUTFNorm (4.35s)
=== RUN   TestSyncImmutable
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
2026/03/03 15:51:52 ERROR : existing: Source and destination exist but do not match: immutable file modified
2026/03/03 15:51:52 ERROR : Terabox root 'rclone-test-voxutuq8pema': not deleting files as there were IO errors
2026/03/03 15:51:52 ERROR : Terabox root 'rclone-test-voxutuq8pema': not deleting directories as there were IO errors
--- PASS: TestSyncImmutable (4.03s)
=== RUN   TestSyncIgnoreCase
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncIgnoreCase (3.12s)
=== RUN   TestFixCase
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:2665: Skipping test as local or remote are case-sensitive
--- SKIP: TestFixCase (0.61s)
=== RUN   TestMaxTransfer
=== RUN   TestMaxTransfer/Hard
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:2704: This test only runs on local
=== RUN   TestMaxTransfer/Soft
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:2704: This test only runs on local
=== RUN   TestMaxTransfer/Cautious
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
    sync_test.go:2704: This test only runs on local
--- PASS: TestMaxTransfer (1.74s)
    --- SKIP: TestMaxTransfer/Hard (0.52s)
    --- SKIP: TestMaxTransfer/Soft (0.60s)
    --- SKIP: TestMaxTransfer/Cautious (0.61s)
=== RUN   TestSyncConcurrentDelete
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
--- PASS: TestSyncConcurrentDelete (68.61s)
=== RUN   TestSyncConcurrentTruncate
    run.go:185: Remote "Terabox root 'rclone-test-voxutuq8pema'", Local "Local file system at /tmp/rclone3649057905", Modify Window "876000h0m0s"
panic: test timed out after 10m0s
        running tests:
                TestSyncConcurrentTruncate (34s)

goroutine 9776 [running]:
testing.(*M).startAlarm.func1()
/usr/local/go/src/testing/testing.go:2484 +0x394
created by time.goFunc
/usr/local/go/src/time/sleep.go:215 +0x2d

goroutine 1 [chan receive]:
testing.(*T).Run(0xc000c016c0, {0x28a3359?, 0xc00006bad8?}, 0x29b7480)
/usr/local/go/src/testing/testing.go:1859 +0x431
testing.runTests.func1(0xc000c016c0)
/usr/local/go/src/testing/testing.go:2279 +0x37
testing.tRunner(0xc000c016c0, 0xc00006bc18)
/usr/local/go/src/testing/testing.go:1792 +0xf4
testing.runTests(0xc000112138, {0x41c8540, 0x6c, 0x6c}, {0x8498e0?, 0x42035e8?, 0x41df840?})
/usr/local/go/src/testing/testing.go:2277 +0x4b4
testing.(*M).Run(0xc00072bb80)
/usr/local/go/src/testing/testing.go:2142 +0x64a
github.com/rclone/rclone/fstest.TestMain(0xc00072bb80)
/workspaces/rclone/fstest/run.go:74 +0xa6
github.com/rclone/rclone/fs/sync.TestMain(...)
/workspaces/rclone/fs/sync/sync_test.go:45
main.main()
_testmain.go:261 +0xa9

goroutine 50 [syscall, 10 minutes]:
os/signal.signal_recv()
/usr/local/go/src/runtime/sigqueue.go:152 +0x29
os/signal.loop()
/usr/local/go/src/os/signal/signal_unix.go:23 +0x13
created by os/signal.Notify.func1.1 in goroutine 1
/usr/local/go/src/os/signal/signal.go:152 +0x1f

goroutine 51 [chan receive, 10 minutes]:
github.com/rclone/rclone/fs/accounting.(*tokenBucket).startSignalHandler.func1()
/workspaces/rclone/fs/accounting/accounting_unix.go:24 +0x27
created by github.com/rclone/rclone/fs/accounting.(*tokenBucket).startSignalHandler in goroutine 1
/workspaces/rclone/fs/accounting/accounting_unix.go:21 +0xa7

goroutine 9593 [sync.WaitGroup.Wait]:
sync.runtime_SemacquireWaitGroup(0x7e42f8ec98098001?)
/usr/local/go/src/runtime/sema.go:110 +0x25
sync.(*WaitGroup).Wait(0x2d1f8a0?)
/usr/local/go/src/sync/waitgroup.go:118 +0x48
github.com/rclone/rclone/backend/terabox.(*Fs).apiFileUpload(0xc00072a280, {0x2d49620, 0xc0003587e0}, {0xc00069ad60, 0x1f}, 0x6, {0x1f?, 0xc00006b701?, 0x0?}, {0x2d1f9a0, ...}, ...)
/workspaces/rclone/backend/terabox/api.go:592 +0x955
github.com/rclone/rclone/backend/terabox.(*Fs).PutUnchecked(0xc00072a280, {0x2d49620, 0xc0003587e0}, {0x2d1f9a0, 0xc0002ff230}, {0x2d55350, 0xc0001e02a0}, {0x0, 0x0, 0x0})
/workspaces/rclone/backend/terabox/terabox.go:451 +0x31d
github.com/rclone/rclone/backend/terabox.(*Fs).Put(0xc00072a280, {0x2d49620, 0xc0003587e0}, {0x2d1f9a0, 0xc0002ff230}, {0x2d55350, 0xc0001e02a0}, {0x0, 0x0, 0x0})
/workspaces/rclone/backend/terabox/terabox.go:381 +0x274
github.com/rclone/rclone/fstest.(*Run).WriteObjectTo(0xc00040bea0, {0x2d49620, 0xc0003587e0}, {0x2d626f0, 0xc00072a280}, {0xc000790ab8, 0x6}, {0x2863c3e, 0x6}, {0x1dcd64ff, ...}, ...)
/workspaces/rclone/fstest/run.go:280 +0x3f2
github.com/rclone/rclone/fstest.(*Run).WriteObject(...)
/workspaces/rclone/fstest/run.go:297
github.com/rclone/rclone/fstest.(*Run).WriteBoth(0xc00040bea0, {0x2d49620, 0xc0003587e0}, {0xc000790ab8, 0x6}, {0x2863c3e, 0x6}, {0x1dcd64ff, 0xeb20d7a72, 0x0})
/workspaces/rclone/fstest/run.go:308 +0x109
github.com/rclone/rclone/fs/sync.testSyncConcurrent(0xc00054e000, {0x286a814, 0x8})
/workspaces/rclone/fs/sync/sync_test.go:2766 +0x70b
github.com/rclone/rclone/fs/sync.TestSyncConcurrentTruncate(0xc00054e000?)
/workspaces/rclone/fs/sync/sync_test.go:2792 +0x1f
testing.tRunner(0xc00054e000, 0x29b7480)
/usr/local/go/src/testing/testing.go:1792 +0xf4
created by testing.(*T).Run in goroutine 1
/usr/local/go/src/testing/testing.go:1851 +0x413

goroutine 9022 [select]:
github.com/rclone/rclone/fs/accounting.(*StatsInfo).averageLoop(0xc0006a45a0, {0x2d49658, 0xc0006979a0})
/workspaces/rclone/fs/accounting/stats.go:352 +0x145
created by github.com/rclone/rclone/fs/accounting.(*StatsInfo)._startAverageLoop in goroutine 8958
/workspaces/rclone/fs/accounting/stats.go:389 +0x11a

goroutine 9590 [select]:
net/http.(*persistConn).writeLoop(0xc0001ecb40)
/usr/local/go/src/net/http/transport.go:2590 +0xe7
created by net/http.(*Transport).dialConn in goroutine 9502
/usr/local/go/src/net/http/transport.go:1945 +0x17a5

goroutine 9551 [select]:
net/http.(*persistConn).writeLoop(0xc0001ed320)
/usr/local/go/src/net/http/transport.go:2590 +0xe7
created by net/http.(*Transport).dialConn in goroutine 9573
/usr/local/go/src/net/http/transport.go:1945 +0x17a5

goroutine 9592 [select]:
net/http.(*persistConn).writeLoop(0xc0006219e0)
/usr/local/go/src/net/http/transport.go:2590 +0xe7
created by net/http.(*Transport).dialConn in goroutine 9541
/usr/local/go/src/net/http/transport.go:1945 +0x17a5

goroutine 9714 [IO wait]:
internal/poll.runtime_pollWait(0x7396a438e850, 0x72)
/usr/local/go/src/runtime/netpoll.go:351 +0x85
internal/poll.(*pollDesc).wait(0xc000a94000?, 0xc000ab7500?, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x27
internal/poll.(*pollDesc).waitRead(...)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000a94000, {0xc000ab7500, 0x1500, 0x1500})
/usr/local/go/src/internal/poll/fd_unix.go:165 +0x27a
net.(*netFD).Read(0xc000a94000, {0xc000ab7500?, 0x14f3?, 0xc000176200?})
/usr/local/go/src/net/fd_posix.go:55 +0x25
net.(*conn).Read(0xc000a00000, {0xc000ab7500?, 0x5?, 0xd?})
/usr/local/go/src/net/net.go:194 +0x45
github.com/rclone/rclone/fs/fshttp.(*timeoutConn).Read(0xc0008920c0, {0xc000ab7500?, 0x7396a438c2a8?, 0x7396eecee5c0?})
/workspaces/rclone/fs/fshttp/dialer.go:111 +0x29
crypto/tls.(*atLeastReader).Read(0xc000a7a3c0, {0xc000ab7500?, 0x4205a80?, 0xc000ea29c8?})
/usr/local/go/src/crypto/tls/conn.go:809 +0x3b
bytes.(*Buffer).ReadFrom(0xc00065ad38, {0x2d22da0, 0xc000a7a3c0})
/usr/local/go/src/bytes/buffer.go:211 +0x98
crypto/tls.(*Conn).readFromUntil(0xc00065aa88, {0x7396a460f100, 0xc0008920c0}, 0x442674?)
/usr/local/go/src/crypto/tls/conn.go:831 +0xde
crypto/tls.(*Conn).readRecordOrCCS(0xc00065aa88, 0x0)
/usr/local/go/src/crypto/tls/conn.go:629 +0x3cf
crypto/tls.(*Conn).readRecord(...)
/usr/local/go/src/crypto/tls/conn.go:591
crypto/tls.(*Conn).Read(0xc00065aa88, {0xc0009af000, 0x1000, 0xc00074a540?})
/usr/local/go/src/crypto/tls/conn.go:1385 +0x145
net/http.(*persistConn).Read(0xc000698b40, {0xc0009af000?, 0x80ff05?, 0x2d1f8a0?})
/usr/local/go/src/net/http/transport.go:2122 +0x47
bufio.(*Reader).fill(0xc000b7f440)
/usr/local/go/src/bufio/bufio.go:113 +0x103
bufio.(*Reader).Peek(0xc000b7f440, 0x1)
/usr/local/go/src/bufio/bufio.go:152 +0x53
net/http.(*persistConn).readLoop(0xc000698b40)
/usr/local/go/src/net/http/transport.go:2275 +0x172
created by net/http.(*Transport).dialConn in goroutine 9626
/usr/local/go/src/net/http/transport.go:1944 +0x174f

goroutine 9715 [select]:
net/http.(*persistConn).writeLoop(0xc000698b40)
/usr/local/go/src/net/http/transport.go:2590 +0xe7
created by net/http.(*Transport).dialConn in goroutine 9626
/usr/local/go/src/net/http/transport.go:1945 +0x17a5

goroutine 2298 [chan receive, 7 minutes]:
github.com/rclone/rclone/lib/atexit.Register.func1.1()
/workspaces/rclone/lib/atexit/atexit.go:45 +0x29
created by github.com/rclone/rclone/lib/atexit.Register.func1 in goroutine 2280
/workspaces/rclone/lib/atexit/atexit.go:44 +0x68

goroutine 9550 [IO wait]:
internal/poll.runtime_pollWait(0x7396eea68c68, 0x72)
/usr/local/go/src/runtime/netpoll.go:351 +0x85
internal/poll.(*pollDesc).wait(0xc000900680?, 0xc000ab6000?, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x27
internal/poll.(*pollDesc).waitRead(...)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000900680, {0xc000ab6000, 0x1500, 0x1500})
/usr/local/go/src/internal/poll/fd_unix.go:165 +0x27a
net.(*netFD).Read(0xc000900680, {0xc000ab6000?, 0x0?, 0x0?})
/usr/local/go/src/net/fd_posix.go:55 +0x25
net.(*conn).Read(0xc000144250, {0xc000ab6000?, 0x30fff799dc1c9d03?, 0xc00099e788?})
/usr/local/go/src/net/net.go:194 +0x45
github.com/rclone/rclone/fs/fshttp.(*timeoutConn).Read(0xc000313bf0, {0xc000ab6000?, 0x7396a464cd48?, 0x7396eecf0b80?})
/workspaces/rclone/fs/fshttp/dialer.go:111 +0x29
crypto/tls.(*atLeastReader).Read(0xc0005a8840, {0xc000ab6000?, 0x3c?, 0xc00061cf30?})
/usr/local/go/src/crypto/tls/conn.go:809 +0x3b
bytes.(*Buffer).ReadFrom(0xc0007b89b8, {0x2d22da0, 0xc0005a8840})
/usr/local/go/src/bytes/buffer.go:211 +0x98
crypto/tls.(*Conn).readFromUntil(0xc0007b8708, {0x7396a460f100, 0xc000313bf0}, 0x442674?)
/usr/local/go/src/crypto/tls/conn.go:831 +0xde
crypto/tls.(*Conn).readRecordOrCCS(0xc0007b8708, 0x0)
/usr/local/go/src/crypto/tls/conn.go:629 +0x3cf
crypto/tls.(*Conn).readRecord(...)
/usr/local/go/src/crypto/tls/conn.go:591
crypto/tls.(*Conn).Read(0xc0007b8708, {0xc000b80000, 0x1000, 0x7396eecf0b80?})
/usr/local/go/src/crypto/tls/conn.go:1385 +0x145
net/http.(*persistConn).Read(0xc0001ed320, {0xc000b80000?, 0x4124e5?, 0x68?})
/usr/local/go/src/net/http/transport.go:2122 +0x47
bufio.(*Reader).fill(0xc0018973e0)
/usr/local/go/src/bufio/bufio.go:113 +0x103
bufio.(*Reader).Peek(0xc0018973e0, 0x1)
/usr/local/go/src/bufio/bufio.go:152 +0x53
net/http.(*persistConn).readLoop(0xc0001ed320)
/usr/local/go/src/net/http/transport.go:2275 +0x172
created by net/http.(*Transport).dialConn in goroutine 9573
/usr/local/go/src/net/http/transport.go:1944 +0x174f

goroutine 9591 [IO wait]:
internal/poll.runtime_pollWait(0x7396eea683a8, 0x72)
/usr/local/go/src/runtime/netpoll.go:351 +0x85
internal/poll.(*pollDesc).wait(0xc000347b80?, 0xc000ba6000?, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x27
internal/poll.(*pollDesc).waitRead(...)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000347b80, {0xc000ba6000, 0x1500, 0x1500})
/usr/local/go/src/internal/poll/fd_unix.go:165 +0x27a
net.(*netFD).Read(0xc000347b80, {0xc000ba6000?, 0x47d5e5?, 0x0?})
/usr/local/go/src/net/fd_posix.go:55 +0x25
net.(*conn).Read(0xc0008560f0, {0xc000ba6000?, 0xc0000b8950?, 0xa835a3?})
/usr/local/go/src/net/net.go:194 +0x45
github.com/rclone/rclone/fs/fshttp.(*timeoutConn).Read(0xc0005a86f0, {0xc000ba6000?, 0x7396a44cb268?, 0x7396eecee108?})
/workspaces/rclone/fs/fshttp/dialer.go:111 +0x29
crypto/tls.(*atLeastReader).Read(0xc000b87398, {0xc000ba6000?, 0x100000000410c66?, 0x461d9e?})
/usr/local/go/src/crypto/tls/conn.go:809 +0x3b
bytes.(*Buffer).ReadFrom(0xc0001fc2b8, {0x2d22da0, 0xc000b87398})
/usr/local/go/src/bytes/buffer.go:211 +0x98
crypto/tls.(*Conn).readFromUntil(0xc0001fc008, {0x7396a460f100, 0xc0005a86f0}, 0x442674?)
/usr/local/go/src/crypto/tls/conn.go:831 +0xde
crypto/tls.(*Conn).readRecordOrCCS(0xc0001fc008, 0x0)
/usr/local/go/src/crypto/tls/conn.go:629 +0x3cf
crypto/tls.(*Conn).readRecord(...)
/usr/local/go/src/crypto/tls/conn.go:591
crypto/tls.(*Conn).Read(0xc0001fc008, {0xc000b24000, 0x1000, 0x7396eecee108?})
/usr/local/go/src/crypto/tls/conn.go:1385 +0x145
net/http.(*persistConn).Read(0xc0006219e0, {0xc000b24000?, 0x4124e5?, 0x68?})
/usr/local/go/src/net/http/transport.go:2122 +0x47
bufio.(*Reader).fill(0xc0008427e0)
/usr/local/go/src/bufio/bufio.go:113 +0x103
bufio.(*Reader).Peek(0xc0008427e0, 0x1)
/usr/local/go/src/bufio/bufio.go:152 +0x53
net/http.(*persistConn).readLoop(0xc0006219e0)
/usr/local/go/src/net/http/transport.go:2275 +0x172
created by net/http.(*Transport).dialConn in goroutine 9541
/usr/local/go/src/net/http/transport.go:1944 +0x174f

goroutine 9589 [IO wait]:
internal/poll.runtime_pollWait(0x7396eea68920, 0x72)
/usr/local/go/src/runtime/netpoll.go:351 +0x85
internal/poll.(*pollDesc).wait(0xc000a94100?, 0xc00087c000?, 0x0)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x27
internal/poll.(*pollDesc).waitRead(...)
/usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000a94100, {0xc00087c000, 0x1500, 0x1500})
/usr/local/go/src/internal/poll/fd_unix.go:165 +0x27a
net.(*netFD).Read(0xc000a94100, {0xc00087c000?, 0x0?, 0x0?})
/usr/local/go/src/net/fd_posix.go:55 +0x25
net.(*conn).Read(0xc000144060, {0xc00087c000?, 0x7396eea253e0?, 0x6?})
/usr/local/go/src/net/net.go:194 +0x45
github.com/rclone/rclone/fs/fshttp.(*timeoutConn).Read(0xc000312840, {0xc00087c000?, 0x7396eea253e0?, 0x7396eecefd58?})
/workspaces/rclone/fs/fshttp/dialer.go:111 +0x29
crypto/tls.(*atLeastReader).Read(0xc000d48018, {0xc00087c000?, 0xc0007b8668?, 0xc0000b49c8?})
/usr/local/go/src/crypto/tls/conn.go:809 +0x3b
bytes.(*Buffer).ReadFrom(0xc0007b8638, {0x2d22da0, 0xc000d48018})
/usr/local/go/src/bytes/buffer.go:211 +0x98
crypto/tls.(*Conn).readFromUntil(0xc0007b8388, {0x7396a460f100, 0xc000312840}, 0x442674?)
/usr/local/go/src/crypto/tls/conn.go:831 +0xde
crypto/tls.(*Conn).readRecordOrCCS(0xc0007b8388, 0x0)
/usr/local/go/src/crypto/tls/conn.go:629 +0x3cf
crypto/tls.(*Conn).readRecord(...)
/usr/local/go/src/crypto/tls/conn.go:591
crypto/tls.(*Conn).Read(0xc0007b8388, {0xc000aa0000, 0x1000, 0xc00074a540?})
/usr/local/go/src/crypto/tls/conn.go:1385 +0x145
net/http.(*persistConn).Read(0xc0001ecb40, {0xc000aa0000?, 0x80ff05?, 0x2d1f8a0?})
/usr/local/go/src/net/http/transport.go:2122 +0x47
bufio.(*Reader).fill(0xc000bb3f20)
/usr/local/go/src/bufio/bufio.go:113 +0x103
bufio.(*Reader).Peek(0xc000bb3f20, 0x1)
/usr/local/go/src/bufio/bufio.go:152 +0x53
net/http.(*persistConn).readLoop(0xc0001ecb40)
/usr/local/go/src/net/http/transport.go:2275 +0x172
created by net/http.(*Transport).dialConn in goroutine 9502
/usr/local/go/src/net/http/transport.go:1944 +0x174f

goroutine 9702 [select]:
net/http.(*persistConn).roundTrip(0xc000698b40, 0xc0004300a0)
/usr/local/go/src/net/http/transport.go:2826 +0x785
net/http.(*Transport).roundTrip(0xc00014a000, 0xc0009a6000)
/usr/local/go/src/net/http/transport.go:696 +0xb9a
net/http.(*Transport).RoundTrip(...)
/usr/local/go/src/net/http/roundtrip.go:30
github.com/rclone/rclone/fs/fshttp.(*Transport).RoundTrip(0xc00011a540, 0xc0009a6000)
/workspaces/rclone/fs/fshttp/http.go:496 +0x345
net/http.send(0xc0009a6000, {0x2d21540, 0xc00011a540}, {0x6fea01?, 0xc00098c188?, 0x0?})
/usr/local/go/src/net/http/client.go:259 +0x5e2
net/http.(*Client).send(0xc00074a360, 0xc0009a6000, {0xc000001360?, 0x739600002ce0?, 0x0?})
/usr/local/go/src/net/http/client.go:180 +0x91
net/http.(*Client).do(0xc00074a360, 0xc0009a6000)
/usr/local/go/src/net/http/client.go:728 +0x989
net/http.(*Client).Do(...)
/usr/local/go/src/net/http/client.go:587
github.com/rclone/rclone/lib/rest.(*Client).Call(0xc000696c30, {0x2d49620, 0xc0003587e0}, 0xc000851c38)
/workspaces/rclone/lib/rest/rest.go:353 +0xd67
github.com/rclone/rclone/backend/terabox.(*Fs).apiExec(0xc00072a280, {0x2d49620, 0xc0003587e0}, 0xc000851c38, {0x2201de0, 0xc0004da240})
/workspaces/rclone/backend/terabox/api.go:107 +0x7c5
github.com/rclone/rclone/backend/terabox.(*Fs)._apiFileUploadChunk(0xc00072a280, {0x2d49620, 0xc0003587e0}, {0xc00069ad80, 0x20}, {0xc00069c000, 0x3f}, 0x0, 0x6, {0xc002d0c000, ...}, ...)
/workspaces/rclone/backend/terabox/api.go:715 +0x80f
github.com/rclone/rclone/backend/terabox.(*Fs).apiFileUpload.func4(0xc00089e080)
/workspaces/rclone/backend/terabox/api.go:559 +0x1fd
created by github.com/rclone/rclone/backend/terabox.(*Fs).apiFileUpload in goroutine 9593
/workspaces/rclone/backend/terabox/api.go:541 +0x5c9
exit status 2
FAIL github.com/rclone/rclone/fs/sync 601.199s

result:

panic: test timed out after 10m0s
        running tests:
                TestSyncConcurrentTruncate (34s)

cd fs/operations && go test -v -remote tb:

Tests
=== RUN   TestDoMultiThreadCopy
--- PASS: TestDoMultiThreadCopy (0.00s)
=== RUN   TestMultithreadCalculateNumChunks
=== RUN   TestMultithreadCalculateNumChunks/{size:1_chunkSize:65536_wantNumChunks:1}
=== RUN   TestMultithreadCalculateNumChunks/{size:1048576_chunkSize:1_wantNumChunks:1048576}
=== RUN   TestMultithreadCalculateNumChunks/{size:1048576_chunkSize:2_wantNumChunks:524288}
=== RUN   TestMultithreadCalculateNumChunks/{size:1048577_chunkSize:2_wantNumChunks:524289}
=== RUN   TestMultithreadCalculateNumChunks/{size:1048575_chunkSize:2_wantNumChunks:524288}
--- PASS: TestMultithreadCalculateNumChunks (0.00s)
    --- PASS: TestMultithreadCalculateNumChunks/{size:1_chunkSize:65536_wantNumChunks:1} (0.00s)
    --- PASS: TestMultithreadCalculateNumChunks/{size:1048576_chunkSize:1_wantNumChunks:1048576} (0.00s)
    --- PASS: TestMultithreadCalculateNumChunks/{size:1048576_chunkSize:2_wantNumChunks:524288} (0.00s)
    --- PASS: TestMultithreadCalculateNumChunks/{size:1048577_chunkSize:2_wantNumChunks:524289} (0.00s)
    --- PASS: TestMultithreadCalculateNumChunks/{size:1048575_chunkSize:2_wantNumChunks:524288} (0.00s)
=== RUN   TestMultithreadCopy
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    multithread_test.go:119: multithread writing not supported
2026/03/03 15:56:36 ERROR : error listing: directory not found
--- SKIP: TestMultithreadCopy (0.38s)
=== RUN   TestMultithreadCopyAbort
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    multithread_test.go:119: multithread writing not supported
2026/03/03 15:56:36 ERROR : error listing: directory not found
--- SKIP: TestMultithreadCopyAbort (0.51s)
=== RUN   TestSizeDiffers
--- PASS: TestSizeDiffers (0.00s)
=== RUN   TestReOpen
=== RUN   TestReOpen/Normal
=== RUN   TestReOpen/Normal/Basics
=== RUN   TestReOpen/Normal/ErrorAtStart
=== RUN   TestReOpen/Normal/WithErrors
=== RUN   TestReOpen/Normal/TooManyErrors
=== RUN   TestReOpen/Normal/ReadAt
=== RUN   TestReOpen/Normal/Seek
=== RUN   TestReOpen/Normal/AccountRead
=== RUN   TestReOpen/Normal/AccountReadDelay
=== RUN   TestReOpen/Normal/AccountReadError
=== RUN   TestReOpen/WithRangeOption
=== RUN   TestReOpen/WithRangeOption/Basics
=== RUN   TestReOpen/WithRangeOption/ErrorAtStart
=== RUN   TestReOpen/WithRangeOption/WithErrors
=== RUN   TestReOpen/WithRangeOption/TooManyErrors
=== RUN   TestReOpen/WithRangeOption/ReadAt
=== RUN   TestReOpen/WithRangeOption/Seek
=== RUN   TestReOpen/WithRangeOption/AccountRead
=== RUN   TestReOpen/WithRangeOption/AccountReadDelay
=== RUN   TestReOpen/WithRangeOption/AccountReadError
=== RUN   TestReOpen/WithSeekOption
=== RUN   TestReOpen/WithSeekOption/Basics
=== RUN   TestReOpen/WithSeekOption/ErrorAtStart
=== RUN   TestReOpen/WithSeekOption/WithErrors
=== RUN   TestReOpen/WithSeekOption/TooManyErrors
=== RUN   TestReOpen/WithSeekOption/ReadAt
=== RUN   TestReOpen/WithSeekOption/Seek
=== RUN   TestReOpen/WithSeekOption/AccountRead
=== RUN   TestReOpen/WithSeekOption/AccountReadDelay
=== RUN   TestReOpen/WithSeekOption/AccountReadError
=== RUN   TestReOpen/UnknownSize
=== RUN   TestReOpen/UnknownSize/Basics
=== RUN   TestReOpen/UnknownSize/ErrorAtStart
=== RUN   TestReOpen/UnknownSize/WithErrors
=== RUN   TestReOpen/UnknownSize/TooManyErrors
=== RUN   TestReOpen/UnknownSize/ReadAt
=== RUN   TestReOpen/UnknownSize/Seek
=== RUN   TestReOpen/UnknownSize/AccountRead
=== RUN   TestReOpen/UnknownSize/AccountReadDelay
=== RUN   TestReOpen/UnknownSize/AccountReadError
--- PASS: TestReOpen (0.00s)
    --- PASS: TestReOpen/Normal (0.00s)
        --- PASS: TestReOpen/Normal/Basics (0.00s)
        --- PASS: TestReOpen/Normal/ErrorAtStart (0.00s)
        --- PASS: TestReOpen/Normal/WithErrors (0.00s)
        --- PASS: TestReOpen/Normal/TooManyErrors (0.00s)
        --- PASS: TestReOpen/Normal/ReadAt (0.00s)
        --- PASS: TestReOpen/Normal/Seek (0.00s)
        --- PASS: TestReOpen/Normal/AccountRead (0.00s)
        --- PASS: TestReOpen/Normal/AccountReadDelay (0.00s)
        --- PASS: TestReOpen/Normal/AccountReadError (0.00s)
    --- PASS: TestReOpen/WithRangeOption (0.00s)
        --- PASS: TestReOpen/WithRangeOption/Basics (0.00s)
        --- PASS: TestReOpen/WithRangeOption/ErrorAtStart (0.00s)
        --- PASS: TestReOpen/WithRangeOption/WithErrors (0.00s)
        --- PASS: TestReOpen/WithRangeOption/TooManyErrors (0.00s)
        --- PASS: TestReOpen/WithRangeOption/ReadAt (0.00s)
        --- PASS: TestReOpen/WithRangeOption/Seek (0.00s)
        --- PASS: TestReOpen/WithRangeOption/AccountRead (0.00s)
        --- PASS: TestReOpen/WithRangeOption/AccountReadDelay (0.00s)
        --- PASS: TestReOpen/WithRangeOption/AccountReadError (0.00s)
    --- PASS: TestReOpen/WithSeekOption (0.00s)
        --- PASS: TestReOpen/WithSeekOption/Basics (0.00s)
        --- PASS: TestReOpen/WithSeekOption/ErrorAtStart (0.00s)
        --- PASS: TestReOpen/WithSeekOption/WithErrors (0.00s)
        --- PASS: TestReOpen/WithSeekOption/TooManyErrors (0.00s)
        --- PASS: TestReOpen/WithSeekOption/ReadAt (0.00s)
        --- PASS: TestReOpen/WithSeekOption/Seek (0.00s)
        --- PASS: TestReOpen/WithSeekOption/AccountRead (0.00s)
        --- PASS: TestReOpen/WithSeekOption/AccountReadDelay (0.00s)
        --- PASS: TestReOpen/WithSeekOption/AccountReadError (0.00s)
    --- PASS: TestReOpen/UnknownSize (0.00s)
        --- PASS: TestReOpen/UnknownSize/Basics (0.00s)
        --- PASS: TestReOpen/UnknownSize/ErrorAtStart (0.00s)
        --- PASS: TestReOpen/UnknownSize/WithErrors (0.00s)
        --- PASS: TestReOpen/UnknownSize/TooManyErrors (0.00s)
        --- PASS: TestReOpen/UnknownSize/ReadAt (0.00s)
        --- PASS: TestReOpen/UnknownSize/Seek (0.00s)
        --- PASS: TestReOpen/UnknownSize/AccountRead (0.00s)
        --- PASS: TestReOpen/UnknownSize/AccountReadDelay (0.00s)
        --- PASS: TestReOpen/UnknownSize/AccountReadError (0.00s)
=== RUN   TestCheck
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "rutabaga" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestCheck (2.46s)
=== RUN   TestCheckFsError
2026/03/03 15:56:39 ERROR : Local file system at /workspaces/rclone/fs/operations/nonexistent: error reading source root directory: directory not found
2026/03/03 15:56:39 NOTICE: Local file system at /workspaces/rclone/fs/operations/nonexistent: 0 differences found
2026/03/03 15:56:39 NOTICE: Local file system at /workspaces/rclone/fs/operations/nonexistent: 3 errors while checking
--- PASS: TestCheckFsError (0.00s)
=== RUN   TestCheckDownload
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "rutabaga" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestCheckDownload (1.54s)
=== RUN   TestCheckSizeOnly
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "rutabaga" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestCheckSizeOnly (1.53s)
=== RUN   TestCheckEqualReaders
--- PASS: TestCheckEqualReaders (0.00s)
=== RUN   TestParseSumFile
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "test.sum" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestParseSumFile (1.74s)
=== RUN   TestCheckSum
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    check_test.go:350: Terabox root 'rclone-test-zulizaz5caya/data' lacks md5, skipping
--- SKIP: TestCheckSum (1.96s)
=== RUN   TestCheckSumDownload
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "data/banana" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestCheckSumDownload (2.98s)
=== RUN   TestApplyTransforms
    run.go:185: Remote "Terabox root 'rclone-test-gunuwal7hori'", Local "Local file system at /tmp/rclone3754937723", Modify Window "876000h0m0s"
    run.go:290: Failed to put "hello, world!" to "Terabox root 'rclone-test-gunuwal7hori'": jsToken not found
2026/03/03 15:56:52 NOTICE: purge failed: jsToken not found
--- FAIL: TestApplyTransforms (3.99s)
=== RUN   TestTruncateString
--- PASS: TestTruncateString (0.00s)
=== RUN   TestCopyFile
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
2026/03/03 15:56:53 ERROR : file1: Failed to copy: jsToken not found
    copy_test.go:114: 
                Error Trace:    /workspaces/rclone/fs/operations/copy_test.go:114
                Error:          Received unexpected error:
                                jsToken not found
                Test:           TestCopyFile
--- FAIL: TestCopyFile (1.83s)
=== RUN   TestCopyLongFile
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    copy_test.go:154: Test only runs on local
--- SKIP: TestCopyLongFile (0.62s)
=== RUN   TestCopyFileBackupDir
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "dst/file1" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestCopyFileBackupDir (1.72s)
=== RUN   TestCopyFileCompareDest
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
2026/03/03 15:57:01 ERROR : one: Failed to copy: jsToken not found
    copy_test.go:207: 
                Error Trace:    /workspaces/rclone/fs/operations/copy_test.go:207
                Error:          Received unexpected error:
                                jsToken not found
                Test:           TestCopyFileCompareDest
--- FAIL: TestCopyFileCompareDest (5.33s)
=== RUN   TestCopyFileCopyDest
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
2026/03/03 15:57:07 ERROR : one: Failed to copy: jsToken not found
    copy_test.go:290: 
                Error Trace:    /workspaces/rclone/fs/operations/copy_test.go:290
                Error:          Received unexpected error:
                                jsToken not found
                Test:           TestCopyFileCopyDest
--- FAIL: TestCopyFileCopyDest (5.63s)
=== RUN   TestCopyInplace
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    copy_test.go:371: Partial uploads not supported
--- SKIP: TestCopyInplace (0.62s)
=== RUN   TestCopyLongFileName
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    copy_test.go:404: Partial uploads not supported
--- SKIP: TestCopyLongFileName (0.62s)
=== RUN   TestCopyLongFileNameCollision
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    copy_test.go:437: Partial uploads not supported
--- SKIP: TestCopyLongFileNameCollision (0.61s)
=== RUN   TestCopyFileMaxTransfer
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
2026/03/03 15:57:10 ERROR : TestCopyFileMaxTransfer/file1: Failed to copy: jsToken not found
    copy_test.go:491: 
                Error Trace:    /workspaces/rclone/fs/operations/copy_test.go:491
                Error:          Received unexpected error:
                                jsToken not found
                Test:           TestCopyFileMaxTransfer
--- FAIL: TestCopyFileMaxTransfer (1.86s)
=== RUN   TestDeduplicateInteractive
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    dedupe_test.go:24: Can't test deduplicate - no duplicate files possible
--- SKIP: TestDeduplicateInteractive (0.69s)
=== RUN   TestDeduplicateSkip
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    dedupe_test.go:24: Can't test deduplicate - no duplicate files possible
--- SKIP: TestDeduplicateSkip (0.62s)
=== RUN   TestDeduplicateSizeOnly
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    dedupe_test.go:24: Can't test deduplicate - no duplicate files possible
--- SKIP: TestDeduplicateSizeOnly (0.63s)
=== RUN   TestDeduplicateFirst
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    dedupe_test.go:24: Can't test deduplicate - no duplicate files possible
--- SKIP: TestDeduplicateFirst (0.69s)
=== RUN   TestDeduplicateNewest
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    dedupe_test.go:24: Can't test deduplicate - no duplicate files possible
--- SKIP: TestDeduplicateNewest (0.61s)
=== RUN   TestDeduplicateNewestByHash
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    dedupe_test.go:36: Can't run this test without a hash
--- SKIP: TestDeduplicateNewestByHash (0.62s)
=== RUN   TestDeduplicateOldest
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    dedupe_test.go:24: Can't test deduplicate - no duplicate files possible
--- SKIP: TestDeduplicateOldest (0.91s)
=== RUN   TestDeduplicateLargest
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    dedupe_test.go:24: Can't test deduplicate - no duplicate files possible
--- SKIP: TestDeduplicateLargest (0.63s)
=== RUN   TestDeduplicateSmallest
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    dedupe_test.go:24: Can't test deduplicate - no duplicate files possible
--- SKIP: TestDeduplicateSmallest (0.64s)
=== RUN   TestDeduplicateRename
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    dedupe_test.go:24: Can't test deduplicate - no duplicate files possible
--- SKIP: TestDeduplicateRename (0.68s)
=== RUN   TestMergeDirs
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    dedupe_test.go:256: Can't merge directories
--- SKIP: TestMergeDirs (0.61s)
=== RUN   TestListDirSorted
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "a.txt" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestListDirSorted (1.55s)
=== RUN   TestListDirSortedFn
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "a.txt" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestListDirSortedFn (1.52s)
=== RUN   TestListJSON
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "file1" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestListJSON (1.74s)
=== RUN   TestStatJSON
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "file1" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestStatJSON (1.49s)
=== RUN   TestMkdir
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
--- PASS: TestMkdir (1.58s)
=== RUN   TestLsd
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "sub dir/hello world" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestLsd (1.57s)
=== RUN   TestLs
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "potato2" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestLs (1.61s)
=== RUN   TestLsWithFilesFrom
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "potato2" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestLsWithFilesFrom (1.54s)
=== RUN   TestLsLong
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "potato2" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestLsLong (1.47s)
=== RUN   TestHashSums
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "potato2" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestHashSums (1.48s)
=== RUN   TestHashSumsWithErrors
2026/03/03 15:57:34 ERROR : file1: hash unsupported: hash type not supported
--- PASS: TestHashSumsWithErrors (0.00s)
=== RUN   TestHashStream
--- PASS: TestHashStream (0.00s)
=== RUN   TestSuffixName
--- PASS: TestSuffixName (0.00s)
=== RUN   TestCount
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "potato2" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestCount (1.52s)
=== RUN   TestDelete
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "small" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestDelete (1.53s)
=== RUN   TestMaxDelete
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "small" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestMaxDelete (2.20s)
=== RUN   TestMaxDeleteSizeLargeFile
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "small" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestMaxDeleteSizeLargeFile (2.16s)
=== RUN   TestMaxDeleteSize
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "small" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestMaxDeleteSize (2.14s)
=== RUN   TestReadFile
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "ReadFile" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestReadFile (2.30s)
=== RUN   TestRetry
--- PASS: TestRetry (0.05s)
=== RUN   TestCat
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "file1" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestCat (1.53s)
=== RUN   TestPurge
    run.go:185: Remote "Terabox root 'rclone-test-macowel5xane'", Local "Local file system at /tmp/rclone3889587206", Modify Window "876000h0m0s"
    run.go:290: Failed to put "A1/B1/C1/one" to "Terabox root 'rclone-test-macowel5xane'": jsToken not found
2026/03/03 15:57:52 NOTICE: purge failed: jsToken not found
--- FAIL: TestPurge (4.30s)
=== RUN   TestRmdirsNoLeaveRoot
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
    run.go:290: Failed to put "A1/B1/C1/one" to "Terabox root 'rclone-test-zulizaz5caya'": jsToken not found
--- FAIL: TestRmdirsNoLeaveRoot (2.05s)
=== RUN   TestRmdirsLeaveRoot
    run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
2026/03/03 15:57:58 ERROR : A1/B1/C1: Failed to rmdir: jsToken not found
2026/03/03 15:57:59 ERROR : A1/B1: Failed to rmdir: directory not empty
    operations_test.go:762: 
                Error Trace:    /workspaces/rclone/fs/operations/operations_test.go:762
                Error:          Received unexpected error:
                                failed to remove directories: 2 errors: last error: directory not empty
                Test:           TestRmdirsLeaveRoot
    run.go:130: removing dir "A1/B1/C1" failed - try 1/3: jsToken not found
    run.go:130: removing dir "A1/B1/C1" failed - try 2/3: jsToken not found
    run.go:130: removing dir "A1/B1/C1" failed - try 3/3: jsToken not found
    run.go:133: removing dir "A1/B1/C1" failed: jsToken not found
    run.go:130: removing dir "A1/B1" failed - try 1/3: directory not empty
    run.go:130: removing dir "A1/B1" failed - try 2/3: directory not empty
    run.go:130: removing dir "A1/B1" failed - try 3/3: directory not empty
    run.go:133: removing dir "A1/B1" failed: directory not empty
    run.go:130: removing dir "A1" failed - try 1/3: directory not empty
    run.go:130: removing dir "A1" failed - try 2/3: directory not empty
    run.go:130: removing dir "A1" failed - try 3/3: directory not empty
    run.go:133: removing dir "A1" failed: directory not empty
    fstest.go:298: Sleeping for 1s for list eventual consistency: 1/3
    fstest.go:298: Sleeping for 2s for list eventual consistency: 2/3
    fstest.go:298: Sleeping for 4s for list eventual consistency: 3/3
    fstest.go:327: 
                Error Trace:    /workspaces/rclone/fstest/fstest.go:327
                                                        /workspaces/rclone/fstest/fstest.go:338
                                                        /workspaces/rclone/fstest/run.go:178
                                                        /workspaces/rclone/fstest/run.go:393
                                                        /usr/local/go/src/testing/testing.go:1211
                                                        /usr/local/go/src/testing/testing.go:1445
                                                        /usr/local/go/src/testing/testing.go:1786
                                                        /usr/local/go/src/runtime/panic.go:636
                                                        /usr/local/go/src/testing/testing.go:1041
                                                        /workspaces/rclone/fs/operations/operations_test.go:762
                Error:          Not equal: 
                                expected: []string{}
                                actual  : []string{"A1", "A1/B1", "A1/B1/C1"}
                            Diff:
                            --- Expected
                            +++ Actual
                            @@ -1,2 +1,5 @@
                            -([]string) {
                            +([]string) (len=3) {
                            + (string) (len=2) "A1",
                            + (string) (len=5) "A1/B1",
                            + (string) (len=8) "A1/B1/C1"
                             }
            Test:           TestRmdirsLeaveRoot
            Messages:       directories

--- FAIL: TestRmdirsLeaveRoot (31.09s)
=== RUN TestRmdirsWithFilter
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
2026/03/03 15:58:30 ERROR : A1/B1/C1: Failed to rmdir: jsToken not found
2026/03/03 15:58:30 ERROR : A1/B1: Failed to rmdir: directory not empty
operations_test.go:801:
Error Trace: /workspaces/rclone/fs/operations/operations_test.go:801
Error: Received unexpected error:
failed to remove directories: 2 errors: last error: directory not empty
Test: TestRmdirsWithFilter
run.go:130: removing dir "A1/B1/C1" failed - try 1/3: jsToken not found
run.go:130: removing dir "A1/B1/C1" failed - try 2/3: jsToken not found
run.go:130: removing dir "A1/B1/C1" failed - try 3/3: jsToken not found
run.go:133: removing dir "A1/B1/C1" failed: jsToken not found
run.go:130: removing dir "A1/B1" failed - try 1/3: directory not empty
run.go:130: removing dir "A1/B1" failed - try 2/3: directory not empty
run.go:130: removing dir "A1/B1" failed - try 3/3: directory not empty
run.go:133: removing dir "A1/B1" failed: directory not empty
run.go:130: removing dir "A1" failed - try 1/3: directory not empty
run.go:130: removing dir "A1" failed - try 2/3: directory not empty
run.go:130: removing dir "A1" failed - try 3/3: directory not empty
run.go:133: removing dir "A1" failed: directory not empty
fstest.go:298: Sleeping for 1s for list eventual consistency: 1/3
fstest.go:298: Sleeping for 2s for list eventual consistency: 2/3
fstest.go:298: Sleeping for 4s for list eventual consistency: 3/3
fstest.go:327:
Error Trace: /workspaces/rclone/fstest/fstest.go:327
/workspaces/rclone/fstest/fstest.go:338
/workspaces/rclone/fstest/run.go:178
/workspaces/rclone/fstest/run.go:393
/usr/local/go/src/testing/testing.go:1211
/usr/local/go/src/testing/testing.go:1445
/usr/local/go/src/testing/testing.go:1786
/usr/local/go/src/runtime/panic.go:636
/usr/local/go/src/testing/testing.go:1041
/workspaces/rclone/fs/operations/operations_test.go:801
Error: Not equal:
expected: []string{}
actual : []string{"A1", "A1/B1", "A1/B1/C1"}

                            Diff:
                            --- Expected
                            +++ Actual
                            @@ -1,2 +1,5 @@
                            -([]string) {
                            +([]string) (len=3) {
                            + (string) (len=2) "A1",
                            + (string) (len=5) "A1/B1",
                            + (string) (len=8) "A1/B1/C1"
                             }
            Test:           TestRmdirsWithFilter
            Messages:       directories

--- FAIL: TestRmdirsWithFilter (31.33s)
=== RUN TestCopyURL
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
2026/03/03 15:58:59 ERROR : file1: Post request put error: jsToken not found
operations_test.go:843:
Error Trace: /workspaces/rclone/fs/operations/operations_test.go:843
Error: Received unexpected error:
jsToken not found
Test: TestCopyURL
run.go:130: removing dir "A1/B1/C1" failed - try 1/3: jsToken not found
run.go:130: removing dir "A1/B1/C1" failed - try 2/3: jsToken not found
run.go:130: removing dir "A1/B1/C1" failed - try 3/3: jsToken not found
run.go:133: removing dir "A1/B1/C1" failed: jsToken not found
run.go:130: removing dir "A1/B1" failed - try 1/3: directory not empty
run.go:130: removing dir "A1/B1" failed - try 2/3: directory not empty
run.go:130: removing dir "A1/B1" failed - try 3/3: directory not empty
run.go:133: removing dir "A1/B1" failed: directory not empty
run.go:130: removing dir "A1" failed - try 1/3: directory not empty
run.go:130: removing dir "A1" failed - try 2/3: directory not empty
run.go:130: removing dir "A1" failed - try 3/3: directory not empty
run.go:133: removing dir "A1" failed: directory not empty
fstest.go:298: Sleeping for 1s for list eventual consistency: 1/3
fstest.go:298: Sleeping for 2s for list eventual consistency: 2/3
fstest.go:298: Sleeping for 4s for list eventual consistency: 3/3
fstest.go:327:
Error Trace: /workspaces/rclone/fstest/fstest.go:327
/workspaces/rclone/fstest/fstest.go:338
/workspaces/rclone/fstest/run.go:178
/workspaces/rclone/fstest/run.go:393
/usr/local/go/src/testing/testing.go:1211
/usr/local/go/src/testing/testing.go:1445
/usr/local/go/src/testing/testing.go:1786
/usr/local/go/src/runtime/panic.go:636
/usr/local/go/src/testing/testing.go:1041
/workspaces/rclone/fs/operations/operations_test.go:843
Error: Not equal:
expected: []string{}
actual : []string{"A1", "A1/B1", "A1/B1/C1"}

                            Diff:
                            --- Expected
                            +++ Actual
                            @@ -1,2 +1,5 @@
                            -([]string) {
                            +([]string) (len=3) {
                            + (string) (len=2) "A1",
                            + (string) (len=5) "A1/B1",
                            + (string) (len=8) "A1/B1/C1"
                             }
            Test:           TestCopyURL
            Messages:       directories

--- FAIL: TestCopyURL (29.24s)
=== RUN TestCopyURLToWriter
--- PASS: TestCopyURLToWriter (0.00s)
=== RUN TestMoveFile
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
2026/03/03 15:59:27 ERROR : file1: Failed to copy: jsToken not found
2026/03/03 15:59:27 ERROR : file1: Not deleting source as copy failed: jsToken not found
operations_test.go:940:
Error Trace: /workspaces/rclone/fs/operations/operations_test.go:940
Error: Received unexpected error:
jsToken not found
Test: TestMoveFile
run.go:130: removing dir "A1/B1/C1" failed - try 1/3: jsToken not found
run.go:130: removing dir "A1/B1/C1" failed - try 2/3: jsToken not found
run.go:130: removing dir "A1/B1/C1" failed - try 3/3: jsToken not found
run.go:133: removing dir "A1/B1/C1" failed: jsToken not found
run.go:130: removing dir "A1/B1" failed - try 1/3: directory not empty
run.go:130: removing dir "A1/B1" failed - try 2/3: directory not empty
run.go:130: removing dir "A1/B1" failed - try 3/3: directory not empty
run.go:133: removing dir "A1/B1" failed: directory not empty
run.go:130: removing dir "A1" failed - try 1/3: directory not empty
run.go:130: removing dir "A1" failed - try 2/3: directory not empty
run.go:130: removing dir "A1" failed - try 3/3: directory not empty
run.go:133: removing dir "A1" failed: directory not empty
fstest.go:298: Sleeping for 1s for list eventual consistency: 1/3
fstest.go:298: Sleeping for 2s for list eventual consistency: 2/3
fstest.go:298: Sleeping for 4s for list eventual consistency: 3/3
fstest.go:327:
Error Trace: /workspaces/rclone/fstest/fstest.go:327
/workspaces/rclone/fstest/fstest.go:338
/workspaces/rclone/fstest/run.go:178
/workspaces/rclone/fstest/run.go:393
/usr/local/go/src/testing/testing.go:1211
/usr/local/go/src/testing/testing.go:1445
/usr/local/go/src/testing/testing.go:1786
/usr/local/go/src/runtime/panic.go:636
/usr/local/go/src/testing/testing.go:1041
/workspaces/rclone/fs/operations/operations_test.go:940
Error: Not equal:
expected: []string{}
actual : []string{"A1", "A1/B1", "A1/B1/C1"}

                            Diff:
                            --- Expected
                            +++ Actual
                            @@ -1,2 +1,5 @@
                            -([]string) {
                            +([]string) (len=3) {
                            + (string) (len=2) "A1",
                            + (string) (len=5) "A1/B1",
                            + (string) (len=8) "A1/B1/C1"
                             }
            Test:           TestMoveFile
            Messages:       directories

--- FAIL: TestMoveFile (28.22s)
=== RUN TestMoveFileWithIgnoreExisting
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
2026/03/03 15:59:55 ERROR : file1: Failed to copy: jsToken not found
2026/03/03 15:59:55 ERROR : file1: Not deleting source as copy failed: jsToken not found
operations_test.go:968:
Error Trace: /workspaces/rclone/fs/operations/operations_test.go:968
Error: Received unexpected error:
jsToken not found
Test: TestMoveFileWithIgnoreExisting
run.go:130: removing dir "A1/B1/C1" failed - try 1/3: jsToken not found
run.go:130: removing dir "A1/B1/C1" failed - try 2/3: jsToken not found
--- FAIL: TestMoveFileWithIgnoreExisting (11.72s)
=== RUN TestCaseInsensitiveMoveFile
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
--- PASS: TestCaseInsensitiveMoveFile (0.70s)
=== RUN TestCaseInsensitiveMoveFileDryRun
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
--- PASS: TestCaseInsensitiveMoveFileDryRun (0.71s)
=== RUN TestMoveFileBackupDir
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
--- PASS: TestMoveFileBackupDir (13.96s)
=== RUN TestSameConfig
--- PASS: TestSameConfig (0.00s)
=== RUN TestSame
--- PASS: TestSame (0.00s)
=== RUN TestOverlappingFilterCheckWithoutFilter
--- PASS: TestOverlappingFilterCheckWithoutFilter (0.00s)
=== RUN TestOverlappingFilterCheckWithFilter
--- PASS: TestOverlappingFilterCheckWithFilter (0.00s)
=== RUN TestListFormat
--- PASS: TestListFormat (0.00s)
=== RUN TestDirMove
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
--- PASS: TestDirMove (39.32s)
=== RUN TestGetFsInfo
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
--- PASS: TestGetFsInfo (0.60s)
=== RUN TestRcat
=== RUN TestRcat/withChecksum=false,ignoreChecksum=false
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
2026/03/03 16:01:03 NOTICE: Terabox root 'rclone-test-zulizaz5caya': --checksum is in use but the source and destination have no hashes in common; falling back to --size-only
=== RUN TestRcat/withChecksum=true,ignoreChecksum=false
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
=== RUN TestRcat/withChecksum=false,ignoreChecksum=true
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
=== RUN TestRcat/withChecksum=true,ignoreChecksum=true
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
--- PASS: TestRcat (23.29s)
--- PASS: TestRcat/withChecksum=false,ignoreChecksum=false (6.03s)
--- PASS: TestRcat/withChecksum=true,ignoreChecksum=false (5.75s)
--- PASS: TestRcat/withChecksum=false,ignoreChecksum=true (5.65s)
--- PASS: TestRcat/withChecksum=true,ignoreChecksum=true (5.86s)
=== RUN TestRcatMetadata
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
operations_test.go:1540: Skipping as destination doesn't support user metadata
--- SKIP: TestRcatMetadata (0.57s)
=== RUN TestRcatSize
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
--- PASS: TestRcatSize (4.56s)
=== RUN TestRcatSizeMetadata
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
operations_test.go:1621: Skipping as destination doesn't support user metadata
--- SKIP: TestRcatSizeMetadata (0.56s)
=== RUN TestTouchDir
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
operations_test.go:1673: Skipping test as remote does not support modtime
--- SKIP: TestTouchDir (0.52s)
=== RUN TestMkdirMetadata
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
operations_test.go:1711: Skipping test as remote does not support MkdirMetadata
--- SKIP: TestMkdirMetadata (0.65s)
=== RUN TestMkdirModTime
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
operations_test.go:1730: Skipping test as remote does not support DirSetModTime or MkdirMetadata
--- SKIP: TestMkdirModTime (0.52s)
=== RUN TestCopyDirMetadata
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
operations_test.go:1751: Skipping test as remote does not support WriteDirMetadata or MkdirMetadata
--- SKIP: TestCopyDirMetadata (0.61s)
=== RUN TestSetDirModTime
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
operations_test.go:1787: Skipping test as remote does not support DirSetModTime or WriteDirSetModTime
--- SKIP: TestSetDirModTime (0.99s)
=== RUN TestDirsEqual
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
operations_test.go:1831: Skipping test as remote does not support WriteDirMetadata or MkdirMetadata
--- SKIP: TestDirsEqual (0.61s)
=== RUN TestRemoveExisting
run.go:185: Remote "Terabox root 'rclone-test-zulizaz5caya'", Local "Local file system at /tmp/rclone1244260674", Modify Window "876000h0m0s"
--- PASS: TestRemoveExisting (14.37s)
=== RUN TestRcAbout
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcAbout (0.00s)
=== RUN TestRcCleanup
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcCleanup (0.00s)
=== RUN TestRcCopyfile
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcCopyfile (0.00s)
=== RUN TestRcCopyurl
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcCopyurl (0.00s)
=== RUN TestRcDelete
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcDelete (0.00s)
=== RUN TestRcDeletefile
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcDeletefile (0.00s)
=== RUN TestRcList
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcList (0.00s)
=== RUN TestRcStat
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcStat (0.00s)
=== RUN TestRcSetTier
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcSetTier (0.00s)
=== RUN TestRcSetTierFile
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcSetTierFile (0.00s)
=== RUN TestRcMkdir
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcMkdir (0.00s)
=== RUN TestRcMovefile
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcMovefile (0.00s)
=== RUN TestRcPurge
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcPurge (0.00s)
=== RUN TestRcRmdir
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcRmdir (0.00s)
=== RUN TestRcRmdirs
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcRmdirs (0.00s)
=== RUN TestRcSize
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcSize (0.00s)
=== RUN TestRcPublicLink
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcPublicLink (0.00s)
=== RUN TestRcFsInfo
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcFsInfo (0.00s)
=== RUN TestUploadFile
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestUploadFile (0.00s)
=== RUN TestRcCommand
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcCommand (0.00s)
=== RUN TestRcDu
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcDu (0.00s)
=== RUN TestRcCheck
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcCheck (0.00s)
=== RUN TestRcHashsum
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcHashsum (0.00s)
=== RUN TestRcHashsumFile
rc_test.go:30: Skipping test on non local remote
--- SKIP: TestRcHashsumFile (0.00s)
FAIL
2026/03/03 16:01:49 NOTICE: purge failed: invalid character '<' looking for beginning of value
exit status 1
FAIL github.com/rclone/rclone/fs/operations 314.990s

result:

2026/03/03 16:01:49 NOTICE: purge failed: invalid character '<' looking for beginning of value
exit status 1
FAIL    github.com/rclone/rclone/fs/operations  314.990s

I see many jsToken not found error, I believe Terabox block requests when you very often request this token, that's why many tests could fail. It is not applicable for real every day usage. I'll try to find time on weekend to fix integrity tests.

@ncw Is rclone has some storage for temporary data between re-runs? It could to help fix jsToken error.

@x1arch
Copy link
Copy Markdown
Author

x1arch commented Mar 15, 2026

@ncw Thanks for the answer, that's was very kind of you.

UPD:

  • updated branch with last master commits;
  • updated docs with last master;
  • added test settings;
  • removed debug levels 2/3/4, instead use (-vvvvvvv --dump headers --dump responses --dump bodies);
  • added saving jsToken, premium and uploadHost to config file;
  • server side copy for now overwrite existing files. !!! Methods modified to async (because in sync variant overwrite not works, but Rclone require rewrite files with SSC), that's mean if try run concurrency this method, you will face with error couldn't copy file: You currently have unfinished tasks, please operate after completion;
image

@fidodido48
Copy link
Copy Markdown

fidodido48 commented Mar 28, 2026

$ go/bin/rclone.new version

rclone v1.74.0-beta.9545.d00cbdf49
- os/version: ubuntu 24.04 (64 bit)
- os/kernel: 6.17.0-1012-oem (x86_64)
- os/type: linux
- os/arch: amd64
- go/version: go1.26.1-X:nodwarf5
- go/linking: dynamic
- go/tags: none

I see increased 'invalid file name' error rate trying to copy (rclone copy):

2026/03/28 06:19:36 ERROR : [...]: Failed to copy: Invalid file name
2026/03/28 16:51:40 ERROR : [...]: Failed to copy: Invalid file name
2026/03/28 16:55:57 ERROR : [...]: Failed to copy: Invalid file name
2026/03/28 17:06:31 NOTICE: Failed to copy: Invalid file name
2026/03/28 17:33:20 ERROR : Attempt 3/3 failed with 1 errors and: Invalid file name

Sometimes it takes a few retries to finally push files thru (seen from 1 up to 6 in some cases). I've only pasted logs from today, but it has been going on for weeks now. It's happening way too often. I think this is a regression. I don't remember it being the issue on a previous version (v1.73.0-beta.9324.fca612283)

Also the operation not permitted error still not fixed when trying to delete a file on mounted remote (rclone mount). This might have something to do with the jsToken missing/expiration as usually a single retry fixes it.

@x1arch
Copy link
Copy Markdown
Author

x1arch commented Mar 28, 2026

@fidodido48 Never faced with permission issue, invalid file name saw a few times in tests, but test restart fix the issue. If you faces with it often, please run your operation with -vvvvvvv --dump headers --dump responses additional keys and share dump of terabox requests and responses.

@BowDown097
Copy link
Copy Markdown

@x1arch Can you look over my PR that adds support for public linking?

@ncw
Copy link
Copy Markdown
Member

ncw commented Mar 31, 2026

@x1arch wrote

Is rclone has some storage for temporary data between re-runs? It could to help fix jsToken error.

We normally store tokens in the config file. You can do this with the m configmap.Mapper

This looks like it is almost ready for merge - would you agree @x1arch ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.