From f368ccbdf0ea7454801ddd50393092893f588530 Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Tue, 25 Apr 2023 10:04:55 +0300 Subject: [PATCH] [#248] morph: Remove audit client Signed-off-by: Evgenii Stratonikov --- pkg/morph/client/audit/client.go | 40 ----------- pkg/morph/client/audit/get_result.go | 34 ---------- pkg/morph/client/audit/list_results.go | 93 -------------------------- pkg/morph/client/audit/put_result.go | 40 ----------- pkg/morph/client/audit/result_test.go | 58 ---------------- 5 files changed, 265 deletions(-) delete mode 100644 pkg/morph/client/audit/client.go delete mode 100644 pkg/morph/client/audit/get_result.go delete mode 100644 pkg/morph/client/audit/list_results.go delete mode 100644 pkg/morph/client/audit/put_result.go delete mode 100644 pkg/morph/client/audit/result_test.go diff --git a/pkg/morph/client/audit/client.go b/pkg/morph/client/audit/client.go deleted file mode 100644 index b922fc79..00000000 --- a/pkg/morph/client/audit/client.go +++ /dev/null @@ -1,40 +0,0 @@ -package audit - -import ( - "fmt" - - "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client" - "github.com/nspcc-dev/neo-go/pkg/encoding/fixedn" - "github.com/nspcc-dev/neo-go/pkg/util" -) - -// Client is a wrapper over StaticClient -// which makes calls with the names and arguments -// of the FrostFS Audit contract. -// -// Working client must be created via constructor New. -// Using the Client that has been created with new(Client) -// expression (or just declaring a Client variable) is unsafe -// and can lead to panic. -type Client struct { - client *client.StaticClient // static Audit contract client -} - -const ( - putResultMethod = "put" - getResultMethod = "get" - listResultsMethod = "list" - listByEpochResultsMethod = "listByEpoch" - listByCIDResultsMethod = "listByCID" - listByNodeResultsMethod = "listByNode" -) - -// NewFromMorph returns the wrapper instance from the raw morph client. -func NewFromMorph(cli *client.Client, contract util.Uint160, fee fixedn.Fixed8, opts ...client.StaticClientOption) (*Client, error) { - sc, err := client.NewStatic(cli, contract, fee, opts...) - if err != nil { - return nil, fmt.Errorf("could not create static client of audit contract: %w", err) - } - - return &Client{client: sc}, nil -} diff --git a/pkg/morph/client/audit/get_result.go b/pkg/morph/client/audit/get_result.go deleted file mode 100644 index 9e1b75db..00000000 --- a/pkg/morph/client/audit/get_result.go +++ /dev/null @@ -1,34 +0,0 @@ -package audit - -import ( - "fmt" - - "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client" - auditAPI "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/audit" -) - -// GetAuditResult returns audit result structure stored in audit contract. -func (c *Client) GetAuditResult(id ResultID) (*auditAPI.Result, error) { - prm := client.TestInvokePrm{} - prm.SetMethod(getResultMethod) - prm.SetArgs([]byte(id)) - - prms, err := c.client.TestInvoke(prm) - if err != nil { - return nil, fmt.Errorf("could not perform test invocation (%s): %w", getResultMethod, err) - } else if ln := len(prms); ln != 1 { - return nil, fmt.Errorf("unexpected stack item count (%s): %d", getResultMethod, ln) - } - - value, err := client.BytesFromStackItem(prms[0]) - if err != nil { - return nil, fmt.Errorf("could not get byte array from stack item (%s): %w", getResultMethod, err) - } - - var auditRes auditAPI.Result - if err := auditRes.Unmarshal(value); err != nil { - return nil, fmt.Errorf("could not unmarshal audit result structure: %w", err) - } - - return &auditRes, nil -} diff --git a/pkg/morph/client/audit/list_results.go b/pkg/morph/client/audit/list_results.go deleted file mode 100644 index ace01d15..00000000 --- a/pkg/morph/client/audit/list_results.go +++ /dev/null @@ -1,93 +0,0 @@ -package audit - -import ( - "crypto/sha256" - "fmt" - - "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client" - cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" - "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" -) - -// ListAllAuditResultID returns a list of all audit result IDs inside audit contract. -func (c *Client) ListAllAuditResultID() ([]ResultID, error) { - invokePrm := client.TestInvokePrm{} - invokePrm.SetMethod(listResultsMethod) - - items, err := c.client.TestInvoke(invokePrm) - if err != nil { - return nil, fmt.Errorf("could not perform test invocation (%s): %w", listResultsMethod, err) - } - return parseAuditResults(items, listResultsMethod) -} - -// ListAuditResultIDByEpoch returns a list of audit result IDs inside audit -// contract for specific epoch number. -func (c *Client) ListAuditResultIDByEpoch(epoch uint64) ([]ResultID, error) { - prm := client.TestInvokePrm{} - prm.SetMethod(listByEpochResultsMethod) - prm.SetArgs(epoch) - - items, err := c.client.TestInvoke(prm) - if err != nil { - return nil, fmt.Errorf("could not perform test invocation (%s): %w", listByEpochResultsMethod, err) - } - return parseAuditResults(items, listByEpochResultsMethod) -} - -// ListAuditResultIDByCID returns a list of audit result IDs inside audit -// contract for specific epoch number and container ID. -func (c *Client) ListAuditResultIDByCID(epoch uint64, cnr cid.ID) ([]ResultID, error) { - binCnr := make([]byte, sha256.Size) - cnr.Encode(binCnr) - - prm := client.TestInvokePrm{} - prm.SetMethod(listByCIDResultsMethod) - prm.SetArgs(epoch, binCnr) - - items, err := c.client.TestInvoke(prm) - if err != nil { - return nil, fmt.Errorf("could not perform test invocation (%s): %w", listByCIDResultsMethod, err) - } - return parseAuditResults(items, listByCIDResultsMethod) -} - -// ListAuditResultIDByNode returns a list of audit result IDs inside audit -// contract for specific epoch number, container ID and inner ring public key. -func (c *Client) ListAuditResultIDByNode(epoch uint64, cnr cid.ID, nodeKey []byte) ([]ResultID, error) { - binCnr := make([]byte, sha256.Size) - cnr.Encode(binCnr) - - prm := client.TestInvokePrm{} - prm.SetMethod(listByNodeResultsMethod) - prm.SetArgs(epoch, binCnr, nodeKey) - - items, err := c.client.TestInvoke(prm) - if err != nil { - return nil, fmt.Errorf("could not perform test invocation (%s): %w", listByNodeResultsMethod, err) - } - return parseAuditResults(items, listByNodeResultsMethod) -} - -func parseAuditResults(items []stackitem.Item, method string) ([]ResultID, error) { - if ln := len(items); ln != 1 { - return nil, fmt.Errorf("unexpected stack item count (%s): %d", method, ln) - } - - items, err := client.ArrayFromStackItem(items[0]) - if err != nil { - return nil, fmt.Errorf("could not get stack item array from stack item (%s): %w", method, err) - } - - res := make([]ResultID, 0, len(items)) - for i := range items { - rawRes, err := client.BytesFromStackItem(items[i]) - if err != nil { - return nil, fmt.Errorf("could not get byte array from stack item (%s): %w", method, err) - } - - res = append(res, rawRes) - } - - return res, nil -} diff --git a/pkg/morph/client/audit/put_result.go b/pkg/morph/client/audit/put_result.go deleted file mode 100644 index f8e233b2..00000000 --- a/pkg/morph/client/audit/put_result.go +++ /dev/null @@ -1,40 +0,0 @@ -package audit - -import ( - "fmt" - - "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client" - auditAPI "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/audit" -) - -// ResultID is an identity of audit result inside audit contract. -type ResultID []byte - -// PutPrm groups parameters of PutAuditResult operation. -type PutPrm struct { - result *auditAPI.Result - - client.InvokePrmOptional -} - -// SetResult sets audit result. -func (p *PutPrm) SetResult(result *auditAPI.Result) { - p.result = result -} - -// PutAuditResult saves passed audit result structure in FrostFS system -// through Audit contract call. -// -// Returns encountered error that caused the saving to interrupt. -func (c *Client) PutAuditResult(p PutPrm) error { - prm := client.InvokePrm{} - prm.SetMethod(putResultMethod) - prm.SetArgs(p.result.Marshal()) - prm.InvokePrmOptional = p.InvokePrmOptional - - err := c.client.Invoke(prm) - if err != nil { - return fmt.Errorf("could not invoke method (%s): %w", putResultMethod, err) - } - return nil -} diff --git a/pkg/morph/client/audit/result_test.go b/pkg/morph/client/audit/result_test.go deleted file mode 100644 index 5ce1cc74..00000000 --- a/pkg/morph/client/audit/result_test.go +++ /dev/null @@ -1,58 +0,0 @@ -package audit - -import ( - "context" - "testing" - "time" - - "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client" - auditAPI "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/audit" - cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" - "github.com/nspcc-dev/neo-go/pkg/crypto/keys" - "github.com/nspcc-dev/neo-go/pkg/util" - "github.com/stretchr/testify/require" -) - -func TestAuditResults(t *testing.T) { - t.Skip() - const epoch = 11 - - endpoint := "http://morph_chain.frostfs.devenv:30333" - sAuditHash := "cdfb3dab86e6d60e8a143d9e2ecb0b188f3dc2eb" - irKeyWIF := "L3o221BojgcCPYgdbXsm6jn7ayTZ72xwREvBHXKknR8VJ3G4WmjB" - - key, err := keys.NewPrivateKeyFromWIF(irKeyWIF) - require.NoError(t, err) - - auditHash, err := util.Uint160DecodeStringLE(sAuditHash) - require.NoError(t, err) - - morphClient, err := client.New(context.Background(), key, client.WithEndpoints(client.Endpoint{Address: endpoint})) - require.NoError(t, err) - - auditClientWrapper, err := NewFromMorph(morphClient, auditHash, 0) - require.NoError(t, err) - - id := cidtest.ID() - - var auditRes auditAPI.Result - auditRes.ForEpoch(epoch) - auditRes.SetAuditorKey(key.PublicKey().Bytes()) - auditRes.ForContainer(id) - - prm := PutPrm{} - prm.SetResult(&auditRes) - - require.NoError(t, auditClientWrapper.PutAuditResult(prm)) - - time.Sleep(5 * time.Second) - - list, err := auditClientWrapper.ListAuditResultIDByCID(epoch, id) - require.NoError(t, err) - require.Len(t, list, 1) - - savedAuditRes, err := auditClientWrapper.GetAuditResult(list[0]) - require.NoError(t, err) - - require.Equal(t, auditRes, savedAuditRes) -}