frostfs-node/services/public/object/postprocessor_test.go
alexvanin dadfd90dcd Initial commit
Initial public review release v0.10.0
2020-07-10 17:45:00 +03:00

83 lines
2.2 KiB
Go

package object
import (
"context"
"testing"
"github.com/nspcc-dev/neofs-node/internal"
"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.
testPostProcessorEntity struct {
// Set of interfaces which testCommonEntity must implement, but some methods from those does not call.
serviceRequest
// 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 _ requestPostProcessor = (*testPostProcessorEntity)(nil)
func (s *testPostProcessorEntity) postProcess(_ context.Context, req serviceRequest, e error) {
if s.f != nil {
s.f(req, e)
}
}
func TestComplexPostProcessor_PostProcess(t *testing.T) {
ctx := context.TODO()
t.Run("empty request argument", func(t *testing.T) {
require.PanicsWithValue(t, pmEmptyServiceRequest, func() {
// ascertain that nil request causes panic
new(complexPostProcessor).postProcess(ctx, nil, nil)
})
})
t.Run("correct behavior", func(t *testing.T) {
// create serviceRequest instance.
req := new(testPostProcessorEntity)
// create custom error
pErr := internal.Error("test error for post processor")
// create list of post processors
postProcCount := 10
postProcessors := make([]requestPostProcessor, 0, postProcCount)
postProcessorCalls := make([]struct{}, 0, postProcCount)
for i := 0; i < postProcCount; i++ {
postProcessors = append(postProcessors, &testPostProcessorEntity{
f: func(items ...interface{}) {
t.Run("correct arguments", func(t *testing.T) {
postProcessorCalls = append(postProcessorCalls, struct{}{})
})
},
})
}
s := &complexPostProcessor{list: postProcessors}
s.postProcess(ctx, req, pErr)
// ascertain all internal requestPostProcessor instances were called
require.Len(t, postProcessorCalls, postProcCount)
})
}
func Test_newPostProcessor(t *testing.T) {
res := newPostProcessor()
pp := res.(*complexPostProcessor)
require.Len(t, pp.list, 0)
}