@@ -36,6 +36,7 @@ import (
36
36
"testing"
37
37
"time"
38
38
39
+ "github.com/golang-jwt/jwt/v4"
39
40
dt "github.com/ory/dockertest/v3"
40
41
)
41
42
@@ -875,6 +876,63 @@ func TestIntegrationQueryContextCancellation(t *testing.T) {
875
876
}
876
877
}
877
878
879
+ func TestIntegrationAccessToken (t * testing.T ) {
880
+ if tlsServer == "" {
881
+ t .Skip ("Skipping access token test when using a custom integration server." )
882
+ }
883
+
884
+ accessToken , err := generateToken ()
885
+ if err != nil {
886
+ t .Fatal (err )
887
+ }
888
+
889
+ dsn := tlsServer + "?accessToken=" + accessToken
890
+
891
+ db := integrationOpen (t , dsn )
892
+
893
+ defer db .Close ()
894
+ rows , err := db .Query ("SHOW CATALOGS" )
895
+ if err != nil {
896
+ t .Fatal (err )
897
+ }
898
+ defer rows .Close ()
899
+ count := 0
900
+ for rows .Next () {
901
+ count ++
902
+ }
903
+ if count < 1 {
904
+ t .Fatal ("not enough rows returned:" , count )
905
+ }
906
+ }
907
+
908
+ func generateToken () (string , error ) {
909
+ privateKeyPEM , err := os .ReadFile ("etc/secrets/private_key.pem" )
910
+ if err != nil {
911
+ return "" , fmt .Errorf ("error reading private key file: %w" , err )
912
+ }
913
+
914
+ privateKey , err := jwt .ParseRSAPrivateKeyFromPEM (privateKeyPEM )
915
+ if err != nil {
916
+ return "" , fmt .Errorf ("error parsing private key: %w" , err )
917
+ }
918
+
919
+ // Subject must be 'test'
920
+ claims := jwt.RegisteredClaims {
921
+ ExpiresAt : jwt .NewNumericDate (time .Now ().Add (24 * 365 * time .Hour )),
922
+ Issuer : "gotrino" ,
923
+ Subject : "test" ,
924
+ }
925
+
926
+ token := jwt .NewWithClaims (jwt .SigningMethodRS256 , claims )
927
+ signedToken , err := token .SignedString (privateKey )
928
+
929
+ if err != nil {
930
+ return "" , fmt .Errorf ("error generating token: %w" , err )
931
+ }
932
+
933
+ return signedToken , nil
934
+ }
935
+
878
936
func contextSleep (ctx context.Context , d time.Duration ) error {
879
937
timer := time .NewTimer (100 * time .Millisecond )
880
938
select {
0 commit comments