Add shared MockClock class and cleaned up base::Clock usage
Change-Id: I8492747700274591eab1a3f591ddb94814723943
Reviewed-on: https://weave-review.googlesource.com/1870
Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/libweave.gypi b/libweave.gypi
index b529add..6f64c89 100644
--- a/libweave.gypi
+++ b/libweave.gypi
@@ -115,6 +115,7 @@
'third_party/chromium/base/third_party/dmg_fp/dtoa.cc',
'third_party/chromium/base/third_party/icu/icu_utf.cc',
'third_party/chromium/base/time/clock.cc',
+ 'third_party/chromium/base/time/default_clock.cc',
'third_party/chromium/base/time/time.cc',
'third_party/chromium/base/time/time_posix.cc',
'third_party/chromium/base/values.cc',
diff --git a/src/base_api_handler_unittest.cc b/src/base_api_handler_unittest.cc
index ca47626..14421b0 100644
--- a/src/base_api_handler_unittest.cc
+++ b/src/base_api_handler_unittest.cc
@@ -5,6 +5,7 @@
#include "src/base_api_handler.h"
#include <base/strings/string_number_conversions.h>
+#include <base/time/default_clock.h>
#include <base/values.h>
#include <gtest/gtest.h>
#include <weave/provider/test/mock_config_store.h>
diff --git a/src/component_manager_impl.cc b/src/component_manager_impl.cc
index a23f34d..89ca0cd 100644
--- a/src/component_manager_impl.cc
+++ b/src/component_manager_impl.cc
@@ -31,10 +31,8 @@
LIBWEAVE_EXPORT EnumToStringMap<UserRole>::EnumToStringMap()
: EnumToStringMap(kMap) {}
-ComponentManagerImpl::ComponentManagerImpl() {}
-
-ComponentManagerImpl::ComponentManagerImpl(base::Clock* clock) : clock_{clock} {
-}
+ComponentManagerImpl::ComponentManagerImpl(base::Clock* clock)
+ : clock_{clock ? clock : &default_clock_} {}
ComponentManagerImpl::~ComponentManagerImpl() {}
@@ -343,7 +341,7 @@
auto& queue = state_change_queues_[component_path];
if (!queue)
queue.reset(new StateChangeQueue{kMaxStateChangeQueueSize});
- base::Time timestamp = clock_ ? clock_->Now() : base::Time::Now();
+ base::Time timestamp = clock_->Now();
queue->NotifyPropertiesUpdated(timestamp, dict);
for (const auto& cb : on_state_changed_)
cb.Run();
diff --git a/src/component_manager_impl.h b/src/component_manager_impl.h
index c59c6d9..426b4b0 100644
--- a/src/component_manager_impl.h
+++ b/src/component_manager_impl.h
@@ -5,6 +5,8 @@
#ifndef LIBWEAVE_SRC_COMPONENT_MANAGER_IMPL_H_
#define LIBWEAVE_SRC_COMPONENT_MANAGER_IMPL_H_
+#include <base/time/default_clock.h>
+
#include "src/commands/command_queue.h"
#include "src/component_manager.h"
#include "src/states/state_change_queue.h"
@@ -13,8 +15,7 @@
class ComponentManagerImpl final : public ComponentManager {
public:
- ComponentManagerImpl();
- explicit ComponentManagerImpl(base::Clock* clock);
+ explicit ComponentManagerImpl(base::Clock* clock = nullptr);
~ComponentManagerImpl() override;
// Loads trait definition schema.
@@ -188,6 +189,7 @@
const std::string& path,
ErrorPtr* error);
+ base::DefaultClock default_clock_;
base::Clock* clock_{nullptr};
// An ID of last state change update. Each NotifyPropertiesUpdated()
// invocation increments this value by 1.
diff --git a/src/component_manager_unittest.cc b/src/component_manager_unittest.cc
index 902ee15..c63d2dd 100644
--- a/src/component_manager_unittest.cc
+++ b/src/component_manager_unittest.cc
@@ -12,10 +12,12 @@
#include "src/bind_lambda.h"
#include "src/commands/schema_constants.h"
#include "src/mock_component_manager.h"
+#include "src/test/mock_clock.h"
namespace weave {
using test::CreateDictionaryValue;
+using testing::Return;
namespace {
@@ -65,47 +67,36 @@
// }
// }
// }
-void CreateTestComponentTree(ComponentManager* manager) {
- const char kTraits[] = R"({"t1":{},"t2":{},"t3":{},"t4":{},"t5":{},"t6":{}})";
- auto json = CreateDictionaryValue(kTraits);
- ASSERT_TRUE(manager->LoadTraits(*json, nullptr));
- EXPECT_TRUE(manager->AddComponent("", "comp1", {"t1"}, nullptr));
- EXPECT_TRUE(manager->AddComponentArrayItem("comp1", "comp2", {"t2"},
- nullptr));
- EXPECT_TRUE(manager->AddComponentArrayItem("comp1", "comp2", {"t3"},
- nullptr));
- EXPECT_TRUE(manager->AddComponent("comp1.comp2[1]", "comp3", {"t4"},
- nullptr));
- EXPECT_TRUE(manager->AddComponent("comp1.comp2[1].comp3", "comp4",
- {"t5", "t6"}, nullptr));
-}
+class ComponentManagerTest : public ::testing::Test {
+ protected:
+ void CreateTestComponentTree(ComponentManager* manager) {
+ const char kTraits[] =
+ R"({"t1":{},"t2":{},"t3":{},"t4":{},"t5":{},"t6":{}})";
+ auto json = CreateDictionaryValue(kTraits);
+ ASSERT_TRUE(manager->LoadTraits(*json, nullptr));
+ EXPECT_TRUE(manager->AddComponent("", "comp1", {"t1"}, nullptr));
+ EXPECT_TRUE(
+ manager->AddComponentArrayItem("comp1", "comp2", {"t2"}, nullptr));
+ EXPECT_TRUE(
+ manager->AddComponentArrayItem("comp1", "comp2", {"t3"}, nullptr));
+ EXPECT_TRUE(
+ manager->AddComponent("comp1.comp2[1]", "comp3", {"t4"}, nullptr));
+ EXPECT_TRUE(manager->AddComponent("comp1.comp2[1].comp3", "comp4",
+ {"t5", "t6"}, nullptr));
+ }
-// Test clock class to record predefined time intervals.
-// Implementation from base/test/simple_test_clock.{h|cc}
-class SimpleTestClock : public base::Clock {
- public:
- base::Time Now() override { return now_; }
-
- // Advances the clock by |delta|.
- void Advance(base::TimeDelta delta) { now_ += delta; }
-
- // Sets the clock to the given time.
- void SetNow(base::Time now) { now_ = now; }
-
- private:
- base::Time now_;
+ test::MockClock clock_;
+ ComponentManagerImpl manager_{&clock_};
};
} // anonymous namespace
-TEST(ComponentManager, Empty) {
- ComponentManagerImpl manager;
- EXPECT_TRUE(manager.GetTraits().empty());
- EXPECT_TRUE(manager.GetComponents().empty());
+TEST_F(ComponentManagerTest, Empty) {
+ EXPECT_TRUE(manager_.GetTraits().empty());
+ EXPECT_TRUE(manager_.GetComponents().empty());
}
-TEST(ComponentManager, LoadTraits) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, LoadTraits) {
const char kTraits[] = R"({
"trait1": {
"commands": {
@@ -125,13 +116,12 @@
}
})";
auto json = CreateDictionaryValue(kTraits);
- EXPECT_TRUE(manager.LoadTraits(*json, nullptr));
- EXPECT_JSON_EQ(kTraits, manager.GetTraits());
- EXPECT_TRUE(manager.GetComponents().empty());
+ EXPECT_TRUE(manager_.LoadTraits(*json, nullptr));
+ EXPECT_JSON_EQ(kTraits, manager_.GetTraits());
+ EXPECT_TRUE(manager_.GetComponents().empty());
}
-TEST(ComponentManager, LoadTraitsDuplicateIdentical) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, LoadTraitsDuplicateIdentical) {
const char kTraits1[] = R"({
"trait1": {
"commands": {
@@ -151,7 +141,7 @@
}
})";
auto json = CreateDictionaryValue(kTraits1);
- EXPECT_TRUE(manager.LoadTraits(*json, nullptr));
+ EXPECT_TRUE(manager_.LoadTraits(*json, nullptr));
const char kTraits2[] = R"({
"trait1": {
"commands": {
@@ -171,7 +161,7 @@
}
})";
json = CreateDictionaryValue(kTraits2);
- EXPECT_TRUE(manager.LoadTraits(*json, nullptr));
+ EXPECT_TRUE(manager_.LoadTraits(*json, nullptr));
const char kExpected[] = R"({
"trait1": {
"commands": {
@@ -195,11 +185,10 @@
}
}
})";
- EXPECT_JSON_EQ(kExpected, manager.GetTraits());
+ EXPECT_JSON_EQ(kExpected, manager_.GetTraits());
}
-TEST(ComponentManager, LoadTraitsDuplicateOverride) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, LoadTraitsDuplicateOverride) {
const char kTraits1[] = R"({
"trait1": {
"commands": {
@@ -219,7 +208,7 @@
}
})";
auto json = CreateDictionaryValue(kTraits1);
- EXPECT_TRUE(manager.LoadTraits(*json, nullptr));
+ EXPECT_TRUE(manager_.LoadTraits(*json, nullptr));
const char kTraits2[] = R"({
"trait1": {
"commands": {
@@ -239,15 +228,14 @@
}
})";
json = CreateDictionaryValue(kTraits2);
- EXPECT_FALSE(manager.LoadTraits(*json, nullptr));
+ EXPECT_FALSE(manager_.LoadTraits(*json, nullptr));
}
-TEST(ComponentManager, AddTraitDefChangedCallback) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, AddTraitDefChangedCallback) {
int count = 0;
int count2 = 0;
- manager.AddTraitDefChangedCallback(base::Bind([&count]() { count++; }));
- manager.AddTraitDefChangedCallback(base::Bind([&count2]() { count2++; }));
+ manager_.AddTraitDefChangedCallback(base::Bind([&count]() { count++; }));
+ manager_.AddTraitDefChangedCallback(base::Bind([&count2]() { count2++; }));
EXPECT_EQ(1, count);
EXPECT_EQ(1, count2);
// New definitions.
@@ -264,7 +252,7 @@
}
})";
auto json = CreateDictionaryValue(kTraits1);
- EXPECT_TRUE(manager.LoadTraits(*json, nullptr));
+ EXPECT_TRUE(manager_.LoadTraits(*json, nullptr));
EXPECT_EQ(2, count);
// Duplicate definition, shouldn't call the callback.
const char kTraits2[] = R"({
@@ -275,7 +263,7 @@
}
})";
json = CreateDictionaryValue(kTraits2);
- EXPECT_TRUE(manager.LoadTraits(*json, nullptr));
+ EXPECT_TRUE(manager_.LoadTraits(*json, nullptr));
EXPECT_EQ(2, count);
// New definition, should call the callback now.
const char kTraits3[] = R"({
@@ -286,30 +274,28 @@
}
})";
json = CreateDictionaryValue(kTraits3);
- EXPECT_TRUE(manager.LoadTraits(*json, nullptr));
+ EXPECT_TRUE(manager_.LoadTraits(*json, nullptr));
EXPECT_EQ(3, count);
// Wrong definition, shouldn't call the callback.
const char kTraits4[] = R"({
"trait4": "foo"
})";
json = CreateDictionaryValue(kTraits4);
- EXPECT_FALSE(manager.LoadTraits(*json, nullptr));
+ EXPECT_FALSE(manager_.LoadTraits(*json, nullptr));
EXPECT_EQ(3, count);
// Make sure both callbacks were called the same number of times.
EXPECT_EQ(count2, count);
}
-TEST(ComponentManager, LoadTraitsNotAnObject) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, LoadTraitsNotAnObject) {
const char kTraits1[] = R"({"trait1": 0})";
auto json = CreateDictionaryValue(kTraits1);
ErrorPtr error;
- EXPECT_FALSE(manager.LoadTraits(*json, &error));
+ EXPECT_FALSE(manager_.LoadTraits(*json, &error));
EXPECT_EQ(errors::commands::kTypeMismatch, error->GetCode());
}
-TEST(ComponentManager, FindTraitDefinition) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, FindTraitDefinition) {
const char kTraits[] = R"({
"trait1": {
"commands": {
@@ -329,9 +315,9 @@
}
})";
auto json = CreateDictionaryValue(kTraits);
- ASSERT_TRUE(manager.LoadTraits(*json, nullptr));
+ ASSERT_TRUE(manager_.LoadTraits(*json, nullptr));
- const base::DictionaryValue* trait = manager.FindTraitDefinition("trait1");
+ const base::DictionaryValue* trait = manager_.FindTraitDefinition("trait1");
ASSERT_NE(nullptr, trait);
const char kExpected1[] = R"({
"commands": {
@@ -346,7 +332,7 @@
})";
EXPECT_JSON_EQ(kExpected1, *trait);
- trait = manager.FindTraitDefinition("trait2");
+ trait = manager_.FindTraitDefinition("trait2");
ASSERT_NE(nullptr, trait);
const char kExpected2[] = R"({
"state": {
@@ -355,11 +341,10 @@
})";
EXPECT_JSON_EQ(kExpected2, *trait);
- EXPECT_EQ(nullptr, manager.FindTraitDefinition("trait3"));
+ EXPECT_EQ(nullptr, manager_.FindTraitDefinition("trait3"));
}
-TEST(ComponentManager, FindCommandDefinition) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, FindCommandDefinition) {
const char kTraits[] = R"({
"trait1": {
"commands": {
@@ -381,9 +366,9 @@
}
})";
auto json = CreateDictionaryValue(kTraits);
- ASSERT_TRUE(manager.LoadTraits(*json, nullptr));
+ ASSERT_TRUE(manager_.LoadTraits(*json, nullptr));
- const auto* cmd_def = manager.FindCommandDefinition("trait1.command1");
+ const auto* cmd_def = manager_.FindCommandDefinition("trait1.command1");
ASSERT_NE(nullptr, cmd_def);
const char kExpected1[] = R"({
"minimalRole": "user",
@@ -391,28 +376,28 @@
})";
EXPECT_JSON_EQ(kExpected1, *cmd_def);
- cmd_def = manager.FindCommandDefinition("trait2.command1");
+ cmd_def = manager_.FindCommandDefinition("trait2.command1");
ASSERT_NE(nullptr, cmd_def);
const char kExpected2[] = R"({
"minimalRole": "manager"
})";
EXPECT_JSON_EQ(kExpected2, *cmd_def);
- cmd_def = manager.FindCommandDefinition("trait2.command2");
+ cmd_def = manager_.FindCommandDefinition("trait2.command2");
ASSERT_NE(nullptr, cmd_def);
const char kExpected3[] = R"({
"minimalRole": "owner"
})";
EXPECT_JSON_EQ(kExpected3, *cmd_def);
- EXPECT_EQ(nullptr, manager.FindTraitDefinition("trait1.command2"));
- EXPECT_EQ(nullptr, manager.FindTraitDefinition("trait3.command1"));
- EXPECT_EQ(nullptr, manager.FindTraitDefinition("trait"));
- EXPECT_EQ(nullptr, manager.FindTraitDefinition("trait1.command1.parameters"));
+ EXPECT_EQ(nullptr, manager_.FindTraitDefinition("trait1.command2"));
+ EXPECT_EQ(nullptr, manager_.FindTraitDefinition("trait3.command1"));
+ EXPECT_EQ(nullptr, manager_.FindTraitDefinition("trait"));
+ EXPECT_EQ(nullptr,
+ manager_.FindTraitDefinition("trait1.command1.parameters"));
}
-TEST(ComponentManager, GetMinimalRole) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, GetMinimalRole) {
const char kTraits[] = R"({
"trait1": {
"commands": {
@@ -428,31 +413,31 @@
}
})";
auto json = CreateDictionaryValue(kTraits);
- ASSERT_TRUE(manager.LoadTraits(*json, nullptr));
+ ASSERT_TRUE(manager_.LoadTraits(*json, nullptr));
UserRole role;
- ASSERT_TRUE(manager.GetMinimalRole("trait1.command1", &role, nullptr));
+ ASSERT_TRUE(manager_.GetMinimalRole("trait1.command1", &role, nullptr));
EXPECT_EQ(UserRole::kUser, role);
- ASSERT_TRUE(manager.GetMinimalRole("trait1.command2", &role, nullptr));
+ ASSERT_TRUE(manager_.GetMinimalRole("trait1.command2", &role, nullptr));
EXPECT_EQ(UserRole::kViewer, role);
- ASSERT_TRUE(manager.GetMinimalRole("trait2.command1", &role, nullptr));
+ ASSERT_TRUE(manager_.GetMinimalRole("trait2.command1", &role, nullptr));
EXPECT_EQ(UserRole::kManager, role);
- ASSERT_TRUE(manager.GetMinimalRole("trait2.command2", &role, nullptr));
+ ASSERT_TRUE(manager_.GetMinimalRole("trait2.command2", &role, nullptr));
EXPECT_EQ(UserRole::kOwner, role);
- EXPECT_FALSE(manager.GetMinimalRole("trait1.command3", &role, nullptr));
+ EXPECT_FALSE(manager_.GetMinimalRole("trait1.command3", &role, nullptr));
}
-TEST(ComponentManager, AddComponent) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, AddComponent) {
const char kTraits[] = R"({"trait1": {}, "trait2": {}, "trait3": {}})";
auto json = CreateDictionaryValue(kTraits);
- ASSERT_TRUE(manager.LoadTraits(*json, nullptr));
- EXPECT_TRUE(manager.AddComponent("", "comp1", {"trait1", "trait2"}, nullptr));
- EXPECT_TRUE(manager.AddComponent("", "comp2", {"trait3"}, nullptr));
+ ASSERT_TRUE(manager_.LoadTraits(*json, nullptr));
+ EXPECT_TRUE(
+ manager_.AddComponent("", "comp1", {"trait1", "trait2"}, nullptr));
+ EXPECT_TRUE(manager_.AddComponent("", "comp2", {"trait3"}, nullptr));
const char kExpected[] = R"({
"comp1": {
"traits": ["trait1", "trait2"]
@@ -461,18 +446,17 @@
"traits": ["trait3"]
}
})";
- EXPECT_JSON_EQ(kExpected, manager.GetComponents());
+ EXPECT_JSON_EQ(kExpected, manager_.GetComponents());
// 'trait4' is undefined, so can't add a component referring to it.
- EXPECT_FALSE(manager.AddComponent("", "comp3", {"trait4"}, nullptr));
+ EXPECT_FALSE(manager_.AddComponent("", "comp3", {"trait4"}, nullptr));
}
-TEST(ComponentManager, AddSubComponent) {
- ComponentManagerImpl manager;
- EXPECT_TRUE(manager.AddComponent("", "comp1", {}, nullptr));
- EXPECT_TRUE(manager.AddComponent("comp1", "comp2", {}, nullptr));
- EXPECT_TRUE(manager.AddComponent("comp1", "comp3", {}, nullptr));
- EXPECT_TRUE(manager.AddComponent("comp1.comp2", "comp4", {}, nullptr));
+TEST_F(ComponentManagerTest, AddSubComponent) {
+ EXPECT_TRUE(manager_.AddComponent("", "comp1", {}, nullptr));
+ EXPECT_TRUE(manager_.AddComponent("comp1", "comp2", {}, nullptr));
+ EXPECT_TRUE(manager_.AddComponent("comp1", "comp3", {}, nullptr));
+ EXPECT_TRUE(manager_.AddComponent("comp1.comp2", "comp4", {}, nullptr));
const char kExpected[] = R"({
"comp1": {
"traits": [],
@@ -491,23 +475,22 @@
}
}
})";
- EXPECT_JSON_EQ(kExpected, manager.GetComponents());
+ EXPECT_JSON_EQ(kExpected, manager_.GetComponents());
}
-TEST(ComponentManager, AddComponentArrayItem) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, AddComponentArrayItem) {
const char kTraits[] = R"({"foo": {}, "bar": {}})";
auto json = CreateDictionaryValue(kTraits);
- ASSERT_TRUE(manager.LoadTraits(*json, nullptr));
+ ASSERT_TRUE(manager_.LoadTraits(*json, nullptr));
- EXPECT_TRUE(manager.AddComponent("", "comp1", {}, nullptr));
- EXPECT_TRUE(manager.AddComponentArrayItem("comp1", "comp2", {"foo"},
- nullptr));
- EXPECT_TRUE(manager.AddComponentArrayItem("comp1", "comp2", {"bar"},
- nullptr));
- EXPECT_TRUE(manager.AddComponent("comp1.comp2[1]", "comp3", {}, nullptr));
- EXPECT_TRUE(manager.AddComponent("comp1.comp2[1].comp3", "comp4", {},
- nullptr));
+ EXPECT_TRUE(manager_.AddComponent("", "comp1", {}, nullptr));
+ EXPECT_TRUE(
+ manager_.AddComponentArrayItem("comp1", "comp2", {"foo"}, nullptr));
+ EXPECT_TRUE(
+ manager_.AddComponentArrayItem("comp1", "comp2", {"bar"}, nullptr));
+ EXPECT_TRUE(manager_.AddComponent("comp1.comp2[1]", "comp3", {}, nullptr));
+ EXPECT_TRUE(
+ manager_.AddComponent("comp1.comp2[1].comp3", "comp4", {}, nullptr));
const char kExpected[] = R"({
"comp1": {
"traits": [],
@@ -533,96 +516,91 @@
}
}
})";
- EXPECT_JSON_EQ(kExpected, manager.GetComponents());
+ EXPECT_JSON_EQ(kExpected, manager_.GetComponents());
}
-TEST(ComponentManager, AddComponentExist) {
- ComponentManagerImpl manager;
- EXPECT_TRUE(manager.AddComponent("", "comp1", {}, nullptr));
- EXPECT_FALSE(manager.AddComponent("", "comp1", {}, nullptr));
- EXPECT_TRUE(manager.AddComponent("comp1", "comp2", {}, nullptr));
- EXPECT_FALSE(manager.AddComponent("comp1", "comp2", {}, nullptr));
+TEST_F(ComponentManagerTest, AddComponentExist) {
+ EXPECT_TRUE(manager_.AddComponent("", "comp1", {}, nullptr));
+ EXPECT_FALSE(manager_.AddComponent("", "comp1", {}, nullptr));
+ EXPECT_TRUE(manager_.AddComponent("comp1", "comp2", {}, nullptr));
+ EXPECT_FALSE(manager_.AddComponent("comp1", "comp2", {}, nullptr));
}
-TEST(ComponentManager, AddComponentDoesNotExist) {
- ComponentManagerImpl manager;
- EXPECT_FALSE(manager.AddComponent("comp1", "comp2", {}, nullptr));
+TEST_F(ComponentManagerTest, AddComponentDoesNotExist) {
+ EXPECT_FALSE(manager_.AddComponent("comp1", "comp2", {}, nullptr));
}
-TEST(ComponentManager, AddComponentTreeChangedCallback) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, AddComponentTreeChangedCallback) {
int count = 0;
int count2 = 0;
- manager.AddComponentTreeChangedCallback(base::Bind([&count]() { count++; }));
- manager.AddComponentTreeChangedCallback(
+ manager_.AddComponentTreeChangedCallback(base::Bind([&count]() { count++; }));
+ manager_.AddComponentTreeChangedCallback(
base::Bind([&count2]() { count2++; }));
EXPECT_EQ(1, count);
EXPECT_EQ(1, count2);
- EXPECT_TRUE(manager.AddComponent("", "comp1", {}, nullptr));
+ EXPECT_TRUE(manager_.AddComponent("", "comp1", {}, nullptr));
EXPECT_EQ(2, count);
- EXPECT_TRUE(manager.AddComponent("comp1", "comp2", {}, nullptr));
+ EXPECT_TRUE(manager_.AddComponent("comp1", "comp2", {}, nullptr));
EXPECT_EQ(3, count);
- EXPECT_TRUE(manager.AddComponent("comp1.comp2", "comp4", {}, nullptr));
+ EXPECT_TRUE(manager_.AddComponent("comp1.comp2", "comp4", {}, nullptr));
EXPECT_EQ(4, count);
- EXPECT_TRUE(manager.AddComponentArrayItem("comp1", "comp3", {}, nullptr));
+ EXPECT_TRUE(manager_.AddComponentArrayItem("comp1", "comp3", {}, nullptr));
EXPECT_EQ(5, count);
- EXPECT_TRUE(manager.AddComponentArrayItem("comp1", "comp3", {}, nullptr));
+ EXPECT_TRUE(manager_.AddComponentArrayItem("comp1", "comp3", {}, nullptr));
EXPECT_EQ(6, count);
// Make sure both callbacks were called the same number of times.
EXPECT_EQ(count2, count);
}
-TEST(ComponentManager, FindComponent) {
- ComponentManagerImpl manager;
- CreateTestComponentTree(&manager);
+TEST_F(ComponentManagerTest, FindComponent) {
+ CreateTestComponentTree(&manager_);
- const base::DictionaryValue* comp = manager.FindComponent("comp1", nullptr);
+ const base::DictionaryValue* comp = manager_.FindComponent("comp1", nullptr);
ASSERT_NE(nullptr, comp);
EXPECT_TRUE(HasTrait(*comp, "t1"));
- comp = manager.FindComponent("comp1.comp2[0]", nullptr);
+ comp = manager_.FindComponent("comp1.comp2[0]", nullptr);
ASSERT_NE(nullptr, comp);
EXPECT_TRUE(HasTrait(*comp, "t2"));
- comp = manager.FindComponent("comp1.comp2[1]", nullptr);
+ comp = manager_.FindComponent("comp1.comp2[1]", nullptr);
ASSERT_NE(nullptr, comp);
EXPECT_TRUE(HasTrait(*comp, "t3"));
- comp = manager.FindComponent("comp1.comp2[1].comp3", nullptr);
+ comp = manager_.FindComponent("comp1.comp2[1].comp3", nullptr);
ASSERT_NE(nullptr, comp);
EXPECT_TRUE(HasTrait(*comp, "t4"));
- comp = manager.FindComponent("comp1.comp2[1].comp3.comp4", nullptr);
+ comp = manager_.FindComponent("comp1.comp2[1].comp3.comp4", nullptr);
ASSERT_NE(nullptr, comp);
EXPECT_TRUE(HasTrait(*comp, "t5"));
// Some whitespaces don't hurt.
- comp = manager.FindComponent(" comp1 . comp2 [ \t 1 ] . comp3.comp4 ",
- nullptr);
+ comp = manager_.FindComponent(" comp1 . comp2 [ \t 1 ] . comp3.comp4 ",
+ nullptr);
EXPECT_NE(nullptr, comp);
// Now check some failure cases.
ErrorPtr error;
- EXPECT_EQ(nullptr, manager.FindComponent("", &error));
+ EXPECT_EQ(nullptr, manager_.FindComponent("", &error));
EXPECT_NE(nullptr, error.get());
// 'comp2' doesn't exist:
- EXPECT_EQ(nullptr, manager.FindComponent("comp2", nullptr));
+ EXPECT_EQ(nullptr, manager_.FindComponent("comp2", nullptr));
// 'comp1.comp2' is an array, not a component:
- EXPECT_EQ(nullptr, manager.FindComponent("comp1.comp2", nullptr));
+ EXPECT_EQ(nullptr, manager_.FindComponent("comp1.comp2", nullptr));
// 'comp1.comp2[3]' doesn't exist:
- EXPECT_EQ(nullptr, manager.FindComponent("comp1.comp2[3]", nullptr));
+ EXPECT_EQ(nullptr, manager_.FindComponent("comp1.comp2[3]", nullptr));
// Empty component names:
- EXPECT_EQ(nullptr, manager.FindComponent(".comp2[1]", nullptr));
- EXPECT_EQ(nullptr, manager.FindComponent("comp1.[1]", nullptr));
+ EXPECT_EQ(nullptr, manager_.FindComponent(".comp2[1]", nullptr));
+ EXPECT_EQ(nullptr, manager_.FindComponent("comp1.[1]", nullptr));
// Invalid array indices:
- EXPECT_EQ(nullptr, manager.FindComponent("comp1.comp2[s]", nullptr));
- EXPECT_EQ(nullptr, manager.FindComponent("comp1.comp2[-2]", nullptr));
- EXPECT_EQ(nullptr, manager.FindComponent("comp1.comp2[1e1]", nullptr));
- EXPECT_EQ(nullptr, manager.FindComponent("comp1.comp2[1", nullptr));
+ EXPECT_EQ(nullptr, manager_.FindComponent("comp1.comp2[s]", nullptr));
+ EXPECT_EQ(nullptr, manager_.FindComponent("comp1.comp2[-2]", nullptr));
+ EXPECT_EQ(nullptr, manager_.FindComponent("comp1.comp2[1e1]", nullptr));
+ EXPECT_EQ(nullptr, manager_.FindComponent("comp1.comp2[1", nullptr));
}
-TEST(ComponentManager, ParseCommandInstance) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, ParseCommandInstance) {
const char kTraits[] = R"({
"trait1": {
"commands": {
@@ -644,9 +622,9 @@
}
})";
auto traits = CreateDictionaryValue(kTraits);
- ASSERT_TRUE(manager.LoadTraits(*traits, nullptr));
- ASSERT_TRUE(manager.AddComponent("", "comp1", {"trait1"}, nullptr));
- ASSERT_TRUE(manager.AddComponent("", "comp2", {"trait2"}, nullptr));
+ ASSERT_TRUE(manager_.LoadTraits(*traits, nullptr));
+ ASSERT_TRUE(manager_.AddComponent("", "comp1", {"trait1"}, nullptr));
+ ASSERT_TRUE(manager_.AddComponent("", "comp2", {"trait2"}, nullptr));
std::string id;
const char kCommand1[] = R"({
@@ -657,13 +635,15 @@
})";
auto command1 = CreateDictionaryValue(kCommand1);
EXPECT_NE(nullptr,
- manager.ParseCommandInstance(*command1, Command::Origin::kLocal,
- UserRole::kUser, &id, nullptr).get());
+ manager_.ParseCommandInstance(*command1, Command::Origin::kLocal,
+ UserRole::kUser, &id, nullptr)
+ .get());
EXPECT_EQ("1234-12345", id);
// Not enough access rights
EXPECT_EQ(nullptr,
- manager.ParseCommandInstance(*command1, Command::Origin::kLocal,
- UserRole::kViewer, &id, nullptr).get());
+ manager_.ParseCommandInstance(*command1, Command::Origin::kLocal,
+ UserRole::kViewer, &id, nullptr)
+ .get());
const char kCommand2[] = R"({
"name": "trait1.command3",
@@ -673,8 +653,9 @@
auto command2 = CreateDictionaryValue(kCommand2);
// trait1.command3 doesn't exist
EXPECT_EQ(nullptr,
- manager.ParseCommandInstance(*command2, Command::Origin::kLocal,
- UserRole::kOwner, &id, nullptr).get());
+ manager_.ParseCommandInstance(*command2, Command::Origin::kLocal,
+ UserRole::kOwner, &id, nullptr)
+ .get());
EXPECT_TRUE(id.empty());
const char kCommand3[] = R"({
@@ -685,8 +666,9 @@
auto command3 = CreateDictionaryValue(kCommand3);
// Component comp1 doesn't have trait2.
EXPECT_EQ(nullptr,
- manager.ParseCommandInstance(*command3, Command::Origin::kLocal,
- UserRole::kOwner, &id, nullptr).get());
+ manager_.ParseCommandInstance(*command3, Command::Origin::kLocal,
+ UserRole::kOwner, &id, nullptr)
+ .get());
// No component specified, find the suitable component
const char kCommand4[] = R"({
@@ -694,7 +676,7 @@
"parameters": {}
})";
auto command4 = CreateDictionaryValue(kCommand4);
- auto command_instance = manager.ParseCommandInstance(
+ auto command_instance = manager_.ParseCommandInstance(
*command4, Command::Origin::kLocal, UserRole::kOwner, &id, nullptr);
EXPECT_NE(nullptr, command_instance.get());
EXPECT_EQ("comp1", command_instance->GetComponent());
@@ -704,7 +686,7 @@
"parameters": {}
})";
auto command5 = CreateDictionaryValue(kCommand5);
- command_instance = manager.ParseCommandInstance(
+ command_instance = manager_.ParseCommandInstance(
*command5, Command::Origin::kLocal, UserRole::kOwner, &id, nullptr);
EXPECT_NE(nullptr, command_instance.get());
EXPECT_EQ("comp2", command_instance->GetComponent());
@@ -716,12 +698,12 @@
})";
auto command6 = CreateDictionaryValue(kCommand6);
EXPECT_EQ(nullptr,
- manager.ParseCommandInstance(*command6, Command::Origin::kLocal,
- UserRole::kOwner, &id, nullptr).get());
+ manager_.ParseCommandInstance(*command6, Command::Origin::kLocal,
+ UserRole::kOwner, &id, nullptr)
+ .get());
}
-TEST(ComponentManager, AddCommand) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, AddCommand) {
const char kTraits[] = R"({
"trait1": {
"commands": {
@@ -730,8 +712,8 @@
}
})";
auto traits = CreateDictionaryValue(kTraits);
- ASSERT_TRUE(manager.LoadTraits(*traits, nullptr));
- ASSERT_TRUE(manager.AddComponent("", "comp1", {"trait1"}, nullptr));
+ ASSERT_TRUE(manager_.LoadTraits(*traits, nullptr));
+ ASSERT_TRUE(manager_.AddComponent("", "comp1", {"trait1"}, nullptr));
std::string id;
const char kCommand[] = R"({
@@ -741,17 +723,16 @@
"parameters": {}
})";
auto command = CreateDictionaryValue(kCommand);
- auto command_instance = manager.ParseCommandInstance(
+ auto command_instance = manager_.ParseCommandInstance(
*command, Command::Origin::kLocal, UserRole::kUser, &id, nullptr);
ASSERT_NE(nullptr, command_instance.get());
- manager.AddCommand(std::move(command_instance));
- const auto* queued_command = manager.FindCommand(id);
+ manager_.AddCommand(std::move(command_instance));
+ const auto* queued_command = manager_.FindCommand(id);
ASSERT_NE(nullptr, queued_command);
EXPECT_EQ("trait1.command1", queued_command->GetName());
}
-TEST(ComponentManager, AddCommandHandler) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, AddCommandHandler) {
const char kTraits[] = R"({
"trait1": {
"commands": {
@@ -765,9 +746,10 @@
}
})";
auto traits = CreateDictionaryValue(kTraits);
- ASSERT_TRUE(manager.LoadTraits(*traits, nullptr));
- ASSERT_TRUE(manager.AddComponent("", "comp1", {"trait1"}, nullptr));
- ASSERT_TRUE(manager.AddComponent("", "comp2", {"trait1", "trait2"}, nullptr));
+ ASSERT_TRUE(manager_.LoadTraits(*traits, nullptr));
+ ASSERT_TRUE(manager_.AddComponent("", "comp1", {"trait1"}, nullptr));
+ ASSERT_TRUE(
+ manager_.AddComponent("", "comp2", {"trait1", "trait2"}, nullptr));
std::string last_tags;
auto handler = [&last_tags](int tag, const std::weak_ptr<Command>& command) {
@@ -776,9 +758,12 @@
last_tags += std::to_string(tag);
};
- manager.AddCommandHandler("comp1", "trait1.command1", base::Bind(handler, 1));
- manager.AddCommandHandler("comp2", "trait1.command1", base::Bind(handler, 2));
- manager.AddCommandHandler("comp2", "trait2.command2", base::Bind(handler, 3));
+ manager_.AddCommandHandler("comp1", "trait1.command1",
+ base::Bind(handler, 1));
+ manager_.AddCommandHandler("comp2", "trait1.command1",
+ base::Bind(handler, 2));
+ manager_.AddCommandHandler("comp2", "trait2.command2",
+ base::Bind(handler, 3));
EXPECT_TRUE(last_tags.empty());
const char kCommand1[] = R"({
@@ -786,10 +771,10 @@
"component": "comp1"
})";
auto command1 = CreateDictionaryValue(kCommand1);
- auto command_instance = manager.ParseCommandInstance(
+ auto command_instance = manager_.ParseCommandInstance(
*command1, Command::Origin::kCloud, UserRole::kUser, nullptr, nullptr);
ASSERT_NE(nullptr, command_instance.get());
- manager.AddCommand(std::move(command_instance));
+ manager_.AddCommand(std::move(command_instance));
EXPECT_EQ("1", last_tags);
last_tags.clear();
@@ -798,10 +783,10 @@
"component": "comp2"
})";
auto command2 = CreateDictionaryValue(kCommand2);
- command_instance = manager.ParseCommandInstance(
+ command_instance = manager_.ParseCommandInstance(
*command2, Command::Origin::kCloud, UserRole::kUser, nullptr, nullptr);
ASSERT_NE(nullptr, command_instance.get());
- manager.AddCommand(std::move(command_instance));
+ manager_.AddCommand(std::move(command_instance));
EXPECT_EQ("2", last_tags);
last_tags.clear();
@@ -811,16 +796,15 @@
"parameters": {}
})";
auto command3 = CreateDictionaryValue(kCommand3);
- command_instance = manager.ParseCommandInstance(
+ command_instance = manager_.ParseCommandInstance(
*command3, Command::Origin::kCloud, UserRole::kUser, nullptr, nullptr);
ASSERT_NE(nullptr, command_instance.get());
- manager.AddCommand(std::move(command_instance));
+ manager_.AddCommand(std::move(command_instance));
EXPECT_EQ("3", last_tags);
last_tags.clear();
}
-TEST(ComponentManager, AddDefaultCommandHandler) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, AddDefaultCommandHandler) {
const char kTraits[] = R"({
"trait1": {
"commands": {
@@ -834,15 +818,15 @@
}
})";
auto traits = CreateDictionaryValue(kTraits);
- ASSERT_TRUE(manager.LoadTraits(*traits, nullptr));
- ASSERT_TRUE(manager.AddComponent("", "comp", {"trait1", "trait2"}, nullptr));
+ ASSERT_TRUE(manager_.LoadTraits(*traits, nullptr));
+ ASSERT_TRUE(manager_.AddComponent("", "comp", {"trait1", "trait2"}, nullptr));
int count = 0;
auto handler = [&count](int tag, const std::weak_ptr<Command>& command) {
count++;
};
- manager.AddCommandHandler("", "", base::Bind(handler, 1));
+ manager_.AddCommandHandler("", "", base::Bind(handler, 1));
EXPECT_EQ(0, count);
const char kCommand1[] = R"({
@@ -850,10 +834,10 @@
"component": "comp"
})";
auto command1 = CreateDictionaryValue(kCommand1);
- auto command_instance = manager.ParseCommandInstance(
+ auto command_instance = manager_.ParseCommandInstance(
*command1, Command::Origin::kCloud, UserRole::kUser, nullptr, nullptr);
ASSERT_NE(nullptr, command_instance.get());
- manager.AddCommand(std::move(command_instance));
+ manager_.AddCommand(std::move(command_instance));
EXPECT_EQ(1, count);
const char kCommand2[] = R"({
@@ -861,20 +845,19 @@
"component": "comp"
})";
auto command2 = CreateDictionaryValue(kCommand2);
- command_instance = manager.ParseCommandInstance(
+ command_instance = manager_.ParseCommandInstance(
*command2, Command::Origin::kCloud, UserRole::kUser, nullptr, nullptr);
ASSERT_NE(nullptr, command_instance.get());
- manager.AddCommand(std::move(command_instance));
+ manager_.AddCommand(std::move(command_instance));
EXPECT_EQ(2, count);
}
-TEST(ComponentManager, SetStateProperties) {
- ComponentManagerImpl manager;
- CreateTestComponentTree(&manager);
+TEST_F(ComponentManagerTest, SetStateProperties) {
+ CreateTestComponentTree(&manager_);
const char kState1[] = R"({"t1": {"p1": 0, "p2": "foo"}})";
auto state1 = CreateDictionaryValue(kState1);
- ASSERT_TRUE(manager.SetStateProperties("comp1", *state1, nullptr));
+ ASSERT_TRUE(manager_.SetStateProperties("comp1", *state1, nullptr));
const char kExpected1[] = R"({
"comp1": {
"traits": [ "t1" ],
@@ -901,11 +884,11 @@
}
}
})";
- EXPECT_JSON_EQ(kExpected1, manager.GetComponents());
+ EXPECT_JSON_EQ(kExpected1, manager_.GetComponents());
const char kState2[] = R"({"t1": {"p1": {"bar": "baz"}}})";
auto state2 = CreateDictionaryValue(kState2);
- ASSERT_TRUE(manager.SetStateProperties("comp1", *state2, nullptr));
+ ASSERT_TRUE(manager_.SetStateProperties("comp1", *state2, nullptr));
const char kExpected2[] = R"({
"comp1": {
@@ -933,12 +916,12 @@
}
}
})";
- EXPECT_JSON_EQ(kExpected2, manager.GetComponents());
+ EXPECT_JSON_EQ(kExpected2, manager_.GetComponents());
const char kState3[] = R"({"t5": {"p1": 1}})";
auto state3 = CreateDictionaryValue(kState3);
- ASSERT_TRUE(manager.SetStateProperties("comp1.comp2[1].comp3.comp4", *state3,
- nullptr));
+ ASSERT_TRUE(manager_.SetStateProperties("comp1.comp2[1].comp3.comp4", *state3,
+ nullptr));
const char kExpected3[] = R"({
"comp1": {
@@ -967,14 +950,13 @@
}
}
})";
- EXPECT_JSON_EQ(kExpected3, manager.GetComponents());
+ EXPECT_JSON_EQ(kExpected3, manager_.GetComponents());
}
-TEST(ComponentManager, SetStatePropertiesFromJson) {
- ComponentManagerImpl manager;
- CreateTestComponentTree(&manager);
+TEST_F(ComponentManagerTest, SetStatePropertiesFromJson) {
+ CreateTestComponentTree(&manager_);
- ASSERT_TRUE(manager.SetStatePropertiesFromJson(
+ ASSERT_TRUE(manager_.SetStatePropertiesFromJson(
"comp1.comp2[1].comp3.comp4", R"({"t5": {"p1": 3}, "t6": {"p2": 5}})",
nullptr));
@@ -1007,11 +989,10 @@
}
}
})";
- EXPECT_JSON_EQ(kExpected, manager.GetComponents());
+ EXPECT_JSON_EQ(kExpected, manager_.GetComponents());
}
-TEST(ComponentManager, SetGetStateProperty) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, SetGetStateProperty) {
const char kTraits[] = R"({
"trait1": {
"state": {
@@ -1027,11 +1008,12 @@
}
})";
auto traits = CreateDictionaryValue(kTraits);
- ASSERT_TRUE(manager.LoadTraits(*traits, nullptr));
- ASSERT_TRUE(manager.AddComponent("", "comp1", {"trait1", "trait2"}, nullptr));
+ ASSERT_TRUE(manager_.LoadTraits(*traits, nullptr));
+ ASSERT_TRUE(
+ manager_.AddComponent("", "comp1", {"trait1", "trait2"}, nullptr));
base::StringValue p1("foo");
- ASSERT_TRUE(manager.SetStateProperty("comp1", "trait1.prop1", p1, nullptr));
+ ASSERT_TRUE(manager_.SetStateProperty("comp1", "trait1.prop1", p1, nullptr));
const char kExpected1[] = R"({
"comp1": {
@@ -1041,10 +1023,10 @@
}
}
})";
- EXPECT_JSON_EQ(kExpected1, manager.GetComponents());
+ EXPECT_JSON_EQ(kExpected1, manager_.GetComponents());
base::FundamentalValue p2(2);
- ASSERT_TRUE(manager.SetStateProperty("comp1", "trait2.prop3", p2, nullptr));
+ ASSERT_TRUE(manager_.SetStateProperty("comp1", "trait2.prop3", p2, nullptr));
const char kExpected2[] = R"({
"comp1": {
@@ -1055,29 +1037,27 @@
}
}
})";
- EXPECT_JSON_EQ(kExpected2, manager.GetComponents());
+ EXPECT_JSON_EQ(kExpected2, manager_.GetComponents());
// Just the package name without property:
- EXPECT_FALSE(manager.SetStateProperty("comp1", "trait2", p2, nullptr));
+ EXPECT_FALSE(manager_.SetStateProperty("comp1", "trait2", p2, nullptr));
- const base::Value* value = manager.GetStateProperty("comp1", "trait1.prop1",
- nullptr);
+ const base::Value* value =
+ manager_.GetStateProperty("comp1", "trait1.prop1", nullptr);
ASSERT_NE(nullptr, value);
EXPECT_TRUE(p1.Equals(value));
- value = manager.GetStateProperty("comp1", "trait2.prop3", nullptr);
+ value = manager_.GetStateProperty("comp1", "trait2.prop3", nullptr);
ASSERT_NE(nullptr, value);
EXPECT_TRUE(p2.Equals(value));
// Non-existing property:
- EXPECT_EQ(nullptr, manager.GetStateProperty("comp1", "trait2.p", nullptr));
+ EXPECT_EQ(nullptr, manager_.GetStateProperty("comp1", "trait2.p", nullptr));
// Non-existing component
- EXPECT_EQ(nullptr, manager.GetStateProperty("comp2", "trait.prop", nullptr));
+ EXPECT_EQ(nullptr, manager_.GetStateProperty("comp2", "trait.prop", nullptr));
// Just the package name without property:
- EXPECT_EQ(nullptr, manager.GetStateProperty("comp1", "trait2", nullptr));
+ EXPECT_EQ(nullptr, manager_.GetStateProperty("comp1", "trait2", nullptr));
}
-TEST(ComponentManager, AddStateChangedCallback) {
- SimpleTestClock clock;
- ComponentManagerImpl manager{&clock};
+TEST_F(ComponentManagerTest, AddStateChangedCallback) {
const char kTraits[] = R"({
"trait1": {
"state": {
@@ -1087,38 +1067,36 @@
}
})";
auto traits = CreateDictionaryValue(kTraits);
- ASSERT_TRUE(manager.LoadTraits(*traits, nullptr));
- ASSERT_TRUE(manager.AddComponent("", "comp1", {"trait1"}, nullptr));
+ ASSERT_TRUE(manager_.LoadTraits(*traits, nullptr));
+ ASSERT_TRUE(manager_.AddComponent("", "comp1", {"trait1"}, nullptr));
int count = 0;
int count2 = 0;
- manager.AddStateChangedCallback(base::Bind([&count]() { count++; }));
- manager.AddStateChangedCallback(base::Bind([&count2]() { count2++; }));
+ manager_.AddStateChangedCallback(base::Bind([&count]() { count++; }));
+ manager_.AddStateChangedCallback(base::Bind([&count2]() { count2++; }));
EXPECT_EQ(1, count);
EXPECT_EQ(1, count2);
- EXPECT_EQ(0, manager.GetLastStateChangeId());
+ EXPECT_EQ(0, manager_.GetLastStateChangeId());
base::StringValue p1("foo");
- ASSERT_TRUE(manager.SetStateProperty("comp1", "trait1.prop1", p1, nullptr));
+ ASSERT_TRUE(manager_.SetStateProperty("comp1", "trait1.prop1", p1, nullptr));
EXPECT_EQ(2, count);
EXPECT_EQ(2, count2);
- EXPECT_EQ(1, manager.GetLastStateChangeId());
+ EXPECT_EQ(1, manager_.GetLastStateChangeId());
- ASSERT_TRUE(manager.SetStateProperty("comp1", "trait1.prop2", p1, nullptr));
+ ASSERT_TRUE(manager_.SetStateProperty("comp1", "trait1.prop2", p1, nullptr));
EXPECT_EQ(3, count);
EXPECT_EQ(3, count2);
- EXPECT_EQ(2, manager.GetLastStateChangeId());
+ EXPECT_EQ(2, manager_.GetLastStateChangeId());
// Fail - no component.
- ASSERT_FALSE(manager.SetStateProperty("comp2", "trait1.prop2", p1, nullptr));
+ ASSERT_FALSE(manager_.SetStateProperty("comp2", "trait1.prop2", p1, nullptr));
EXPECT_EQ(3, count);
EXPECT_EQ(3, count2);
- EXPECT_EQ(2, manager.GetLastStateChangeId());
+ EXPECT_EQ(2, manager_.GetLastStateChangeId());
}
-TEST(ComponentManager, ComponentStateUpdates) {
- SimpleTestClock clock;
- ComponentManagerImpl manager{&clock};
+TEST_F(ComponentManagerTest, ComponentStateUpdates) {
const char kTraits[] = R"({
"trait1": {
"state": {
@@ -1134,48 +1112,50 @@
}
})";
auto traits = CreateDictionaryValue(kTraits);
- ASSERT_TRUE(manager.LoadTraits(*traits, nullptr));
- ASSERT_TRUE(manager.AddComponent("", "comp1", {"trait1", "trait2"}, nullptr));
- ASSERT_TRUE(manager.AddComponent("", "comp2", {"trait1", "trait2"}, nullptr));
+ ASSERT_TRUE(manager_.LoadTraits(*traits, nullptr));
+ ASSERT_TRUE(
+ manager_.AddComponent("", "comp1", {"trait1", "trait2"}, nullptr));
+ ASSERT_TRUE(
+ manager_.AddComponent("", "comp2", {"trait1", "trait2"}, nullptr));
std::vector<ComponentManager::UpdateID> updates1;
auto callback1 = [&updates1](ComponentManager::UpdateID id) {
updates1.push_back(id);
};
// State change queue is empty, callback should be called immediately.
- auto token1 = manager.AddServerStateUpdatedCallback(base::Bind(callback1));
+ auto token1 = manager_.AddServerStateUpdatedCallback(base::Bind(callback1));
ASSERT_EQ(1u, updates1.size());
- EXPECT_EQ(manager.GetLastStateChangeId(), updates1.front());
+ EXPECT_EQ(manager_.GetLastStateChangeId(), updates1.front());
updates1.clear();
base::StringValue foo("foo");
base::Time time1 = base::Time::Now();
- clock.SetNow(time1);
+ EXPECT_CALL(clock_, Now()).WillRepeatedly(Return(time1));
// These three updates should be grouped into two separate state change queue
// items, since they all happen at the same time, but for two different
// components.
- ASSERT_TRUE(manager.SetStateProperty("comp1", "trait1.prop1", foo, nullptr));
- ASSERT_TRUE(manager.SetStateProperty("comp2", "trait2.prop3", foo, nullptr));
- ASSERT_TRUE(manager.SetStateProperty("comp1", "trait1.prop2", foo, nullptr));
+ ASSERT_TRUE(manager_.SetStateProperty("comp1", "trait1.prop1", foo, nullptr));
+ ASSERT_TRUE(manager_.SetStateProperty("comp2", "trait2.prop3", foo, nullptr));
+ ASSERT_TRUE(manager_.SetStateProperty("comp1", "trait1.prop2", foo, nullptr));
std::vector<ComponentManager::UpdateID> updates2;
auto callback2 = [&updates2](ComponentManager::UpdateID id) {
updates2.push_back(id);
};
// State change queue is not empty, so callback will be called later.
- auto token2 = manager.AddServerStateUpdatedCallback(base::Bind(callback2));
+ auto token2 = manager_.AddServerStateUpdatedCallback(base::Bind(callback2));
EXPECT_TRUE(updates2.empty());
base::StringValue bar("bar");
base::Time time2 = time1 + base::TimeDelta::FromSeconds(1);
- clock.SetNow(time2);
+ EXPECT_CALL(clock_, Now()).WillRepeatedly(Return(time2));
// Two more update events (as above) but at |time2|.
- ASSERT_TRUE(manager.SetStateProperty("comp1", "trait1.prop1", bar, nullptr));
- ASSERT_TRUE(manager.SetStateProperty("comp2", "trait2.prop3", bar, nullptr));
- ASSERT_TRUE(manager.SetStateProperty("comp1", "trait1.prop2", bar, nullptr));
+ ASSERT_TRUE(manager_.SetStateProperty("comp1", "trait1.prop1", bar, nullptr));
+ ASSERT_TRUE(manager_.SetStateProperty("comp2", "trait2.prop3", bar, nullptr));
+ ASSERT_TRUE(manager_.SetStateProperty("comp1", "trait1.prop2", bar, nullptr));
- auto snapshot = manager.GetAndClearRecordedStateChanges();
- EXPECT_EQ(manager.GetLastStateChangeId(), snapshot.update_id);
+ auto snapshot = manager_.GetAndClearRecordedStateChanges();
+ EXPECT_EQ(manager_.GetLastStateChangeId(), snapshot.update_id);
ASSERT_EQ(4u, snapshot.state_changes.size());
EXPECT_EQ("comp1", snapshot.state_changes[0].component);
@@ -1199,38 +1179,37 @@
*snapshot.state_changes[3].changed_properties);
// Make sure previous GetAndClearRecordedStateChanges() clears the queue.
- auto snapshot2 = manager.GetAndClearRecordedStateChanges();
- EXPECT_EQ(manager.GetLastStateChangeId(), snapshot2.update_id);
+ auto snapshot2 = manager_.GetAndClearRecordedStateChanges();
+ EXPECT_EQ(manager_.GetLastStateChangeId(), snapshot2.update_id);
EXPECT_TRUE(snapshot2.state_changes.empty());
// Now indicate that we have update the changes on the server.
- manager.NotifyStateUpdatedOnServer(snapshot.update_id);
+ manager_.NotifyStateUpdatedOnServer(snapshot.update_id);
ASSERT_EQ(1u, updates1.size());
EXPECT_EQ(snapshot.update_id, updates1.front());
ASSERT_EQ(1u, updates2.size());
EXPECT_EQ(snapshot.update_id, updates2.front());
}
-TEST(ComponentManager, FindComponentWithTrait) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, FindComponentWithTrait) {
const char kTraits[] = R"({
"trait1": {},
"trait2": {},
"trait3": {}
})";
auto traits = CreateDictionaryValue(kTraits);
- ASSERT_TRUE(manager.LoadTraits(*traits, nullptr));
- ASSERT_TRUE(manager.AddComponent("", "comp1", {"trait1", "trait2"}, nullptr));
- ASSERT_TRUE(manager.AddComponent("", "comp2", {"trait3"}, nullptr));
+ ASSERT_TRUE(manager_.LoadTraits(*traits, nullptr));
+ ASSERT_TRUE(
+ manager_.AddComponent("", "comp1", {"trait1", "trait2"}, nullptr));
+ ASSERT_TRUE(manager_.AddComponent("", "comp2", {"trait3"}, nullptr));
- EXPECT_EQ("comp1", manager.FindComponentWithTrait("trait1"));
- EXPECT_EQ("comp1", manager.FindComponentWithTrait("trait2"));
- EXPECT_EQ("comp2", manager.FindComponentWithTrait("trait3"));
- EXPECT_EQ("", manager.FindComponentWithTrait("trait4"));
+ EXPECT_EQ("comp1", manager_.FindComponentWithTrait("trait1"));
+ EXPECT_EQ("comp1", manager_.FindComponentWithTrait("trait2"));
+ EXPECT_EQ("comp2", manager_.FindComponentWithTrait("trait3"));
+ EXPECT_EQ("", manager_.FindComponentWithTrait("trait4"));
}
-TEST(ComponentManager, AddLegacyCommandAndStateDefinitions) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, AddLegacyCommandAndStateDefinitions) {
const char kCommandDefs1[] = R"({
"package1": {
"command1": {
@@ -1248,7 +1227,7 @@
}
})";
auto json = CreateDictionaryValue(kCommandDefs1);
- EXPECT_TRUE(manager.AddLegacyCommandDefinitions(*json, nullptr));
+ EXPECT_TRUE(manager_.AddLegacyCommandDefinitions(*json, nullptr));
const char kExpected1[] = R"({
"package1": {
"commands": {
@@ -1269,11 +1248,11 @@
}
}
})";
- EXPECT_JSON_EQ(kExpected1, manager.GetTraits());
+ EXPECT_JSON_EQ(kExpected1, manager_.GetTraits());
const char kExpectedComponents1[] = R"({
"__weave__": { "traits": ["package1", "package2"] }
})";
- EXPECT_JSON_EQ(kExpectedComponents1, manager.GetComponents());
+ EXPECT_JSON_EQ(kExpectedComponents1, manager_.GetComponents());
const char kCommandDefs2[] = R"({
"package2": {
@@ -1285,7 +1264,7 @@
}
})";
json = CreateDictionaryValue(kCommandDefs2);
- EXPECT_TRUE(manager.AddLegacyCommandDefinitions(*json, nullptr));
+ EXPECT_TRUE(manager_.AddLegacyCommandDefinitions(*json, nullptr));
const char kExpected2[] = R"({
"package1": {
"commands": {
@@ -1313,14 +1292,14 @@
}
}
})";
- EXPECT_JSON_EQ(kExpected2, manager.GetTraits());
+ EXPECT_JSON_EQ(kExpected2, manager_.GetTraits());
const char kExpectedComponents2[] = R"({
"__weave__": { "traits": ["package1", "package2", "package3"] }
})";
- EXPECT_JSON_EQ(kExpectedComponents2, manager.GetComponents());
+ EXPECT_JSON_EQ(kExpectedComponents2, manager_.GetComponents());
// Redefining existing commands.
- EXPECT_FALSE(manager.AddLegacyCommandDefinitions(*json, nullptr));
+ EXPECT_FALSE(manager_.AddLegacyCommandDefinitions(*json, nullptr));
const char kStateDefs1[] = R"({
"package1": {
@@ -1333,11 +1312,11 @@
}
})";
json = CreateDictionaryValue(kStateDefs1);
- EXPECT_TRUE(manager.AddLegacyStateDefinitions(*json, nullptr));
+ EXPECT_TRUE(manager_.AddLegacyStateDefinitions(*json, nullptr));
const char kExpectedComponents3[] = R"({
"__weave__": { "traits": ["package1", "package2", "package3", "package4"] }
})";
- EXPECT_JSON_EQ(kExpectedComponents3, manager.GetComponents());
+ EXPECT_JSON_EQ(kExpectedComponents3, manager_.GetComponents());
const char kExpected3[] = R"({
"package1": {
@@ -1376,14 +1355,14 @@
}
}
})";
- EXPECT_JSON_EQ(kExpected3, manager.GetTraits());
+ EXPECT_JSON_EQ(kExpected3, manager_.GetTraits());
const char kExpectedComponents4[] = R"({
"__weave__": { "traits": ["package1", "package2", "package3", "package4"] }
})";
- EXPECT_JSON_EQ(kExpectedComponents4, manager.GetComponents());
+ EXPECT_JSON_EQ(kExpectedComponents4, manager_.GetComponents());
// Redefining existing commands.
- EXPECT_FALSE(manager.AddLegacyStateDefinitions(*json, nullptr));
+ EXPECT_FALSE(manager_.AddLegacyStateDefinitions(*json, nullptr));
const char kExpected4[] = R"({
"package1": {
@@ -1406,11 +1385,10 @@
"command2": { "minimalRole": "owner" }
}
})";
- EXPECT_JSON_EQ(kExpected4, manager.GetLegacyCommandDefinitions());
+ EXPECT_JSON_EQ(kExpected4, manager_.GetLegacyCommandDefinitions());
}
-TEST(ComponentManager, GetLegacyState) {
- ComponentManagerImpl manager;
+TEST_F(ComponentManagerTest, GetLegacyState) {
const char kTraits[] = R"({
"trait1": {
"state": {
@@ -1426,13 +1404,13 @@
}
})";
auto traits = CreateDictionaryValue(kTraits);
- ASSERT_TRUE(manager.LoadTraits(*traits, nullptr));
- ASSERT_TRUE(manager.AddComponent("", "comp1", {"trait1"}, nullptr));
- ASSERT_TRUE(manager.AddComponent("", "comp2", {"trait2"}, nullptr));
+ ASSERT_TRUE(manager_.LoadTraits(*traits, nullptr));
+ ASSERT_TRUE(manager_.AddComponent("", "comp1", {"trait1"}, nullptr));
+ ASSERT_TRUE(manager_.AddComponent("", "comp2", {"trait2"}, nullptr));
- ASSERT_TRUE(manager.SetStatePropertiesFromJson(
+ ASSERT_TRUE(manager_.SetStatePropertiesFromJson(
"comp1", R"({"trait1": {"prop1": "foo", "prop2": "bar"}})", nullptr));
- ASSERT_TRUE(manager.SetStatePropertiesFromJson(
+ ASSERT_TRUE(manager_.SetStatePropertiesFromJson(
"comp2", R"({"trait2": {"prop3": "baz", "prop4": "quux"}})", nullptr));
const char kExpected[] = R"({
@@ -1445,10 +1423,10 @@
"prop4": "quux"
}
})";
- EXPECT_JSON_EQ(kExpected, manager.GetLegacyState());
+ EXPECT_JSON_EQ(kExpected, manager_.GetLegacyState());
}
-TEST(ComponentManager, TestMockComponentManager) {
+TEST_F(ComponentManagerTest, TestMockComponentManager) {
// Check that all the virtual methods are mocked out.
MockComponentManager mock;
}
diff --git a/src/test/mock_clock.h b/src/test/mock_clock.h
new file mode 100644
index 0000000..f1a2260
--- /dev/null
+++ b/src/test/mock_clock.h
@@ -0,0 +1,22 @@
+// Copyright 2015 The Weave Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef LIBWEAVE_SRC_TEST_MOCK_CLOCK_H_
+#define LIBWEAVE_SRC_TEST_MOCK_CLOCK_H_
+
+#include <base/time/clock.h>
+#include <gmock/gmock.h>
+
+namespace weave {
+namespace test {
+
+class MockClock : public base::Clock {
+ public:
+ MOCK_METHOD0(Now, base::Time());
+};
+
+} // namespace test
+} // namespace weave
+
+#endif // LIBWEAVE_SRC_TEST_MOCK_CLOCK_H_