| 421 | |
| 422 | #[test] |
| 423 | fn test_handle() { |
| 424 | let tests = vec![ |
| 425 | AnsTest { |
| 426 | name: "add new channels (ack)".into(), |
| 427 | device_session: internal::DeviceSession { |
| 428 | enabled_uplink_channel_indices: vec![0, 1, 2], |
| 429 | mac_command_error_count: [(lrwn::CID::NewChannelReq.to_u8() as u32, 1)] |
| 430 | .iter() |
| 431 | .cloned() |
| 432 | .collect(), |
| 433 | ..Default::default() |
| 434 | }, |
| 435 | new_channel_ans: lrwn::MACCommandSet::new(vec![lrwn::MACCommand::NewChannelAns( |
| 436 | lrwn::NewChannelAnsPayload { |
| 437 | channel_freq_ok: true, |
| 438 | dr_range_ok: true, |
| 439 | }, |
| 440 | )]), |
| 441 | new_channel_req: Some(lrwn::MACCommandSet::new(vec![ |
| 442 | lrwn::MACCommand::NewChannelReq(lrwn::NewChannelReqPayload { |
| 443 | ch_index: 3, |
| 444 | freq: 868600000, |
| 445 | min_dr: 3, |
| 446 | max_dr: 5, |
| 447 | }), |
| 448 | ])), |
| 449 | expected_device_session: internal::DeviceSession { |
| 450 | enabled_uplink_channel_indices: vec![0, 1, 2, 3], |
| 451 | extra_uplink_channels: [( |
| 452 | 3, |
| 453 | internal::DeviceSessionChannel { |
| 454 | frequency: 868600000, |
| 455 | data_rates: vec![3, 4, 5], |
| 456 | ..Default::default() |
| 457 | }, |
| 458 | )] |
| 459 | .iter() |
| 460 | .cloned() |
| 461 | .collect(), |
| 462 | ..Default::default() |
| 463 | }, |
| 464 | expected_error: None, |
| 465 | }, |
| 466 | AnsTest { |
| 467 | name: "add new channels (nack)".into(), |
| 468 | device_session: internal::DeviceSession { |
| 469 | enabled_uplink_channel_indices: vec![0, 1, 2], |
| 470 | ..Default::default() |
| 471 | }, |
| 472 | new_channel_ans: lrwn::MACCommandSet::new(vec![lrwn::MACCommand::NewChannelAns( |
| 473 | lrwn::NewChannelAnsPayload { |
| 474 | channel_freq_ok: false, |
| 475 | dr_range_ok: true, |
| 476 | }, |
| 477 | )]), |
| 478 | new_channel_req: Some(lrwn::MACCommandSet::new(vec![ |
| 479 | lrwn::MACCommand::NewChannelReq(lrwn::NewChannelReqPayload { |
| 480 | ch_index: 3, |