@@ -770,3 +770,66 @@ TEST_F(DbDomainManagerTest, TestRestoreWithConcurrentReads) {
770770 // Validate the restored metadata.
771771 validate_metadata (tp, kafka::offset (0 ), kafka::offset (30 ));
772772}
773+
774+ TEST_F (DbDomainManagerTest, TestGetSizeBasic) {
775+ auto tp = make_tp ();
776+ // Add 3 objects, each with an extent of size 512 bytes.
777+ {
778+ l1_rpc::add_objects_request req;
779+ req.new_objects = make_new_objects (tp, kafka::offset (0 ), 3 , 10 );
780+ req.new_terms = make_terms (tp, kafka::offset (0 ), model::term_id (1 ));
781+ auto reply = initial_manager->add_objects (std::move (req)).get ();
782+ ASSERT_EQ (reply.ec , l1_rpc::errc::ok);
783+ }
784+
785+ // Query size - should be 3 * 512 = 1536 bytes.
786+ l1_rpc::get_size_request size_req{.tp = tp};
787+ auto size_reply = initial_manager->get_size (std::move (size_req)).get ();
788+ ASSERT_EQ (size_reply.ec , l1_rpc::errc::ok);
789+ ASSERT_EQ (size_reply.size , 3 * 512 );
790+ }
791+
792+ TEST_F (DbDomainManagerTest, TestGetSizeAfterReplace) {
793+ auto tp = make_tp ();
794+ // Add 5 objects, each with an extent of size 512 bytes.
795+ for (int i = 0 ; i < 5 ; ++i) {
796+ l1_rpc::add_objects_request req;
797+ req.new_objects = make_new_objects (tp, kafka::offset (i), 1 , 1 );
798+ req.new_terms = make_terms (tp, kafka::offset (i), model::term_id (1 ));
799+ auto reply = initial_manager->add_objects (std::move (req)).get ();
800+ ASSERT_EQ (reply.ec , l1_rpc::errc::ok);
801+ }
802+
803+ // Initial size should be 5 * 512 = 2560 bytes.
804+ {
805+ l1_rpc::get_size_request size_req{.tp = tp};
806+ auto size_reply = initial_manager->get_size (std::move (size_req)).get ();
807+ ASSERT_EQ (size_reply.ec , l1_rpc::errc::ok);
808+ ASSERT_EQ (size_reply.size , 5 * 512 );
809+ }
810+
811+ // Replace all 5 extents with 1 extent (also 512 bytes).
812+ l1_rpc::replace_objects_request replace_req{
813+ .metastore_partition = model::partition_id (0 ),
814+ .new_objects = make_new_objects (tp, kafka::offset (0 ), 1 , 5 ),
815+ };
816+ auto replace_reply
817+ = initial_manager->replace_objects (std::move (replace_req)).get ();
818+ ASSERT_EQ (replace_reply.ec , l1_rpc::errc::ok);
819+
820+ // Size should now be 1 * 512 = 512 bytes.
821+ {
822+ l1_rpc::get_size_request size_req{.tp = tp};
823+ auto size_reply = initial_manager->get_size (std::move (size_req)).get ();
824+ ASSERT_EQ (size_reply.ec , l1_rpc::errc::ok);
825+ ASSERT_EQ (size_reply.size , 512 );
826+ }
827+ }
828+
829+ TEST_F (DbDomainManagerTest, TestGetSizeMissingPartition) {
830+ auto tp = make_tp ();
831+ // Query size for a partition that doesn't exist.
832+ l1_rpc::get_size_request size_req{.tp = tp};
833+ auto size_reply = initial_manager->get_size (std::move (size_req)).get ();
834+ ASSERT_EQ (size_reply.ec , l1_rpc::errc::missing_ntp);
835+ }
0 commit comments