Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/api/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -261,12 +261,12 @@ mod tests {
}
}

/// Fake resource for pagination testing
/// Fake resource for pagination testing.
struct FakeResource {
pub id: String,
}

/// Fake query params for pagination testing
/// Fake query params for pagination testing.
#[derive(Clone, Default, Serialize)]
struct FakeQueryParams {
pub marker: Option<String>,
Expand Down
9 changes: 8 additions & 1 deletion src/revoke/backend.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
use async_trait::async_trait;

use crate::keystone::ServiceState;
use crate::revoke::RevokeProviderError;
use crate::revoke::{RevokeProviderError, types::*};
use crate::token::types::Token;

pub mod error;
Expand All @@ -28,6 +28,13 @@ pub mod sql;
#[cfg_attr(test, mockall::automock)]
#[async_trait]
pub trait RevokeBackend: Send + Sync {
/// Create revocation event.
async fn create_revocation_event(
&self,
state: &ServiceState,
event: RevocationEventCreate,
) -> Result<RevocationEvent, RevokeProviderError>;

/// Check token revocation.
///
/// Check whether there are existing revocation records that invalidate the
Expand Down
9 changes: 9 additions & 0 deletions src/revoke/backend/sql.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,15 @@ impl TryFrom<db_revocation_event::Model> for RevocationEvent {

#[async_trait]
impl RevokeBackend for SqlBackend {
/// Create revocation event.
async fn create_revocation_event(
&self,
state: &ServiceState,
event: RevocationEventCreate,
) -> Result<RevocationEvent, RevokeProviderError> {
Ok(create::create(&state.db, event).await?)
}

/// Check the token for being revoked.
///
/// List not expired revocation records that invalidate the token and
Expand Down
9 changes: 7 additions & 2 deletions src/revoke/mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ use mockall::mock;

use crate::config::Config;
use crate::plugin_manager::PluginManager;
use crate::revoke::RevokeApi;
use crate::revoke::error::RevokeProviderError;
use crate::revoke::{RevokeApi, RevokeProviderError, types::*};
use crate::token::types::Token;

use crate::keystone::ServiceState;
Expand All @@ -32,6 +31,12 @@ mock! {

#[async_trait]
impl RevokeApi for RevokeProvider {
async fn create_revocation_event(
&self,
state: &ServiceState,
event: RevocationEventCreate
) -> Result<RevocationEvent, RevokeProviderError>;

async fn is_token_revoked(
&self,
state: &ServiceState,
Expand Down
58 changes: 57 additions & 1 deletion src/revoke/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@ use crate::config::Config;
use crate::keystone::ServiceState;
use crate::plugin_manager::PluginManager;
use crate::revoke::backend::{RevokeBackend, sql::SqlBackend};
use crate::revoke::error::RevokeProviderError;
use crate::token::types::Token;

pub use error::RevokeProviderError;
#[cfg(test)]
pub use mock::MockRevokeProvider;
pub use types::*;
Expand Down Expand Up @@ -85,6 +85,18 @@ impl RevokeProvider {

#[async_trait]
impl RevokeApi for RevokeProvider {
/// Create revocation event.
#[tracing::instrument(level = "info", skip(self, state))]
async fn create_revocation_event(
&self,
state: &ServiceState,
event: RevocationEventCreate,
) -> Result<RevocationEvent, RevokeProviderError> {
self.backend_driver
.create_revocation_event(state, event)
.await
}

/// Check whether the token has been revoked or not.
///
/// Checks revocation events matching the token parameters and return
Expand All @@ -111,3 +123,47 @@ impl RevokeApi for RevokeProvider {
self.backend_driver.revoke_token(state, token).await
}
}

#[cfg(test)]
mod tests {
use sea_orm::DatabaseConnection;
use std::sync::Arc;

use super::backend::MockRevokeBackend;
use super::*;
use crate::config::Config;
use crate::keystone::Service;
use crate::policy::MockPolicyFactory;
use crate::provider::Provider;

fn get_state_mock() -> Arc<Service> {
Arc::new(
Service::new(
Config::default(),
DatabaseConnection::Disconnected,
Provider::mocked_builder().build().unwrap(),
MockPolicyFactory::default(),
)
.unwrap(),
)
}

#[tokio::test]
async fn test_create_revocation_event() {
let state = get_state_mock();
let mut backend = MockRevokeBackend::default();
backend
.expect_create_revocation_event()
.returning(|_, _| Ok(RevocationEvent::default()));
let provider = RevokeProvider {
backend_driver: Arc::new(backend),
};

assert!(
provider
.create_revocation_event(&state, RevocationEventCreate::default())
.await
.is_ok()
);
}
}
9 changes: 8 additions & 1 deletion src/revoke/types/provider_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,19 @@
use async_trait::async_trait;

use crate::keystone::ServiceState;
use crate::revoke::RevokeProviderError;
use crate::revoke::{RevokeProviderError, types::*};
use crate::token::types::Token;

/// Revocation Provider interface.
#[async_trait]
pub trait RevokeApi: Send + Sync {
/// Create revocation event.
async fn create_revocation_event(
&self,
state: &ServiceState,
event: RevocationEventCreate,
) -> Result<RevocationEvent, RevokeProviderError>;

/// Check whether the token has been revoked of not.
///
/// Checks revocation events matching the token parameters and return
Expand Down
Loading