From fb0b1ea10882c6fe03b78f208f4c87bb96b210fc Mon Sep 17 00:00:00 2001
From: Leonard Lyubich <leonard@nspcc.ru>
Date: Fri, 28 May 2021 11:00:46 +0300
Subject: [PATCH] [#283] pkg/session: Cover Token's Sign/Verify methods with
 unit test

Add `sessiontest.GenerateSigned` function which returns signed random token.
Clarify that `sessiontest.Generate` returns an unsigned token. Use these
functions to assert the correctness of `Sign` / `VerifySignature` methods.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
---
 pkg/session/session_test.go | 20 ++++++++++++++++++++
 pkg/session/test/token.go   | 16 ++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/pkg/session/session_test.go b/pkg/session/session_test.go
index 9105869..9964541 100644
--- a/pkg/session/session_test.go
+++ b/pkg/session/session_test.go
@@ -66,3 +66,23 @@ func TestSessionTokenEncoding(t *testing.T) {
 		require.Equal(t, tok, tok2)
 	})
 }
+
+func TestToken_VerifySignature(t *testing.T) {
+	t.Run("nil", func(t *testing.T) {
+		var tok *session.Token
+
+		require.False(t, tok.VerifySignature())
+	})
+
+	t.Run("unsigned", func(t *testing.T) {
+		tok := sessiontest.Generate()
+
+		require.False(t, tok.VerifySignature())
+	})
+
+	t.Run("signed", func(t *testing.T) {
+		tok := sessiontest.GenerateSigned()
+
+		require.True(t, tok.VerifySignature())
+	})
+}
diff --git a/pkg/session/test/token.go b/pkg/session/test/token.go
index 3924984..8d51720 100644
--- a/pkg/session/test/token.go
+++ b/pkg/session/test/token.go
@@ -11,6 +11,8 @@ import (
 )
 
 // Generate returns random session.Token.
+//
+// Resulting token is unsigned.
 func Generate() *session.Token {
 	tok := session.NewToken()
 
@@ -33,3 +35,17 @@ func Generate() *session.Token {
 
 	return tok
 }
+
+// GenerateSigned returns signed random session.Token.
+//
+// Panics if token could not be signed (actually unexpected).
+func GenerateSigned() *session.Token {
+	tok := Generate()
+
+	err := tok.Sign(test.DecodeKey(0))
+	if err != nil {
+		panic(err)
+	}
+
+	return tok
+}