diff options
Diffstat (limited to 'crates/core/tedge_mapper/src/sm_c8y_mapper/tests.rs')
-rw-r--r-- | crates/core/tedge_mapper/src/sm_c8y_mapper/tests.rs | 70 |
1 files changed, 68 insertions, 2 deletions
diff --git a/crates/core/tedge_mapper/src/sm_c8y_mapper/tests.rs b/crates/core/tedge_mapper/src/sm_c8y_mapper/tests.rs index bd3515e8..7f471ef2 100644 --- a/crates/core/tedge_mapper/src/sm_c8y_mapper/tests.rs +++ b/crates/core/tedge_mapper/src/sm_c8y_mapper/tests.rs @@ -1,4 +1,8 @@ +use crate::sm_c8y_mapper::error::SMCumulocityMapperError; +use crate::sm_c8y_mapper::http_proxy::{C8YHttpProxy, JwtAuthHttpProxy}; +use crate::sm_c8y_mapper::json_c8y::C8yUpdateSoftwareListResponse; use crate::sm_c8y_mapper::mapper::CumulocitySoftwareManagement; +use c8y_smartrest::smartrest_deserializer::SmartRestJwtResponse; use mqtt_client::Client; use mqtt_tests::test_mqtt_server::MqttProcessHandler; use mqtt_tests::with_timeout::{Maybe, WithTimeout}; @@ -388,6 +392,36 @@ async fn mapper_publishes_software_update_request_with_wrong_action() { .await; } +#[tokio::test] +#[serial_test::serial] +async fn get_jwt_token_full_run() { + // Given a background process that publish JWT tokens on demand. + let broker = mqtt_tests::test_mqtt_broker(); + broker.map_messages_background(|(topic, _)| { + let mut response = vec![]; + if &topic == "c8y/s/uat" { + response.push(("c8y/s/dat".into(), "71,1111".into())); + } + response + }); + + // An JwtAuthHttpProxy ... + let mqtt_config = mqtt_client::Config::default().with_port(broker.port); + let mqtt_client = Client::connect("JWT-Requester-Test", &mqtt_config) + .await + .unwrap(); + let http_client = reqwest::ClientBuilder::new().build().unwrap(); + let http_proxy = + JwtAuthHttpProxy::new(mqtt_client, http_client, "test.tenant.com", "test-device"); + + // ... fetches and returns these JWT tokens. + let jwt_token = http_proxy.get_jwt_token().await; + + // `get_jwt_token` should return `Ok` and the value of token should be as set above `1111`. + assert!(jwt_token.is_ok()); + assert_eq!(jwt_token.unwrap().token(), "1111"); +} + fn create_tedge_config(mqtt_port: u16) -> TEdgeConfig { // Create a config file in a temporary directory. let temp_dir = tempfile::tempdir().unwrap(); @@ -425,10 +459,11 @@ fn remove_whitespace(s: &str) -> String { } async fn start_sm_mapper(mqtt_port: u16) -> Result<JoinHandle<()>, anyhow::Error> { - let tedge_config = create_tedge_config(mqtt_port); let mqtt_config = mqtt_client::Config::default().with_port(mqtt_port); + let mqtt_client = Client::connect("SM-C8Y-Mapper-Test", &mqtt_config).await?; - let sm_mapper = CumulocitySoftwareManagement::new(mqtt_client, tedge_config); + let http_proxy = FakeC8YHttpProxy {}; + let mut sm_mapper = CumulocitySoftwareManagement::new(mqtt_client, http_proxy); let messages = sm_mapper.subscribe().await?; let mapper_task = tokio::spawn(async move { @@ -440,3 +475,34 @@ async fn start_sm_mapper(mqtt_port: u16) -> Result<JoinHandle<()>, anyhow::Error async fn publish_a_fake_jwt_token(broker: &MqttProcessHandler) { let _ = broker.publish("c8y/s/dat", "71,1111").await.unwrap(); } + +struct FakeC8YHttpProxy {} + +#[async_trait::async_trait] +impl C8YHttpProxy for FakeC8YHttpProxy { + async fn init(&mut self) -> Result<(), SMCumulocityMapperError> { + Ok(()) + } + + fn url_is_in_my_tenant_domain(&self, _url: &str) -> bool { + true + } + + async fn get_jwt_token(&self) -> Result<SmartRestJwtResponse, SMCumulocityMapperError> { + Ok(SmartRestJwtResponse::try_new("71,fake-token")?) + } + + async fn send_software_list_http( + &self, + _c8y_software_list: &C8yUpdateSoftwareListResponse, + ) -> Result<(), SMCumulocityMapperError> { + Ok(()) + } + + async fn upload_log_binary( + &self, + _log_content: &str, + ) -> Result<String, SMCumulocityMapperError> { + Ok("fake/upload/url".into()) + } +} |