github.com/TrueCloudLab/frostfs-api-go/v2@v2.0.0-20230228134343-196241c4e79a/signature/sign_test.go (about)

     1  package signature
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/TrueCloudLab/frostfs-api-go/v2/accounting"
     7  	"github.com/TrueCloudLab/frostfs-api-go/v2/session"
     8  	crypto "github.com/TrueCloudLab/frostfs-crypto"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestBalanceResponse(t *testing.T) {
    13  	dec := new(accounting.Decimal)
    14  	dec.SetValue(100)
    15  
    16  	body := new(accounting.BalanceResponseBody)
    17  	body.SetBalance(dec)
    18  
    19  	meta := new(session.ResponseMetaHeader)
    20  	meta.SetTTL(1)
    21  
    22  	req := new(accounting.BalanceResponse)
    23  	req.SetBody(body)
    24  	req.SetMetaHeader(meta)
    25  
    26  	// verify unsigned request
    27  	require.Error(t, VerifyServiceMessage(req))
    28  
    29  	key, err := crypto.LoadPrivateKey("Kwk6k2eC3L3QuPvD8aiaNyoSXgQ2YL1bwS5CP1oKoA9waeAze97s")
    30  	require.NoError(t, err)
    31  
    32  	// sign request
    33  	require.NoError(t, SignServiceMessage(key, req))
    34  
    35  	// verification must pass
    36  	require.NoError(t, VerifyServiceMessage(req))
    37  
    38  	// add level to meta header matryoshka
    39  	meta = new(session.ResponseMetaHeader)
    40  	meta.SetOrigin(req.GetMetaHeader())
    41  	req.SetMetaHeader(meta)
    42  
    43  	// sign request
    44  	require.NoError(t, SignServiceMessage(key, req))
    45  
    46  	// verification must pass
    47  	require.NoError(t, VerifyServiceMessage(req))
    48  
    49  	// corrupt body
    50  	dec.SetValue(dec.GetValue() + 1)
    51  
    52  	// verification must fail
    53  	require.Error(t, VerifyServiceMessage(req))
    54  
    55  	// restore body
    56  	dec.SetValue(dec.GetValue() - 1)
    57  
    58  	// corrupt meta header
    59  	meta.SetTTL(meta.GetTTL() + 1)
    60  
    61  	// verification must fail
    62  	require.Error(t, VerifyServiceMessage(req))
    63  
    64  	// restore meta header
    65  	meta.SetTTL(meta.GetTTL() - 1)
    66  
    67  	// corrupt origin verification header
    68  	req.GetVerificationHeader().SetOrigin(nil)
    69  
    70  	// verification must fail
    71  	require.Error(t, VerifyServiceMessage(req))
    72  }