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 }