use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughput};
use ri::auth::RiJWTManager;
fn bench_jwt_token_generation(c: &mut Criterion) {
let manager = RiJWTManager::create("benchmark_secret_key_12345".to_string(), 3600);
let mut group = c.benchmark_group("jwt_generation");
group.throughput(Throughput::Elements(1));
group.bench_function("generate_token_no_roles", |b| {
b.iter(|| {
let token = manager.generate_token("user123", vec![], vec![]).unwrap();
black_box(token);
});
});
group.bench_function("generate_token_with_roles", |b| {
b.iter(|| {
let token = manager.generate_token(
"user123",
vec!["admin".to_string(), "user".to_string()],
vec!["read".to_string(), "write".to_string()],
).unwrap();
black_box(token);
});
});
group.bench_function("generate_token_many_permissions", |b| {
b.iter(|| {
let permissions: Vec<String> = (0..50).map(|i| format!("perm_{}", i)).collect();
let token = manager.generate_token(
"user123",
vec!["admin".to_string()],
permissions,
).unwrap();
black_box(token);
});
});
group.finish();
}
fn bench_jwt_token_validation(c: &mut Criterion) {
let manager = RiJWTManager::create("benchmark_secret_key_12345".to_string(), 3600);
let simple_token = manager.generate_token("user123", vec![], vec![]).unwrap();
let roles_token = manager.generate_token(
"user123",
vec!["admin".to_string(), "user".to_string()],
vec!["read".to_string(), "write".to_string()],
).unwrap();
let mut group = c.benchmark_group("jwt_validation");
group.throughput(Throughput::Elements(1));
group.bench_function("validate_simple_token", |b| {
b.iter(|| {
let claims = manager.validate_token(&simple_token).unwrap();
black_box(claims);
});
});
group.bench_function("validate_token_with_roles", |b| {
b.iter(|| {
let claims = manager.validate_token(&roles_token).unwrap();
black_box(claims);
});
});
group.finish();
}
fn bench_jwt_round_trip(c: &mut Criterion) {
let manager = RiJWTManager::create("benchmark_secret_key_12345".to_string(), 3600);
let mut group = c.benchmark_group("jwt_round_trip");
group.throughput(Throughput::Elements(1));
group.bench_function("generate_and_validate", |b| {
b.iter(|| {
let token = manager.generate_token("user123", vec!["admin".to_string()], vec!["read".to_string()]).unwrap();
let claims = manager.validate_token(&token).unwrap();
black_box(claims);
});
});
group.finish();
}
fn bench_jwt_manager_creation(c: &mut Criterion) {
let mut group = c.benchmark_group("jwt_manager_creation");
group.throughput(Throughput::Elements(1));
group.bench_function("create_manager", |b| {
b.iter(|| {
let manager = RiJWTManager::create("secret_key".to_string(), 3600);
black_box(manager);
});
});
group.finish();
}
criterion_group!(
auth_benches,
bench_jwt_token_generation,
bench_jwt_token_validation,
bench_jwt_round_trip,
bench_jwt_manager_creation,
);
criterion_main!(auth_benches);