Skip to content

Commit 3e21999

Browse files
authored
tests: gen jwt token for auth test (#1585)
1 parent 60f9ca3 commit 3e21999

3 files changed

Lines changed: 45 additions & 24 deletions

File tree

libsql-server/src/auth/user_auth_strategies/jwt.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ impl Jwt {
4545
}
4646
}
4747

48-
#[derive(serde::Deserialize, serde::Serialize, Debug)]
49-
pub(crate) struct Token {
48+
#[derive(serde::Deserialize, serde::Serialize, Debug, Default)]
49+
pub struct Token {
5050
#[serde(default)]
5151
id: Option<NamespaceName>,
5252
#[serde(default)]

libsql-server/tests/auth/jwt_key.pem

Lines changed: 0 additions & 3 deletions
This file was deleted.

libsql-server/tests/auth/mod.rs

Lines changed: 43 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,16 @@
22
#![allow(deprecated)]
33

44
use futures::SinkExt as _;
5+
use jsonwebtoken::{DecodingKey, EncodingKey};
56
use libsql::Database;
67
use libsql_server::{
7-
auth::{user_auth_strategies, Auth},
8+
auth::{
9+
user_auth_strategies::{self, jwt::Token},
10+
Auth,
11+
},
812
config::UserApiConfig,
913
};
14+
use ring::signature::{Ed25519KeyPair, KeyPair};
1015
use tempfile::tempdir;
1116
use tokio_stream::StreamExt;
1217
use tokio_tungstenite::{
@@ -17,19 +22,14 @@ use turmoil::net::TcpStream;
1722

1823
use crate::common::net::{init_tracing, SimServer, TestServer, TurmoilConnector};
1924

20-
const TEST_JWT_KEY: &str = "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjE2NTIwNTB9.5XhUDHQhtShszTssjjUzVuJA3r-031mT4inVkvYEYz64sOCxnNpZUZdVF-CmZ4t-JTSXFlm8ddscBgkhccBxDg";
21-
22-
async fn make_standalone_server() -> Result<(), Box<dyn std::error::Error>> {
23-
let jwt_pem = include_bytes!("jwt_key.pem");
24-
let jwt_keys = vec![jsonwebtoken::DecodingKey::from_ed_pem(jwt_pem).unwrap()];
25-
25+
async fn make_standalone_server(auth_strategy: Auth) -> Result<(), Box<dyn std::error::Error>> {
2626
init_tracing();
2727
let tmp = tempdir()?;
2828
let server = TestServer {
2929
path: tmp.path().to_owned().into(),
3030
user_api_config: UserApiConfig {
3131
hrana_ws_acceptor: None,
32-
auth_strategy: Auth::new(user_auth_strategies::Jwt::new(jwt_keys)),
32+
auth_strategy,
3333
..Default::default()
3434
},
3535
..Default::default()
@@ -40,16 +40,34 @@ async fn make_standalone_server() -> Result<(), Box<dyn std::error::Error>> {
4040
Ok(())
4141
}
4242

43+
fn gen_test_jwt_auth() -> (Auth, String) {
44+
let doc = Ed25519KeyPair::generate_pkcs8(&ring::rand::SystemRandom::new()).unwrap();
45+
let encoding_key = EncodingKey::from_ed_der(doc.as_ref());
46+
47+
let pair = Ed25519KeyPair::from_pkcs8(doc.as_ref()).unwrap();
48+
let decoding_key = DecodingKey::from_ed_der(pair.public_key().as_ref());
49+
50+
let claims = Token::default();
51+
52+
let header = jsonwebtoken::Header::new(jsonwebtoken::Algorithm::EdDSA);
53+
let token = jsonwebtoken::encode(&header, &claims, &encoding_key).unwrap();
54+
55+
let jwt_keys = vec![decoding_key];
56+
57+
let auth = Auth::new(user_auth_strategies::Jwt::new(jwt_keys));
58+
59+
(auth, token)
60+
}
61+
4362
#[test]
4463
fn http_hrana() {
64+
let (auth, token) = gen_test_jwt_auth();
65+
4566
let mut sim = turmoil::Builder::new().build();
46-
sim.host("primary", make_standalone_server);
67+
sim.host("primary", move || make_standalone_server(auth.clone()));
4768
sim.client("client", async {
48-
let db = Database::open_remote_with_connector(
49-
"http://primary:8080",
50-
TEST_JWT_KEY,
51-
TurmoilConnector,
52-
)?;
69+
let db =
70+
Database::open_remote_with_connector("http://primary:8080", token, TurmoilConnector)?;
5371
let conn = db.connect()?;
5472

5573
conn.execute("create table t(x text)", ()).await?;
@@ -65,15 +83,18 @@ fn embedded_replica() {
6583
let tmp_embedded = tempdir().unwrap();
6684
let tmp_embedded_path = tmp_embedded.path().to_owned();
6785

86+
let (auth, token) = gen_test_jwt_auth();
87+
6888
let mut sim = turmoil::Builder::new().build();
69-
sim.host("primary", make_standalone_server);
89+
sim.host("primary", move || make_standalone_server(auth.clone()));
90+
7091
sim.client("client", async move {
7192
let path = tmp_embedded_path.join("embedded");
7293

7394
let db = Database::open_with_remote_sync_connector(
7495
path.to_str().unwrap(),
7596
"http://primary:8080",
76-
TEST_JWT_KEY,
97+
token,
7798
TurmoilConnector,
7899
false,
79100
None,
@@ -92,9 +113,12 @@ fn embedded_replica() {
92113

93114
#[test]
94115
fn ws_hrana() {
116+
let (auth, token) = gen_test_jwt_auth();
117+
95118
let mut sim = turmoil::Builder::new().build();
96-
sim.host("primary", make_standalone_server);
97-
sim.client("client", async {
119+
sim.host("primary", move || make_standalone_server(auth.clone()));
120+
121+
sim.client("client", async move {
98122
let url = "ws://primary:8080";
99123

100124
let req = url.into_client_request().unwrap();
@@ -116,7 +140,7 @@ fn ws_hrana() {
116140
}
117141

118142
let msg = ClientMsg::Hello {
119-
jwt: Some(TEST_JWT_KEY.to_string()),
143+
jwt: Some(token.to_string()),
120144
};
121145

122146
let msg_data = serde_json::to_string(&msg).unwrap();

0 commit comments

Comments
 (0)