forked from TrueCloudLab/frostfs-node
84 lines
2.2 KiB
Go
84 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)
|
||
|
}
|