8e3173eacd
There is a need to test each `Client` operation. In previous implementation `Client` was based on real socket connection. This didn't allow to test the `Client` without OS resources. In order to write convenient and useful unit tests we need to slightly refactor the code. Introduce `neoFSAPIServer` interface as a provider of `Client` type's abstraction from the exact NeoFS API server. Add `netMapSnapshot` method for initial implementation. Define core interface provider used in real code. Set `coreServer` as an underlying `neoFSAPIServer` in `Client.Dial`. Cover `Client.NetMapSnapshot` method with unit tests using the opportunity to override the server. From now client library can be tested not only with real physical listeners but with imitations. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
39 lines
818 B
Go
39 lines
818 B
Go
package client
|
|
|
|
import (
|
|
"crypto/ecdsa"
|
|
"crypto/elliptic"
|
|
"crypto/rand"
|
|
"testing"
|
|
|
|
apistatus "github.com/nspcc-dev/neofs-sdk-go/client/status"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
/*
|
|
File contains common functionality used for client package testing.
|
|
*/
|
|
|
|
var key, _ = ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
|
|
|
|
var statusErr apistatus.ServerInternal
|
|
|
|
func init() {
|
|
statusErr.SetMessage("test status error")
|
|
}
|
|
|
|
func assertStatusErr(tb testing.TB, res interface{ Status() apistatus.Status }) {
|
|
require.IsType(tb, &statusErr, res.Status())
|
|
require.Equal(tb, statusErr.Message(), res.Status().(*apistatus.ServerInternal).Message())
|
|
}
|
|
|
|
func newClient(server neoFSAPIServer) *Client {
|
|
var prm PrmInit
|
|
prm.SetDefaultPrivateKey(*key)
|
|
|
|
var c Client
|
|
c.Init(prm)
|
|
c.setNeoFSAPIServer(server)
|
|
|
|
return &c
|
|
}
|