github.com/annwntech/go-micro/v2@v2.9.5/auth/token/jwt/jwt_test.go (about)

     1  package jwt
     2  
     3  import (
     4  	"io/ioutil"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/annwntech/go-micro/v2/auth"
     9  	"github.com/annwntech/go-micro/v2/auth/token"
    10  )
    11  
    12  func TestGenerate(t *testing.T) {
    13  	privKey, err := ioutil.ReadFile("test/sample_key")
    14  	if err != nil {
    15  		t.Fatalf("Unable to read private key: %v", err)
    16  	}
    17  
    18  	j := NewTokenProvider(
    19  		token.WithPrivateKey(string(privKey)),
    20  	)
    21  
    22  	_, err = j.Generate(&auth.Account{ID: "test"})
    23  	if err != nil {
    24  		t.Fatalf("Generate returned %v error, expected nil", err)
    25  	}
    26  }
    27  
    28  func TestInspect(t *testing.T) {
    29  	pubKey, err := ioutil.ReadFile("test/sample_key.pub")
    30  	if err != nil {
    31  		t.Fatalf("Unable to read public key: %v", err)
    32  	}
    33  	privKey, err := ioutil.ReadFile("test/sample_key")
    34  	if err != nil {
    35  		t.Fatalf("Unable to read private key: %v", err)
    36  	}
    37  
    38  	j := NewTokenProvider(
    39  		token.WithPublicKey(string(pubKey)),
    40  		token.WithPrivateKey(string(privKey)),
    41  	)
    42  
    43  	t.Run("Valid token", func(t *testing.T) {
    44  		md := map[string]string{"foo": "bar"}
    45  		scopes := []string{"admin"}
    46  		subject := "test"
    47  
    48  		acc := &auth.Account{ID: subject, Scopes: scopes, Metadata: md}
    49  		tok, err := j.Generate(acc)
    50  		if err != nil {
    51  			t.Fatalf("Generate returned %v error, expected nil", err)
    52  		}
    53  
    54  		tok2, err := j.Inspect(tok.Token)
    55  		if err != nil {
    56  			t.Fatalf("Inspect returned %v error, expected nil", err)
    57  		}
    58  		if acc.ID != subject {
    59  			t.Errorf("Inspect returned %v as the token subject, expected %v", acc.ID, subject)
    60  		}
    61  		if len(tok2.Scopes) != len(scopes) {
    62  			t.Errorf("Inspect returned %v scopes, expected %v", len(tok2.Scopes), len(scopes))
    63  		}
    64  		if len(tok2.Metadata) != len(md) {
    65  			t.Errorf("Inspect returned %v as the token metadata, expected %v", tok2.Metadata, md)
    66  		}
    67  	})
    68  
    69  	t.Run("Expired token", func(t *testing.T) {
    70  		tok, err := j.Generate(&auth.Account{}, token.WithExpiry(-10*time.Second))
    71  		if err != nil {
    72  			t.Fatalf("Generate returned %v error, expected nil", err)
    73  		}
    74  
    75  		if _, err = j.Inspect(tok.Token); err != token.ErrInvalidToken {
    76  			t.Fatalf("Inspect returned %v error, expected %v", err, token.ErrInvalidToken)
    77  		}
    78  	})
    79  
    80  	t.Run("Invalid token", func(t *testing.T) {
    81  		_, err := j.Inspect("Invalid token")
    82  		if err != token.ErrInvalidToken {
    83  			t.Fatalf("Inspect returned %v error, expected %v", err, token.ErrInvalidToken)
    84  		}
    85  	})
    86  
    87  }