Skip to content

Commit 661edd1

Browse files
committed
backend/management: dont reset mtu on management request
1 parent d039091 commit 661edd1

File tree

1 file changed

+82
-10
lines changed

1 file changed

+82
-10
lines changed

backend/src/routes/management.rs

Lines changed: 82 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -396,16 +396,28 @@ pub async fn management(
396396

397397
let mut conn = get_connection(&state)?;
398398
web_block_unpacked(move || {
399-
match diesel::update(chargers::chargers)
400-
.filter(chargers::id.eq(charger_id))
401-
.set((
402-
chargers::firmware_version.eq(fw_version),
403-
chargers::webinterface_port.eq(port as i32),
404-
chargers::device_type.eq(device_type),
405-
chargers::mtu.eq(mtu.map(|m| m as i32)),
406-
))
407-
.execute(&mut conn)
408-
{
399+
let result = if let Some(m) = mtu {
400+
diesel::update(chargers::chargers)
401+
.filter(chargers::id.eq(charger_id))
402+
.set((
403+
chargers::firmware_version.eq(fw_version),
404+
chargers::webinterface_port.eq(port as i32),
405+
chargers::device_type.eq(device_type),
406+
chargers::mtu.eq(m as i32),
407+
))
408+
.execute(&mut conn)
409+
} else {
410+
diesel::update(chargers::chargers)
411+
.filter(chargers::id.eq(charger_id))
412+
.set((
413+
chargers::firmware_version.eq(fw_version),
414+
chargers::webinterface_port.eq(port as i32),
415+
chargers::device_type.eq(device_type),
416+
))
417+
.execute(&mut conn)
418+
};
419+
420+
match result {
409421
Ok(_) => Ok(()),
410422
Err(_err) => {
411423
log::error!("Error while updating charger: {_err}");
@@ -515,6 +527,66 @@ mod tests {
515527
);
516528
}
517529

530+
#[actix_web::test]
531+
async fn test_management_with_mtu() {
532+
let (mut user, mail) = TestUser::random().await;
533+
user.login().await;
534+
let charger = user.add_random_charger().await;
535+
536+
let app = App::new().configure(configure).service(management);
537+
let app = test::init_service(app).await;
538+
539+
let user_id = get_test_uuid(&mail).unwrap();
540+
let charger_uuid_clone = charger.uuid.clone();
541+
let data = ManagementDataVersion::V2(ManagementDataVersion2 {
542+
id: charger.uuid,
543+
password: charger.password,
544+
port: 8080,
545+
firmware_version: "2.4.0".to_string(),
546+
configured_users: vec![ConfiguredUser {
547+
email: None,
548+
user_id: Some(user_id.to_string()),
549+
name: Some(String::new()),
550+
}],
551+
mtu: Some(1420),
552+
});
553+
554+
let body = ManagementSchema {
555+
id: None,
556+
password: None,
557+
data,
558+
};
559+
let req = test::TestRequest::put()
560+
.uri("/management")
561+
.append_header(("X-Forwarded-For", "123.123.123.4"))
562+
.append_header(("User-Agent", "Tinkerforge-WARP3_Charger/2.9.0+abc123"))
563+
.set_json(body)
564+
.to_request();
565+
let resp: ManagementResponseSchema = test::call_and_read_body_json(&app, req).await;
566+
567+
println!("{resp:?}");
568+
assert_eq!([1], *resp.configured_users);
569+
assert_eq!(vec![user_id.to_string()], resp.configured_users_uuids);
570+
571+
// Verify MTU, port, firmware_version, and device_type stored correctly
572+
use db_connector::models::chargers::Charger as DbCharger;
573+
use db_connector::schema::chargers::dsl::*;
574+
let pool = db_connector::test_connection_pool();
575+
let mut conn = pool.get().unwrap();
576+
let db_charger: DbCharger = chargers
577+
.filter(id.eq(uuid::Uuid::from_str(&charger_uuid_clone).unwrap()))
578+
.select(DbCharger::as_select())
579+
.get_result(&mut conn)
580+
.unwrap();
581+
assert_eq!(db_charger.mtu, Some(1420));
582+
assert_eq!(db_charger.webinterface_port, 8080);
583+
assert_eq!(db_charger.firmware_version, "2.4.0");
584+
assert_eq!(
585+
db_charger.device_type.as_deref(),
586+
Some("Tinkerforge-WARP3_Charger/2.9.0+abc123")
587+
);
588+
}
589+
518590
#[actix_web::test]
519591
async fn test_management_old_api() {
520592
let (mut user, mail) = TestUser::random().await;

0 commit comments

Comments
 (0)