diff --git a/mediapipe/framework/graph_service.h b/mediapipe/framework/graph_service.h index c4c64a852..51caf31f2 100644 --- a/mediapipe/framework/graph_service.h +++ b/mediapipe/framework/graph_service.h @@ -107,7 +107,10 @@ template class ServiceBinding { public: bool IsAvailable() { return service_ != nullptr; } - T& GetObject() { return *service_; } + T& GetObject() { + CHECK(service_) << "Service is unavailable."; + return *service_; + } ServiceBinding() {} explicit ServiceBinding(std::shared_ptr service) : service_(service) {} diff --git a/mediapipe/framework/graph_service_test.cc b/mediapipe/framework/graph_service_test.cc index ae0809ea5..69992f212 100644 --- a/mediapipe/framework/graph_service_test.cc +++ b/mediapipe/framework/graph_service_test.cc @@ -343,5 +343,19 @@ TEST(DisallowDefaultInitializationGraphServiceTest, HasSubstr("was not provided and cannot be created"))); } +TEST(ServiceBindingTest, CrashesWhenGettingNullServiceObject) { + ASSERT_DEATH( + { + ServiceBinding binding(nullptr); + (void)binding.GetObject(); + }, + testing::ContainsRegex("Check failed: [a-z_]* Service is unavailable")); +} + +TEST(ServiceBindingTest, IsAvailableReturnsFalsOnNullServiceObject) { + ServiceBinding binding(nullptr); + EXPECT_FALSE(binding.IsAvailable()); +} + } // namespace } // namespace mediapipe