mirror of
https://github.com/go-gitea/gitea.git
synced 2026-07-25 10:11:52 +00:00
Rename functions "util.Remove" (remove.go) to "util.RemoveWithRetry" (file_retry.go) and add comments to clarify their behaviors, also add tests. Refactor callers: when no concurrent access (cmd cli, migration, app init, test), use "os.Xxx" directly. More details are in `modules/util/file_retry.go` By the way, clean up OS (windows) detection, make FileURLToPath test always run
45 lines
916 B
Go
45 lines
916 B
Go
// Copyright 2026 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package util
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"syscall"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestRetryWhenFileBusy(t *testing.T) {
|
|
var callCount int
|
|
testErrPath := &os.PathError{Op: "test", Path: "test", Err: syscall.EBUSY}
|
|
fn := func() error {
|
|
if callCount == 2 {
|
|
return nil
|
|
}
|
|
callCount++
|
|
return testErrPath
|
|
}
|
|
|
|
callCount = 0
|
|
err := retryWhenFileBusyInternal(1, time.Millisecond, fn)
|
|
assert.Equal(t, testErrPath, err)
|
|
assert.Equal(t, 1, callCount)
|
|
|
|
callCount = 0
|
|
err = retryWhenFileBusyInternal(10, time.Millisecond, fn)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 2, callCount)
|
|
|
|
callCount = 0
|
|
err = retryWhenFileBusyInternal(10, time.Millisecond, func() error {
|
|
callCount++
|
|
return io.ErrUnexpectedEOF
|
|
})
|
|
assert.Equal(t, io.ErrUnexpectedEOF, err)
|
|
assert.Equal(t, 1, callCount)
|
|
}
|