summaryrefslogtreecommitdiffstats
path: root/crates/core/tedge_mapper/src/sm_c8y_mapper/tests.rs
diff options
context:
space:
mode:
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.rs70
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())
+ }
+}