mirror of
https://github.com/rclone/rclone.git
synced 2024-11-25 01:44:41 +01:00
accounting: fix panic in core/stats-reset with unknown group - fixes #6327
This also adds tests for the rc commands for stats groups
This commit is contained in:
parent
98fd00a655
commit
49bb640bae
@ -2,6 +2,7 @@ package accounting
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"sync"
|
||||
|
||||
"github.com/rclone/rclone/fs/rc"
|
||||
@ -190,6 +191,9 @@ func rcResetStats(ctx context.Context, in rc.Params) (rc.Params, error) {
|
||||
|
||||
if group != "" {
|
||||
stats := groups.get(group)
|
||||
if stats == nil {
|
||||
return rc.Params{}, fmt.Errorf("group %q not found", group)
|
||||
}
|
||||
stats.ResetErrors()
|
||||
stats.ResetCounters()
|
||||
} else {
|
||||
|
@ -7,8 +7,10 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/rclone/rclone/fs/rc"
|
||||
"github.com/rclone/rclone/fstest/testy"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestStatsGroupOperations(t *testing.T) {
|
||||
@ -117,6 +119,89 @@ func TestStatsGroupOperations(t *testing.T) {
|
||||
t.Errorf("HeapObjects = %d, expected %d", end.HeapObjects, start.HeapObjects)
|
||||
}
|
||||
})
|
||||
|
||||
testGroupStatsInfo := NewStatsGroup(ctx, "test-group")
|
||||
testGroupStatsInfo.Deletes(1)
|
||||
GlobalStats().Deletes(41)
|
||||
|
||||
t.Run("core/group-list", func(t *testing.T) {
|
||||
call := rc.Calls.Get("core/group-list")
|
||||
require.NotNil(t, call)
|
||||
got, err := call.Fn(ctx, rc.Params{})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, rc.Params{
|
||||
"groups": []string{
|
||||
"test-group",
|
||||
},
|
||||
}, got)
|
||||
})
|
||||
|
||||
t.Run("core/stats", func(t *testing.T) {
|
||||
call := rc.Calls.Get("core/stats")
|
||||
require.NotNil(t, call)
|
||||
gotNoGroup, err := call.Fn(ctx, rc.Params{})
|
||||
require.NoError(t, err)
|
||||
gotGroup, err := call.Fn(ctx, rc.Params{"group": "test-group"})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, int64(42), gotNoGroup["deletes"])
|
||||
assert.Equal(t, int64(1), gotGroup["deletes"])
|
||||
})
|
||||
|
||||
t.Run("core/transferred", func(t *testing.T) {
|
||||
call := rc.Calls.Get("core/transferred")
|
||||
require.NotNil(t, call)
|
||||
gotNoGroup, err := call.Fn(ctx, rc.Params{})
|
||||
require.NoError(t, err)
|
||||
gotGroup, err := call.Fn(ctx, rc.Params{"group": "test-group"})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, rc.Params{
|
||||
"transferred": []TransferSnapshot{},
|
||||
}, gotNoGroup)
|
||||
assert.Equal(t, rc.Params{
|
||||
"transferred": []TransferSnapshot{},
|
||||
}, gotGroup)
|
||||
})
|
||||
|
||||
t.Run("core/stats-reset", func(t *testing.T) {
|
||||
call := rc.Calls.Get("core/stats-reset")
|
||||
require.NotNil(t, call)
|
||||
|
||||
assert.Equal(t, int64(41), GlobalStats().deletes)
|
||||
assert.Equal(t, int64(1), testGroupStatsInfo.deletes)
|
||||
|
||||
_, err := call.Fn(ctx, rc.Params{"group": "test-group"})
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, int64(41), GlobalStats().deletes)
|
||||
assert.Equal(t, int64(0), testGroupStatsInfo.deletes)
|
||||
|
||||
_, err = call.Fn(ctx, rc.Params{})
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, int64(0), GlobalStats().deletes)
|
||||
assert.Equal(t, int64(0), testGroupStatsInfo.deletes)
|
||||
|
||||
_, err = call.Fn(ctx, rc.Params{"group": "not-found"})
|
||||
require.ErrorContains(t, err, `group "not-found" not found`)
|
||||
|
||||
})
|
||||
|
||||
testGroupStatsInfo = NewStatsGroup(ctx, "test-group")
|
||||
|
||||
t.Run("core/stats-delete", func(t *testing.T) {
|
||||
call := rc.Calls.Get("core/stats-delete")
|
||||
require.NotNil(t, call)
|
||||
|
||||
assert.Equal(t, []string{"test-group"}, groups.names())
|
||||
|
||||
_, err := call.Fn(ctx, rc.Params{"group": "test-group"})
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, []string{}, groups.names())
|
||||
|
||||
_, err = call.Fn(ctx, rc.Params{"group": "not-found"})
|
||||
require.NoError(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func percentDiff(start, end uint64) uint64 {
|
||||
|
Loading…
Reference in New Issue
Block a user