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 }