diff options
author | Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> | 2024-04-09 06:41:58 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-04-09 06:41:58 +0000 |
commit | 793679f47a23c2f8c8e7354d2bb728a9a673b590 (patch) | |
tree | 6fa7d5e3de0d1b4a1293e21600865bf5a715f537 | |
parent | f5e9af16b66fe003b6481790f33932747f606571 (diff) | |
parent | 2f8efe00af7ae33fede46d84e1eb0bf8b02614a8 (diff) | |
download | core-793679f47a23c2f8c8e7354d2bb728a9a673b590.tar.gz |
Merge "skip nop persistent property writes" into main
-rw-r--r-- | init/persistent_properties.cpp | 3 | ||||
-rw-r--r-- | init/persistent_properties_test.cpp | 28 |
2 files changed, 31 insertions, 0 deletions
diff --git a/init/persistent_properties.cpp b/init/persistent_properties.cpp index 59e57b95f..1d17e3c10 100644 --- a/init/persistent_properties.cpp +++ b/init/persistent_properties.cpp @@ -236,6 +236,9 @@ void WritePersistentProperty(const std::string& name, const std::string& value) persistent_properties->mutable_properties()->end(), [&name](const auto& record) { return record.name() == name; }); if (it != persistent_properties->mutable_properties()->end()) { + if (it->value() == value) { + return; + } it->set_name(name); it->set_value(value); } else { diff --git a/init/persistent_properties_test.cpp b/init/persistent_properties_test.cpp index 576305081..97865d7b4 100644 --- a/init/persistent_properties_test.cpp +++ b/init/persistent_properties_test.cpp @@ -17,6 +17,9 @@ #include "persistent_properties.h" #include <errno.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <unistd.h> #include <vector> @@ -155,6 +158,31 @@ TEST(persistent_properties, UpdatePropertyBadParse) { EXPECT_FALSE(it == read_back_properties.properties().end()); } +TEST(persistent_properties, NopUpdateDoesntWriteFile) { + TemporaryFile tf; + ASSERT_TRUE(tf.fd != -1); + persistent_property_filename = tf.path; + + auto last_modified = [&tf]() -> time_t { + struct stat buf; + EXPECT_EQ(fstat(tf.fd, &buf), 0); + return buf.st_mtime; + }; + + std::vector<std::pair<std::string, std::string>> persistent_properties = { + {"persist.sys.locale", "en-US"}, + {"persist.sys.timezone", "America/Los_Angeles"}, + }; + ASSERT_RESULT_OK( + WritePersistentPropertyFile(VectorToPersistentProperties(persistent_properties))); + + time_t t = last_modified(); + sleep(2); + WritePersistentProperty("persist.sys.locale", "en-US"); + // Ensure that the file was not modified + ASSERT_EQ(last_modified(), t); +} + TEST(persistent_properties, RejectNonPersistProperty) { TemporaryFile tf; ASSERT_TRUE(tf.fd != -1); |