go-micro.dev/v5@v5.12.0/auth/jwt/token/jwt_test.go (about)

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