84 lines
2.1 KiB
Go
84 lines
2.1 KiB
Go
package local
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
|
|
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
|
|
"git.frostfs.info/TrueCloudLab/xk6-frostfs/internal/datagen"
|
|
"git.frostfs.info/TrueCloudLab/xk6-frostfs/internal/local/rawclient"
|
|
"go.k6.io/k6/js/modules"
|
|
)
|
|
|
|
type Client struct {
|
|
vu modules.VU
|
|
rc *rawclient.RawClient
|
|
l Limiter
|
|
}
|
|
|
|
type (
|
|
SuccessOrErrorResponse struct {
|
|
Success bool
|
|
Error string
|
|
}
|
|
|
|
PutResponse struct {
|
|
Success bool
|
|
ObjectID string
|
|
Error string
|
|
Abort bool
|
|
}
|
|
|
|
GetResponse SuccessOrErrorResponse
|
|
DeleteResponse SuccessOrErrorResponse
|
|
)
|
|
|
|
func (c *Client) Put(containerID string, headers map[string]string, payload datagen.Payload) PutResponse {
|
|
if c.l.IsFull() {
|
|
return PutResponse{
|
|
Success: false,
|
|
Error: "engine size limit reached",
|
|
Abort: true,
|
|
}
|
|
}
|
|
id, err := c.rc.Put(c.vu.Context(), mustParseContainerID(containerID), nil, headers, payload.Bytes())
|
|
if err != nil {
|
|
return PutResponse{Error: err.Error()}
|
|
}
|
|
return PutResponse{
|
|
Success: true,
|
|
ObjectID: id.EncodeToString(),
|
|
}
|
|
}
|
|
|
|
func (c *Client) Get(containerID, objectID string) GetResponse {
|
|
if _, err := c.rc.Get(c.vu.Context(), mustParseContainerID(containerID), mustParseObjectID(objectID)); err != nil {
|
|
return GetResponse{Error: err.Error()}
|
|
}
|
|
return GetResponse{Success: true}
|
|
}
|
|
|
|
func (c *Client) Delete(containerID, objectID string) DeleteResponse {
|
|
if err := c.rc.Delete(c.vu.Context(), mustParseContainerID(containerID), mustParseObjectID(objectID)); err != nil {
|
|
return DeleteResponse{Error: err.Error()}
|
|
}
|
|
return DeleteResponse{Success: true}
|
|
}
|
|
|
|
func mustParseContainerID(strContainerID string) cid.ID {
|
|
var containerID cid.ID
|
|
err := containerID.DecodeString(strContainerID)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("parsing container id %q: %v", strContainerID, err))
|
|
}
|
|
return containerID
|
|
}
|
|
|
|
func mustParseObjectID(strObjectID string) oid.ID {
|
|
var cliObjectID oid.ID
|
|
err := cliObjectID.DecodeString(strObjectID)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("parsing object id %q: %v", strObjectID, err))
|
|
}
|
|
return cliObjectID
|
|
}
|