diff options
author | Vitaly Buka <vitalybuka@google.com> | 2016-01-29 16:24:31 -0800 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2016-01-29 17:33:54 -0800 |
commit | e709fa7586dfd3fb8fd41cede0cd5dbc39b31acb (patch) | |
tree | ec30b9f4509462956eed795da673735452985382 | |
parent | 7a742998c325ccee45fddf194ea51115ea6957a7 (diff) | |
download | weaved-e709fa7586dfd3fb8fd41cede0cd5dbc39b31acb.tar.gz |
Update for new libweave
Interface was changed by:
ac18fcf Merge: Add write callback into SaveSettings function
d1e6c4f Merge: Add |name| into LoadSettings/SaveSettings
LoadSettings/SaveSettings expect name of config.
SaveSettings expects callback.
Change-Id: I0dc39ac013645bad48acb2a89e93b472ff014718
-rw-r--r-- | buffet/buffet_config.cc | 40 | ||||
-rw-r--r-- | buffet/buffet_config.h | 6 | ||||
-rw-r--r-- | buffet/buffet_config_unittest.cc | 30 |
3 files changed, 52 insertions, 24 deletions
diff --git a/buffet/buffet_config.cc b/buffet/buffet_config.cc index acbca00..dd63bb1 100644 --- a/buffet/buffet_config.cc +++ b/buffet/buffet_config.cc @@ -20,6 +20,7 @@ #include <base/files/file_util.h> #include <base/files/important_file_writer.h> #include <base/logging.h> +#include <base/message_loop/message_loop.h> #include <base/strings/string_number_conversions.h> #include <brillo/errors/error.h> #include <brillo/errors/error_codes.h> @@ -166,31 +167,54 @@ bool BuffetConfig::LoadDefaults(const brillo::KeyValueStore& store, return true; } -std::string BuffetConfig::LoadSettings() { +std::string BuffetConfig::LoadSettings(const std::string& name) { std::string settings_blob; - if (!file_io_->ReadFile(options_.settings, &settings_blob)) { - LOG(WARNING) << "Failed to read settings, proceeding with empty settings."; + base::FilePath path = CreatePath(name); + if (!file_io_->ReadFile(path, &settings_blob)) { + LOG(WARNING) << "Failed to read \'" + path.value() + + "\', proceeding with empty settings."; return std::string(); } std::string json_string; if (!encryptor_->DecryptWithAuthentication(settings_blob, &json_string)) { LOG(WARNING) << "Failed to decrypt settings, proceeding with empty settings."; - SaveSettings(std::string()); + SaveSettings(std::string(), name, {}); return std::string(); } return json_string; } -void BuffetConfig::SaveSettings(const std::string& settings) { +std::string BuffetConfig::LoadSettings() { + return LoadSettings(""); +} + +void BuffetConfig::SaveSettings(const std::string& name, + const std::string& settings, + const weave::DoneCallback& callback) { std::string encrypted_settings; + weave::ErrorPtr error; + base::FilePath path = CreatePath(name); if (!encryptor_->EncryptWithAuthentication(settings, &encrypted_settings)) { - LOG(ERROR) << "Failed to encrypt settings, writing empty settings."; + weave::Error::AddTo(&error, FROM_HERE, "file_write_error", + "Failed to encrypt settings."); encrypted_settings.clear(); } - if (!file_io_->WriteFile(options_.settings, encrypted_settings)) { - LOG(ERROR) << "Failed to write settings."; + if (!file_io_->WriteFile(path, encrypted_settings)) { + weave::Error::AddTo(&error, FROM_HERE, "file_write_error", + "Failed to write \'" + path.value() + + "\', proceeding with empty settings."); } + if (!callback.is_null()) { + base::MessageLoop::current()->PostTask( + FROM_HERE, base::Bind(callback, base::Passed(&error))); + } +} + +base::FilePath BuffetConfig::CreatePath(const std::string& name) const { + return name.empty() ? options_.settings + : options_.settings.InsertBeforeExtension( + base::FilePath::kExtensionSeparator + name); } bool BuffetConfig::LoadFile(const base::FilePath& file_path, diff --git a/buffet/buffet_config.h b/buffet/buffet_config.h index 7da9a8f..bf33db9 100644 --- a/buffet/buffet_config.h +++ b/buffet/buffet_config.h @@ -66,8 +66,11 @@ class BuffetConfig final : public weave::provider::ConfigStore { // Config overrides. bool LoadDefaults(weave::Settings* settings) override; + std::string LoadSettings(const std::string& name) override; std::string LoadSettings() override; - void SaveSettings(const std::string& settings) override; + void SaveSettings(const std::string& name, + const std::string& settings, + const weave::DoneCallback& callback) override; bool LoadDefaults(const brillo::KeyValueStore& store, weave::Settings* settings); @@ -85,6 +88,7 @@ class BuffetConfig final : public weave::provider::ConfigStore { } private: + base::FilePath CreatePath(const std::string& name) const; bool LoadFile(const base::FilePath& file_path, std::string* data, brillo::ErrorPtr* error); diff --git a/buffet/buffet_config_unittest.cc b/buffet/buffet_config_unittest.cc index bc4384e..a11ff4d 100644 --- a/buffet/buffet_config_unittest.cc +++ b/buffet/buffet_config_unittest.cc @@ -125,36 +125,36 @@ class BuffetConfigTestWithFakes : public testing::Test, }; TEST_F(BuffetConfigTestWithFakes, EncryptionEnabled) { - config_->SaveSettings("test"); - ASSERT_NE("test", fake_file_content_["settings_file"]); - ASSERT_EQ("test", config_->LoadSettings()); + config_->SaveSettings("config", "test", {}); + ASSERT_NE("test", fake_file_content_["settings_file.config"]); + ASSERT_EQ("test", config_->LoadSettings("config")); } TEST_F(BuffetConfigTestWithFakes, EncryptionFailure) { - config_->SaveSettings("test"); - ASSERT_FALSE(fake_file_content_["settings_file"].empty()); + config_->SaveSettings("config", "test", {}); + ASSERT_FALSE(fake_file_content_["settings_file.config"].empty()); encryptor_result_ = false; - config_->SaveSettings("test2"); + config_->SaveSettings("config", "test2", {}); // Encryption fails -> file cleared. - ASSERT_TRUE(fake_file_content_["settings_file"].empty()); + ASSERT_TRUE(fake_file_content_["settings_file.config"].empty()); } TEST_F(BuffetConfigTestWithFakes, DecryptionFailure) { - config_->SaveSettings("test"); - ASSERT_FALSE(fake_file_content_["settings_file"].empty()); + config_->SaveSettings("config", "test", {}); + ASSERT_FALSE(fake_file_content_["settings_file.config"].empty()); encryptor_result_ = false; // Decryption fails -> empty settings loaded. - ASSERT_TRUE(config_->LoadSettings().empty()); + ASSERT_TRUE(config_->LoadSettings("config").empty()); } TEST_F(BuffetConfigTestWithFakes, SettingsIOFailure) { - config_->SaveSettings("test"); - std::string original = fake_file_content_["settings_file"]; + config_->SaveSettings("config", "test", {}); + std::string original = fake_file_content_["settings_file.config"]; ASSERT_FALSE(original.empty()); io_result_ = false; - ASSERT_TRUE(config_->LoadSettings().empty()); - config_->SaveSettings("test2"); - ASSERT_EQ(original, fake_file_content_["settings_file"]); + ASSERT_TRUE(config_->LoadSettings("config").empty()); + config_->SaveSettings("config2", "test", {}); + ASSERT_EQ(original, fake_file_content_["settings_file.config"]); } } // namespace buffet |