@@ -83,7 +83,8 @@ struct debug_bundle_service_fixture : public seastar_test {
8383 }
8484
8585 ss::future<debug_bundle::result<debug_bundle::debug_bundle_status_data>>
86- wait_for_process_to_finish (const std::chrono::seconds timeout) {
86+ wait_for_process_to_finish (
87+ const std::chrono::seconds timeout = std::chrono::seconds{10 }) {
8788 const auto start_time = debug_bundle::clock::now ();
8889 while (debug_bundle::clock::now () - start_time <= timeout) {
8990 auto status = co_await _service.local ().rpk_debug_bundle_status ();
@@ -190,7 +191,7 @@ TEST_F_CORO(debug_bundle_service_started_fixture, run_process) {
190191 EXPECT_EQ (status.assume_value ().job_id , job_id);
191192 EXPECT_EQ (status.assume_value ().file_name , fmt::format (" {}.zip" , job_id));
192193
193- ASSERT_NO_THROW_CORO (status = co_await wait_for_process_to_finish (10s ));
194+ ASSERT_NO_THROW_CORO (status = co_await wait_for_process_to_finish ());
194195
195196 ASSERT_TRUE_CORO (status.has_value ()) << res.assume_error ().message ();
196197
@@ -512,7 +513,7 @@ TEST_F_CORO(
512513 auto term_res = co_await _service.local ().cancel_rpk_debug_bundle (job_id);
513514 ASSERT_TRUE_CORO (term_res.has_value ()) << term_res.assume_error ().message ();
514515
515- ASSERT_NO_THROW_CORO (status = co_await wait_for_process_to_finish (10s ));
516+ ASSERT_NO_THROW_CORO (status = co_await wait_for_process_to_finish ());
516517
517518 ASSERT_TRUE_CORO (status.has_value ()) << res.assume_error ().message ();
518519
@@ -725,3 +726,128 @@ TEST_F_CORO(debug_bundle_service_started_fixture, validate_metadata) {
725726 EXPECT_EQ (
726727 metadata.sha256_checksum , co_await calculate_sha256_sum (job_file));
727728}
729+
730+ TEST_F_CORO (debug_bundle_service_started_fixture, validate_restart) {
731+ debug_bundle::job_id_t job_id (uuid_t::create ());
732+
733+ co_await run_bundle (job_id);
734+
735+ auto status = co_await _service.local ().rpk_debug_bundle_status ();
736+ ASSERT_TRUE_CORO (status.has_value ()) << status.assume_error ().message ();
737+
738+ co_await restart_service ();
739+
740+ auto status_restart = co_await _service.local ().rpk_debug_bundle_status ();
741+ ASSERT_TRUE_CORO (status_restart.has_value ())
742+ << status_restart.assume_error ().message ();
743+
744+ EXPECT_EQ (status.assume_value (), status_restart.assume_value ());
745+ }
746+
747+ TEST_F_CORO (
748+ debug_bundle_service_started_fixture, validate_restart_remove_file) {
749+ debug_bundle::job_id_t job_id (uuid_t::create ());
750+
751+ co_await run_bundle (job_id);
752+
753+ auto file_path = co_await _service.local ().rpk_debug_bundle_path (job_id);
754+ ASSERT_TRUE_CORO (file_path.has_value ())
755+ << file_path.assume_error ().message ();
756+
757+ // Remove the file and restart the service - the metadata should be removed
758+ co_await ss::remove_file (file_path.assume_value ().native ());
759+
760+ co_await restart_service ();
761+
762+ auto status_restart = co_await _service.local ().rpk_debug_bundle_status ();
763+ ASSERT_FALSE_CORO (status_restart.has_value ());
764+ EXPECT_EQ (
765+ status_restart.assume_error ().code (),
766+ debug_bundle::error_code::debug_bundle_process_never_started);
767+
768+ EXPECT_FALSE (
769+ _kvstore
770+ ->get (
771+ storage::kvstore::key_space::debug_bundle,
772+ bytes::from_string (debug_bundle::service::debug_bundle_metadata_key))
773+ .has_value ());
774+ }
775+
776+ TEST_F_CORO (debug_bundle_service_started_fixture, validate_invalid_sha) {
777+ debug_bundle::job_id_t job_id (uuid_t::create ());
778+
779+ co_await run_bundle (job_id);
780+
781+ ASSERT_NO_THROW_CORO (co_await wait_for_kvstore_to_populate (_kvstore.get ()));
782+
783+ {
784+ auto metadata_buf = _kvstore->get (
785+ storage::kvstore::key_space::debug_bundle,
786+ bytes::from_string (debug_bundle::service::debug_bundle_metadata_key));
787+ ASSERT_TRUE_CORO (metadata_buf.has_value ());
788+ iobuf_parser parser (std::move (metadata_buf.value ()));
789+ auto metadata = serde::read<debug_bundle::metadata>(parser);
790+ metadata.sha256_checksum = bytes::from_string (" invalid" );
791+ iobuf buf;
792+ serde::write (buf, std::move (metadata));
793+ co_await _kvstore->put (
794+ storage::kvstore::key_space::debug_bundle,
795+ bytes::from_string (debug_bundle::service::debug_bundle_metadata_key),
796+ std::move (buf));
797+ }
798+
799+ co_await restart_service ();
800+
801+ auto status_restart = co_await _service.local ().rpk_debug_bundle_status ();
802+ ASSERT_FALSE_CORO (status_restart.has_value ());
803+ EXPECT_EQ (
804+ status_restart.assume_error ().code (),
805+ debug_bundle::error_code::debug_bundle_process_never_started);
806+
807+ EXPECT_FALSE (
808+ _kvstore
809+ ->get (
810+ storage::kvstore::key_space::debug_bundle,
811+ bytes::from_string (debug_bundle::service::debug_bundle_metadata_key))
812+ .has_value ());
813+ }
814+
815+ TEST_F_CORO (debug_bundle_service_started_fixture, restart_unsuccessful_run) {
816+ debug_bundle::job_id_t job_id (uuid_t::create ());
817+
818+ auto res = co_await _service.local ().initiate_rpk_debug_bundle_collection (
819+ job_id, {});
820+ ASSERT_TRUE_CORO (res.has_value ()) << res.assume_error ().message ();
821+
822+ auto status = co_await _service.local ().rpk_debug_bundle_status ();
823+ ASSERT_TRUE_CORO (status.has_value ()) << res.assume_error ().message ();
824+
825+ EXPECT_EQ (
826+ status.assume_value ().status , debug_bundle::debug_bundle_status::running);
827+
828+ auto term_res = co_await _service.local ().cancel_rpk_debug_bundle (job_id);
829+ ASSERT_TRUE_CORO (term_res.has_value ()) << term_res.assume_error ().message ();
830+
831+ ASSERT_NO_THROW_CORO (status = co_await wait_for_process_to_finish ());
832+
833+ ASSERT_TRUE_CORO (status.has_value ()) << status.assume_error ().message ();
834+
835+ EXPECT_EQ (
836+ status.assume_value ().status , debug_bundle::debug_bundle_status::error);
837+
838+ co_await restart_service ();
839+
840+ auto status_restart = co_await _service.local ().rpk_debug_bundle_status ();
841+ ASSERT_TRUE_CORO (status_restart.has_value ())
842+ << status_restart.assume_error ().message ();
843+ EXPECT_EQ (
844+ status_restart.assume_value ().status ,
845+ debug_bundle::debug_bundle_status::error);
846+
847+ EXPECT_TRUE (
848+ _kvstore
849+ ->get (
850+ storage::kvstore::key_space::debug_bundle,
851+ bytes::from_string (debug_bundle::service::debug_bundle_metadata_key))
852+ .has_value ());
853+ }
0 commit comments