frostfs-sdk-go/compare/frostfs_pool_test.go
Alex Vanin 99091ad436 Add test examples from different object storage clients
Signed-off-by: Alex Vanin <a.vanin@yadro.com>
2023-06-23 13:17:34 +03:00

92 lines
2.2 KiB
Go

package compare
import (
"bytes"
"context"
"io"
"testing"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/acl"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/pool"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user"
"github.com/davecgh/go-spew/spew"
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
"github.com/stretchr/testify/require"
)
func TestFrostFSPool(t *testing.T) {
// 1. Initialize client
payloadReader := bytes.NewBufferString("Hello World")
ctx := context.Background()
k, err := keys.NewPrivateKeyFromWIF("L32sMMkUcEfsWFdjoFNKAPtj7y6cfkcpHwG2pmTap68AmUt86ZTo")
require.NoError(t, err)
var prmInit pool.InitParameters
prmInit.SetKey(&k.PrivateKey)
prmInit.AddNode(pool.NewNodeParam(1, "localhost:8080", 1))
cli, err := pool.NewPool(prmInit)
require.NoError(t, err)
err = cli.Dial(ctx)
require.NoError(t, err)
// 2. Create bucket / container
var pp netmap.PlacementPolicy
err = pp.DecodeString("REP 1")
require.NoError(t, err)
var owner user.ID
user.IDFromKey(&owner, k.PrivateKey.PublicKey)
var cnr container.Container
cnr.Init()
cnr.SetOwner(owner)
cnr.SetBasicACL(acl.PublicRWExtended)
cnr.SetPlacementPolicy(pp)
var prmContainerPut pool.PrmContainerPut
prmContainerPut.SetContainer(cnr)
cnrID, err := cli.PutContainer(ctx, prmContainerPut)
require.NoError(t, err)
// 3. Put object
var putHeader object.Object
putHeader.SetOwnerID(&owner)
putHeader.SetContainerID(cnrID)
var prmObjectPut pool.PrmObjectPut
prmObjectPut.SetHeader(putHeader)
prmObjectPut.SetPayload(payloadReader)
objectID, err := cli.PutObject(ctx, prmObjectPut)
require.NoError(t, err)
// 4. Get object
var addr oid.Address
addr.SetContainer(cnrID)
addr.SetObject(objectID)
var prmObjectGet pool.PrmObjectGet
prmObjectGet.SetAddress(addr)
objectReader, err := cli.GetObject(ctx, prmObjectGet)
require.NoError(t, err)
spew.Dump(objectReader.Header)
buf, err := io.ReadAll(objectReader.Payload)
require.NoError(t, err)
require.NoError(t, objectReader.Payload.Close())
spew.Dump(buf)
}