buffet: Crash on detecting duplicate command definitions

BUG=chromium:448815
TEST=unittests, buffet_BasicDBusAPI still passes, indicating the daemon
starts up and runs correctly.

Change-Id: I5bee8f8538735b9294d239514d197ea46f17ff79
Reviewed-on: https://chromium-review.googlesource.com/240818
Tested-by: Christopher Wiley <wiley@chromium.org>
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
Reviewed-by: Anton Muhin <antonm@chromium.org>
diff --git a/buffet/commands/command_dictionary.cc b/buffet/commands/command_dictionary.cc
index 58ab823..1dd0407 100644
--- a/buffet/commands/command_dictionary.cc
+++ b/buffet/commands/command_dictionary.cc
@@ -127,15 +127,10 @@
   // daemon on the same device.
   for (const auto& pair : new_defs) {
     auto iter = definitions_.find(pair.first);
-    if (iter != definitions_.end()) {
-        chromeos::Error::AddToPrintf(
-            error, FROM_HERE, errors::commands::kDomain,
-            errors::commands::kDuplicateCommandDef,
-            "Definition for command '%s' overrides an earlier "
-            "definition in category '%s'",
-            pair.first.c_str(), iter->second->GetCategory().c_str());
-        return false;
-    }
+    CHECK(iter == definitions_.end())
+        << "Definition for command '" << pair.first
+        << "' overrides an earlier definition in category '"
+        << iter->second->GetCategory().c_str() << "'";
   }
 
   // Now that we successfully loaded all the command definitions,
diff --git a/buffet/commands/command_dictionary_unittest.cc b/buffet/commands/command_dictionary_unittest.cc
index 10e7ec9..0519d88 100644
--- a/buffet/commands/command_dictionary_unittest.cc
+++ b/buffet/commands/command_dictionary_unittest.cc
@@ -107,18 +107,16 @@
   error.reset();
 }
 
-TEST(CommandDictionary, LoadCommands_RedefineInDifferentCategory) {
+TEST(CommandDictionaryDeathTest, LoadCommands_RedefineInDifferentCategory) {
   // Redefine commands in different category.
   buffet::CommandDictionary dict;
   chromeos::ErrorPtr error;
   auto json = CreateDictionaryValue(
       "{'robot':{'jump':{'parameters':{},'results':{}}}}");
   dict.LoadCommands(*json, "category1", nullptr, &error);
-  EXPECT_FALSE(dict.LoadCommands(*json, "category2", nullptr, &error));
-  EXPECT_EQ("duplicate_command_definition", error->GetCode());
-  EXPECT_EQ("Definition for command 'robot.jump' overrides an earlier "
-            "definition in category 'category1'", error->GetMessage());
-  error.reset();
+  ASSERT_DEATH(dict.LoadCommands(*json, "category2", nullptr, &error),
+               ".*Definition for command 'robot.jump' overrides an "
+               "earlier definition in category 'category1'");
 }
 
 TEST(CommandDictionary, LoadCommands_CustomCommandNaming) {