frostfs-node/services/public/object/capacity_test.go

76 lines
2 KiB
Go
Raw Normal View History

package object
import (
"testing"
"github.com/nspcc-dev/neofs-node/lib/localstore"
"github.com/stretchr/testify/require"
)
type (
// Entity for mocking interfaces.
// Implementation of any interface intercepts arguments via f (if not nil).
// If err is not nil, it returns as it is. Otherwise, casted to needed type res returns w/o error.
testCapacityEntity struct {
// Set of interfaces which entity must implement, but some methods from those does not call.
localstore.Localstore
// Argument interceptor. Used for ascertain of correct parameter passage between components.
f func(...interface{})
// Mocked result of any interface.
res interface{}
// Mocked error of any interface.
err error
}
)
var _ localstore.Localstore = (*testCapacityEntity)(nil)
func (s *testCapacityEntity) Size() int64 { return s.res.(int64) }
func TestObjectService_RelativeAvailableCap(t *testing.T) {
localStoreSize := int64(100)
t.Run("oversize", func(t *testing.T) {
s := objectService{
ls: &testCapacityEntity{res: localStoreSize},
storageCap: uint64(localStoreSize - 1),
}
require.Zero(t, s.RelativeAvailableCap())
})
t.Run("correct calculation", func(t *testing.T) {
s := objectService{
ls: &testCapacityEntity{res: localStoreSize},
storageCap: 13 * uint64(localStoreSize),
}
require.Equal(t, 1-float64(localStoreSize)/float64(s.storageCap), s.RelativeAvailableCap())
})
}
func TestObjectService_AbsoluteAvailableCap(t *testing.T) {
localStoreSize := int64(100)
t.Run("free space", func(t *testing.T) {
s := objectService{
ls: &testCapacityEntity{res: localStoreSize},
storageCap: uint64(localStoreSize),
}
require.Zero(t, s.AbsoluteAvailableCap())
s.storageCap--
require.Zero(t, s.AbsoluteAvailableCap())
})
t.Run("correct calculation", func(t *testing.T) {
s := objectService{
ls: &testCapacityEntity{res: localStoreSize},
storageCap: uint64(localStoreSize) + 12,
}
require.Equal(t, s.storageCap-uint64(localStoreSize), s.AbsoluteAvailableCap())
})
}