servicemanager: add sanity check in destructor

Documenting some invariants. Since I am adding some more APIs, I want
this to be explicit.

Bug: 136027762
Test: servicemanager_test
Change-Id: I67da9d92c3a457926739fb1f02411a57caefa5b8
diff --git a/cmds/servicemanager/ServiceManager.cpp b/cmds/servicemanager/ServiceManager.cpp
index 4d5c76a..119e4c3 100644
--- a/cmds/servicemanager/ServiceManager.cpp
+++ b/cmds/servicemanager/ServiceManager.cpp
@@ -25,6 +25,13 @@
 namespace android {
 
 ServiceManager::ServiceManager(std::unique_ptr<Access>&& access) : mAccess(std::move(access)) {}
+ServiceManager::~ServiceManager() {
+    // this should only happen in tests
+
+    for (const auto& [name, service] : mNameToService) {
+        CHECK(service.binder != nullptr) << name;
+    }
+}
 
 Status ServiceManager::getService(const std::string& name, sp<IBinder>* outBinder) {
     // Servicemanager is single-threaded and cannot block. This method exists for legacy reasons.
diff --git a/cmds/servicemanager/ServiceManager.h b/cmds/servicemanager/ServiceManager.h
index 78e4805..43723c5 100644
--- a/cmds/servicemanager/ServiceManager.h
+++ b/cmds/servicemanager/ServiceManager.h
@@ -25,6 +25,7 @@
 class ServiceManager : public os::BnServiceManager, public IBinder::DeathRecipient {
 public:
     ServiceManager(std::unique_ptr<Access>&& access);
+    ~ServiceManager();
 
     binder::Status getService(const std::string& name, sp<IBinder>* outBinder) override;
     binder::Status checkService(const std::string& name, sp<IBinder>* outBinder) override;