@@ -211,7 +211,7 @@ static void connect_cloud(void)
211211 err = zbus_chan_pub (& NETWORK_CHAN , & nw , K_NO_WAIT );
212212 TEST_ASSERT_EQUAL (0 , err );
213213
214- k_sleep (K_MSEC (100 ));
214+ k_sleep (K_MSEC (PROCESSING_DELAY_MS ));
215215}
216216
217217static void dummy_cb (const struct zbus_channel * chan )
@@ -516,7 +516,7 @@ void test_connected_disconnected_to_connected_send_payload_disconnect(void)
516516 TEST_ASSERT_EQUAL (0 , err );
517517
518518 /* Transport module needs CPU to run state machine */
519- k_sleep (K_MSEC (100 ));
519+ k_sleep (K_MSEC (PROCESSING_DELAY_MS ));
520520
521521 err = k_sem_take (& cloud_connected , K_SECONDS (1 ));
522522 TEST_ASSERT_EQUAL (0 , err );
@@ -525,7 +525,7 @@ void test_connected_disconnected_to_connected_send_payload_disconnect(void)
525525 TEST_ASSERT_EQUAL (0 , err );
526526
527527 /* Transport module needs CPU to run state machine */
528- k_sleep (K_MSEC (100 ));
528+ k_sleep (K_MSEC (PROCESSING_DELAY_MS ));
529529
530530 TEST_ASSERT_EQUAL (1 , nrf_cloud_coap_json_message_send_fake .call_count );
531531 TEST_ASSERT_EQUAL (0 , strncmp (nrf_cloud_coap_json_message_send_fake .arg0_val ,
@@ -539,7 +539,7 @@ void test_connected_disconnected_to_connected_send_payload_disconnect(void)
539539 TEST_ASSERT_EQUAL (0 , err );
540540
541541 /* Transport module needs CPU to run state machine */
542- k_sleep (K_MSEC (100 ));
542+ k_sleep (K_MSEC (PROCESSING_DELAY_MS ));
543543
544544 err = k_sem_take (& cloud_disconnected , K_SECONDS (1 ));
545545 TEST_ASSERT_EQUAL (0 , err );
@@ -597,7 +597,7 @@ void test_gnss_location_data_handling(void)
597597 TEST_ASSERT_EQUAL (0 , err );
598598
599599 /* Give the module time to process */
600- k_sleep (K_MSEC (100 ));
600+ k_sleep (K_MSEC (PROCESSING_DELAY_MS ));
601601
602602 /* Verify that GNSS location data was sent to nRF Cloud */
603603 TEST_ASSERT_EQUAL (1 , nrf_cloud_coap_location_send_fake .call_count );
@@ -629,7 +629,7 @@ void test_storage_data_battery_sent_to_cloud(void)
629629 TEST_ASSERT_EQUAL (0 , err );
630630
631631 /* Allow processing */
632- k_sleep (K_MSEC (100 ));
632+ k_sleep (K_MSEC (PROCESSING_DELAY_MS ));
633633
634634 /* One successful read + one -EAGAIN drain */
635635 TEST_ASSERT_EQUAL (2 , storage_batch_read_fake .call_count );
@@ -657,7 +657,7 @@ void test_storage_data_environmental_sent_to_cloud(void)
657657 ARG_UNUSED (err );
658658
659659 /* Allow processing */
660- k_sleep (K_MSEC (100 ));
660+ k_sleep (K_MSEC (PROCESSING_DELAY_MS ));
661661
662662 /* One successful read + one -EAGAIN drain */
663663 TEST_ASSERT_EQUAL (2 , storage_batch_read_fake .call_count );
@@ -685,14 +685,103 @@ void test_storage_data_network_conn_eval_sent_to_cloud(void)
685685 ARG_UNUSED (err );
686686
687687 /* Allow processing */
688- k_sleep (K_MSEC (100 ));
688+ k_sleep (K_MSEC (PROCESSING_DELAY_MS ));
689689
690690 /* One successful read + one -EAGAIN drain */
691691 TEST_ASSERT_EQUAL (2 , storage_batch_read_fake .call_count );
692692 /* Expect two sensor publishes: CONEVAL and RSRP */
693693 TEST_ASSERT_EQUAL (2 , nrf_cloud_coap_sensor_send_fake .call_count );
694694}
695695
696+ void test_provisioning_failed_with_network_connected_should_go_to_backoff (void )
697+ {
698+ int err ;
699+ struct network_msg network_msg = {
700+ .type = NETWORK_CONNECTED
701+ };
702+ struct cloud_msg cloud_msg = {
703+ .type = CLOUD_PROVISIONING_REQUEST
704+ };
705+ struct nrf_provisioning_callback_data event = {
706+ .type = NRF_PROVISIONING_EVENT_FAILED
707+ };
708+
709+ /* Start with a connected network state */
710+ zbus_chan_pub (& NETWORK_CHAN , & network_msg , K_NO_WAIT );
711+ k_sleep (K_MSEC (PROCESSING_DELAY_MS ));
712+
713+ /* Should now be connected */
714+ err = k_sem_take (& cloud_connected , K_SECONDS (WAIT_TIMEOUT ));
715+ TEST_ASSERT_EQUAL (0 , err );
716+
717+ /* Trigger provisioning request */
718+ zbus_chan_pub (& CLOUD_CHAN , & cloud_msg , K_NO_WAIT );
719+ k_sleep (K_MSEC (PROCESSING_DELAY_MS ));
720+
721+ /* Should now be disconnected (entering provisioning state) */
722+ err = k_sem_take (& cloud_disconnected , K_SECONDS (WAIT_TIMEOUT ));
723+ TEST_ASSERT_EQUAL (0 , err );
724+
725+ TEST_ASSERT_EQUAL (1 , nrf_provisioning_trigger_manually_fake .call_count );
726+
727+ /* Simulate provisioning failure while network is still connected */
728+ handler (& event );
729+
730+ /* Allow time for state machine to process the failure and enter backoff state */
731+ k_sleep (K_SECONDS (INITIAL_PROVISIONING_RETRY_SEC + 1 ));
732+
733+ /* Verify that provisioning is retried after backoff
734+ * (indicating we went to backoff state)
735+ */
736+ TEST_ASSERT_EQUAL (2 , nrf_provisioning_trigger_manually_fake .call_count );
737+ }
738+
739+ void test_provisioning_failed_with_network_disconnected_should_go_to_disconnected (void )
740+ {
741+ int err ;
742+ struct network_msg network_msg = {
743+ .type = NETWORK_CONNECTED
744+ };
745+ struct cloud_msg cloud_msg = {
746+ .type = CLOUD_PROVISIONING_REQUEST
747+ };
748+ struct nrf_provisioning_callback_data event = {
749+ .type = NRF_PROVISIONING_EVENT_FAILED
750+ };
751+
752+ /* Start with a connected network state */
753+ zbus_chan_pub (& NETWORK_CHAN , & network_msg , K_NO_WAIT );
754+ k_sleep (K_MSEC (PROCESSING_DELAY_MS ));
755+
756+ /* Should now be connected */
757+ err = k_sem_take (& cloud_connected , K_SECONDS (WAIT_TIMEOUT ));
758+ TEST_ASSERT_EQUAL (0 , err );
759+
760+ /* Trigger provisioning request */
761+ zbus_chan_pub (& CLOUD_CHAN , & cloud_msg , K_NO_WAIT );
762+ k_sleep (K_MSEC (PROCESSING_DELAY_MS ));
763+
764+ /* Should now be disconnected (entering provisioning state) */
765+ err = k_sem_take (& cloud_disconnected , K_SECONDS (WAIT_TIMEOUT ));
766+ TEST_ASSERT_EQUAL (0 , err );
767+
768+ TEST_ASSERT_EQUAL (1 , nrf_provisioning_trigger_manually_fake .call_count );
769+
770+ /* Simulate network disconnect while in provisioning state */
771+ network_msg .type = NETWORK_DISCONNECTED ;
772+ zbus_chan_pub (& NETWORK_CHAN , & network_msg , K_NO_WAIT );
773+ k_sleep (K_MSEC (PROCESSING_DELAY_MS ));
774+
775+ /* Simulate provisioning failure while network is disconnected */
776+ handler (& event );
777+
778+ /* Allow time for state machine to process the failure and enter disconnected state */
779+ k_sleep (K_SECONDS (INITIAL_PROVISIONING_RETRY_SEC + 1 ));
780+
781+ /* Verify that provisioning is NOT retried (indicating we went to disconnected state) */
782+ TEST_ASSERT_EQUAL (1 , nrf_provisioning_trigger_manually_fake .call_count );
783+ }
784+
696785/* This is required to be added to each test. That is because unity's
697786 * main may return nonzero, while zephyr's main currently must
698787 * return 0 in all cases (other values are reserved).
0 commit comments