Files
kopia/cli/command_repo_throttle_test.go
Jarek Kowalski 99eeb3c063 feat(cli): added CLI for controlling throttler (#1956)
Supported are:

```
$ kopia throttle set \
    --download-bytes-per-second=N | unlimited
    --upload-bytes-per-second=N | unlimited
    --read-requests-per-second=N | unlimited
    --write-requests-per-second=N | unlimited
    --list-requests-per-second=N | unlimited
    --concurrent-reads=N | unlimited
    --concurrent-writes=N | unlimited
```

To change parameters of a running server use:

```
$ kopia server throttle set \
    --address=<server-url> \
    --server-control-password=<password> \
    --download-bytes-per-second=N | unlimited
    --upload-bytes-per-second=N | unlimited
    --read-requests-per-second=N | unlimited
    --write-requests-per-second=N | unlimited
    --list-requests-per-second=N | unlimited
    --concurrent-reads=N | unlimited
    --concurrent-writes=N | unlimited
```
2022-05-18 01:27:06 -07:00

82 lines
2.6 KiB
Go

package cli_test
import (
"testing"
"github.com/stretchr/testify/require"
"github.com/kopia/kopia/internal/testutil"
"github.com/kopia/kopia/repo/blob/throttling"
"github.com/kopia/kopia/tests/testenv"
)
func TestRepoThrottle(t *testing.T) {
t.Parallel()
env := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, testenv.NewInProcRunner(t))
env.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", env.RepoDir)
defer env.RunAndExpectSuccess(t, "repo", "disconnect")
require.Equal(t, []string{
"Max Download Speed: (unlimited)",
"Max Upload Speed: (unlimited)",
"Max Read Requests Per Second: (unlimited)",
"Max Write Requests Per Second: (unlimited)",
"Max List Requests Per Second: (unlimited)",
"Max Concurrent Reads: (unlimited)",
"Max Concurrent Writes: (unlimited)",
}, env.RunAndExpectSuccess(t, "repo", "throttle", "get"))
env.RunAndExpectSuccess(t, "repo", "throttle", "set",
"--download-bytes-per-second=1000000000",
"--upload-bytes-per-second=2000000000",
"--read-requests-per-second=300",
"--write-requests-per-second=400",
"--list-requests-per-second=500",
"--concurrent-reads=300",
"--concurrent-writes=400",
)
env.RunAndExpectFailure(t, "repo", "throttle", "set", "--download-bytes-per-second=-30")
env.RunAndExpectFailure(t, "repo", "throttle", "set", "--concurrent-reads=-3")
require.Equal(t, []string{
"Max Download Speed: 1 GB/s",
"Max Upload Speed: 2 GB/s",
"Max Read Requests Per Second: 300",
"Max Write Requests Per Second: 400",
"Max List Requests Per Second: 500",
"Max Concurrent Reads: 300",
"Max Concurrent Writes: 400",
}, env.RunAndExpectSuccess(t, "repo", "throttle", "get"))
env.RunAndExpectSuccess(t, "repo", "throttle", "set",
"--upload-bytes-per-second=unlimited",
"--write-requests-per-second=unlimited",
)
require.Equal(t, []string{
"Max Download Speed: 1 GB/s",
"Max Upload Speed: (unlimited)",
"Max Read Requests Per Second: 300",
"Max Write Requests Per Second: (unlimited)",
"Max List Requests Per Second: 500",
"Max Concurrent Reads: 300",
"Max Concurrent Writes: 400",
}, env.RunAndExpectSuccess(t, "repo", "throttle", "get"))
var limits throttling.Limits
testutil.MustParseJSONLines(t, env.RunAndExpectSuccess(t, "repo", "throttle", "get", "--json"), &limits)
require.Equal(t, throttling.Limits{
ReadsPerSecond: 300,
WritesPerSecond: 0,
ListsPerSecond: 500,
UploadBytesPerSecond: 0,
DownloadBytesPerSecond: 1e+09,
ConcurrentReads: 300,
ConcurrentWrites: 400,
}, limits)
}