Add support of Components/Traits to local privet APIs
Added support for new privet APIs /privet/v3/traits and
/privet/v3/components to obtain the full trait/component trees
as well as expanded the existing /privet/v3/checkForUpdates to
include the component/trait fingerprints.
BUG: 25917521
Change-Id: Ib753817f88f611935057ca7bd1a1bf02addfb69c
Reviewed-on: https://weave-review.googlesource.com/1791
Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/src/weave_unittest.cc b/src/weave_unittest.cc
index dd10cbe..b8c4d9b 100644
--- a/src/weave_unittest.cc
+++ b/src/weave_unittest.cc
@@ -45,15 +45,25 @@
using test::CreateDictionaryValue;
using test::ValueToString;
-const char kCommandDefs[] = R"({
- "base": {
- "reboot": {
- "minimalRole": "user"
+const char kTraitDefs[] = R"({
+ "trait1": {
+ "commands": {
+ "reboot": {
+ "minimalRole": "user"
+ },
+ "shutdown": {
+ "minimalRole": "user",
+ "parameters": {},
+ "results": {}
+ }
},
- "_shutdown": {
- "minimalRole": "user",
- "parameters": {},
- "results": {}
+ "state": {
+ "firmwareVersion": {"type": "string"}
+ }
+ },
+ "trait2": {
+ "state": {
+ "battery_level": {"type": "integer"}
}
}
})";
@@ -72,7 +82,7 @@
"description": "Developer device",
"stateValidationEnabled": true,
"commandDefs":{
- "base": {
+ "trait1": {
"reboot": {
"minimalRole": "user",
"parameters": {"delay": {"type": "integer"}},
@@ -86,15 +96,39 @@
}
},
"state":{
- "base":{
- "firmwareVersion":"FIRMWARE_VERSION",
- "localAnonymousAccessMaxRole":"viewer",
- "localDiscoveryEnabled":true,
- "localPairingEnabled":true,
- "network":{
+ "trait1": {"firmwareVersion":"FIRMWARE_VERSION"},
+ "trait2": {"battery_level":44}
+ },
+ "traits": {
+ "trait1": {
+ "commands": {
+ "reboot": {
+ "minimalRole": "user"
+ },
+ "shutdown": {
+ "minimalRole": "user",
+ "parameters": {},
+ "results": {}
+ }
+ },
+ "state": {
+ "firmwareVersion": {"type": "string"}
}
},
- "power": {"battery_level":44}
+ "trait2": {
+ "state": {
+ "battery_level": {"type": "integer"}
+ }
+ }
+ },
+ "components": {
+ "myComponent": {
+ "traits": ["trait1", "trait2"],
+ "state": {
+ "trait1": {"firmwareVersion":"FIRMWARE_VERSION"},
+ "trait2": {"battery_level":44}
+ }
+ }
}
})";
@@ -127,10 +161,6 @@
"refresh_token" : "REFRESH_TOKEN"
})";
-const char kStateDefs[] = R"({"power": {"battery_level":"integer"}})";
-
-const char kStateDefaults[] = R"({"power": {"battery_level":44}})";
-
MATCHER_P(MatchTxt, txt, "") {
std::vector<std::string> txt_copy = txt;
std::sort(txt_copy.begin(), txt_copy.end());
@@ -259,14 +289,17 @@
"/privet/v3/checkForUpdates", "/privet/v3/commandDefs",
"/privet/v3/commands/cancel", "/privet/v3/commands/execute",
"/privet/v3/commands/list", "/privet/v3/commands/status",
- "/privet/v3/pairing/cancel", "/privet/v3/pairing/confirm",
- "/privet/v3/pairing/start", "/privet/v3/setup/start",
- "/privet/v3/setup/status", "/privet/v3/state"}),
+ "/privet/v3/components", "/privet/v3/pairing/cancel",
+ "/privet/v3/pairing/confirm", "/privet/v3/pairing/start",
+ "/privet/v3/setup/start", "/privet/v3/setup/status",
+ "/privet/v3/state", "/privet/v3/traits"}),
GetKeys(https_handlers_));
- device_->AddCommandDefinitionsFromJson(kCommandDefs);
- device_->AddStateDefinitionsFromJson(kStateDefs);
- device_->SetStatePropertiesFromJson(kStateDefaults, nullptr);
+ device_->AddTraitDefinitionsFromJson(kTraitDefs);
+ EXPECT_TRUE(device_->AddComponent("myComponent", {"trait1", "trait2"},
+ nullptr));
+ EXPECT_TRUE(device_->SetStatePropertiesFromJson(
+ "myComponent", R"({"trait2": {"battery_level":44}})", nullptr));
task_runner_.Run();
}
@@ -324,7 +357,9 @@
device_ = weave::Device::Create(&config_store_, &task_runner_, &http_client_,
&network_, &dns_sd_, &http_server_, nullptr,
&bluetooth_);
- device_->AddCommandDefinitionsFromJson(kCommandDefs);
+ device_->AddTraitDefinitionsFromJson(kTraitDefs);
+ EXPECT_TRUE(device_->AddComponent("myComponent", {"trait1", "trait2"},
+ nullptr));
task_runner_.Run();
}