forked from TrueCloudLab/frostfs-node
77 lines
1.9 KiB
Go
77 lines
1.9 KiB
Go
|
package object
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/nspcc-dev/neofs-api-go/object"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
"google.golang.org/grpc"
|
||
|
)
|
||
|
|
||
|
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.
|
||
|
testTransportEntity struct {
|
||
|
// Set of interfaces which entity must implement, but some methods from those does not call.
|
||
|
object.ServiceClient
|
||
|
object.Service_PutClient
|
||
|
|
||
|
// 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 (
|
||
|
_ object.ServiceClient = (*testTransportEntity)(nil)
|
||
|
_ object.Service_PutClient = (*testTransportEntity)(nil)
|
||
|
)
|
||
|
|
||
|
func (s *testTransportEntity) Send(*object.PutRequest) error { return s.err }
|
||
|
|
||
|
func (s *testTransportEntity) CloseAndRecv() (*object.PutResponse, error) {
|
||
|
if s.err != nil {
|
||
|
return nil, s.err
|
||
|
}
|
||
|
return s.res.(*object.PutResponse), nil
|
||
|
}
|
||
|
|
||
|
func (s *testTransportEntity) Put(ctx context.Context, opts ...grpc.CallOption) (object.Service_PutClient, error) {
|
||
|
if s.err != nil {
|
||
|
return nil, s.err
|
||
|
}
|
||
|
return s.res.(object.Service_PutClient), nil
|
||
|
}
|
||
|
|
||
|
func Test_putHandler(t *testing.T) {
|
||
|
ctx := context.TODO()
|
||
|
|
||
|
t.Run("return type correctness", func(t *testing.T) {
|
||
|
addr := new(Address)
|
||
|
*addr = testObjectAddress(t)
|
||
|
|
||
|
srvClient := &testTransportEntity{
|
||
|
res: &testTransportEntity{
|
||
|
res: &object.PutResponse{
|
||
|
Address: *addr,
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
putC := &putCaller{}
|
||
|
|
||
|
res, err := putC.call(ctx, &putRequestSequence{PutRequest: new(object.PutRequest)}, &clientInfo{
|
||
|
sc: srvClient,
|
||
|
})
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
// ascertain that value returns as expected
|
||
|
require.Equal(t, addr, res)
|
||
|
})
|
||
|
}
|