summaryrefslogtreecommitdiff
path: root/libperfmgr/tests/PropertyNodeTest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libperfmgr/tests/PropertyNodeTest.cc')
-rw-r--r--libperfmgr/tests/PropertyNodeTest.cc222
1 files changed, 0 insertions, 222 deletions
diff --git a/libperfmgr/tests/PropertyNodeTest.cc b/libperfmgr/tests/PropertyNodeTest.cc
deleted file mode 100644
index 73f41c56..00000000
--- a/libperfmgr/tests/PropertyNodeTest.cc
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specic language governing permissions and
- * limitations under the License.
- */
-
-#include <android-base/file.h>
-#include <android-base/properties.h>
-#include <android-base/stringprintf.h>
-#include <gtest/gtest.h>
-
-#include <algorithm>
-#include <thread>
-
-#include "perfmgr/PropertyNode.h"
-
-namespace android {
-namespace perfmgr {
-
-using namespace std::chrono_literals;
-
-constexpr double kTIMING_TOLERANCE_MS = std::chrono::milliseconds(25).count();
-constexpr auto kSLEEP_TOLERANCE_MS = 2ms;
-
-static inline void _VerifyPropertyValue(const std::string& path,
- const std::string& value) {
- std::string s = android::base::GetProperty(path, "");
- EXPECT_EQ(value, s);
-}
-
-static inline const std::string _InitProperty(const std::string& path) {
- EXPECT_TRUE(android::base::SetProperty(path, ""))
- << "failed to clear property";
- return path;
-}
-
-// Test init with no default value
-TEST(PropertyNodeTest, NoInitDefaultTest) {
- std::string key = _InitProperty("test.libperfmgr.key");
- PropertyNode t("t", key, {{"value0"}, {"value1"}, {"value2"}}, 1, false);
- t.Update(false);
- _VerifyPropertyValue(key, "");
-}
-
-// Test init with default value
-TEST(PropertyNodeTest, InitDefaultTest) {
- std::string key = _InitProperty("test.libperfmgr.key");
- PropertyNode t("t", key, {{"value0"}, {"value1"}, {"value2"}}, 1, true);
- t.Update(false);
- _VerifyPropertyValue(key, "value1");
- std::string key2 = _InitProperty("test.libperfmgr.key2");
- PropertyNode t2("t2", key2, {{"value0"}, {"value1"}, {"value2"}}, 0, true);
- t2.Update(false);
- _VerifyPropertyValue(key2, "value0");
-}
-
-// Test DumpToFd
-TEST(PropertyNodeTest, DumpToFdTest) {
- std::string key = _InitProperty("test.libperfmgr.key");
- PropertyNode t("test_dump", key, {{"value0"}, {"value1"}, {"value2"}}, 1,
- true);
- t.Update(false);
- TemporaryFile dumptf;
- t.DumpToFd(dumptf.fd);
- fsync(dumptf.fd);
- std::string buf(
- android::base::StringPrintf("test_dump\t%s\t1\tvalue1\n", key.c_str()));
- std::string s;
- EXPECT_TRUE(android::base::ReadFileToString(dumptf.path, &s))
- << strerror(errno);
- EXPECT_EQ(buf, s);
-}
-
-// Test GetValueIndex
-TEST(PropertyNodeTest, GetValueIndexTest) {
- std::string key = _InitProperty("test.libperfmgr.key");
- PropertyNode t("t", key, {{"value0"}, {"value1"}, {"value2"}}, 1, false);
- std::size_t index = 0;
- EXPECT_TRUE(t.GetValueIndex("value2", &index));
- EXPECT_EQ(2u, index);
- index = 1234;
- EXPECT_FALSE(t.GetValueIndex("NON_EXIST", &index));
- EXPECT_EQ(1234u, index);
-}
-
-// Test GetValues
-TEST(PropertyNodeTest, GetValuesTest) {
- std::string key = _InitProperty("test.libperfmgr.key");
- PropertyNode t("t", key, {{"value0"}, {"value1"}, {"value2"}}, 1, false);
- std::vector values = t.GetValues();
- EXPECT_EQ(3u, values.size());
- EXPECT_EQ("value0", values[0]);
- EXPECT_EQ("value1", values[1]);
- EXPECT_EQ("value2", values[2]);
-}
-
-// Test get more properties
-TEST(PropertyNodeTest, GetPropertiesTest) {
- std::string test_name = "TESTREQ_1";
- std::string test_path = "TEST_PATH";
- PropertyNode t(test_name, test_path, {}, 0, false);
- EXPECT_EQ(test_name, t.GetName());
- EXPECT_EQ(test_path, t.GetPath());
- EXPECT_EQ(0u, t.GetValues().size());
- EXPECT_EQ(0u, t.GetDefaultIndex());
- EXPECT_FALSE(t.GetResetOnInit());
-}
-
-// Test add request
-TEST(PropertyNodeTest, AddRequestTest) {
- std::string key = _InitProperty("test.libperfmgr.key");
- PropertyNode t("t", key, {{"value0"}, {"value1"}, {""}}, 2, true);
- auto start = std::chrono::steady_clock::now();
- EXPECT_TRUE(t.AddRequest(1, "INTERACTION", start + 500ms));
- std::chrono::milliseconds expire_time = t.Update(true);
- // Add request @ value1
- _VerifyPropertyValue(key, "value1");
- EXPECT_NEAR(std::chrono::milliseconds(500).count(), expire_time.count(),
- kTIMING_TOLERANCE_MS);
- // Add request @ value0 higher prio than value1
- EXPECT_TRUE(t.AddRequest(0, "LAUNCH", start + 200ms));
- expire_time = t.Update(true);
- _VerifyPropertyValue(key, "value0");
- EXPECT_NEAR(std::chrono::milliseconds(200).count(), expire_time.count(),
- kTIMING_TOLERANCE_MS);
- // Let high prio request timeout, now only request @ value1 active
- std::this_thread::sleep_for(expire_time + kSLEEP_TOLERANCE_MS);
- expire_time = t.Update(true);
- _VerifyPropertyValue(key, "value1");
- EXPECT_NEAR(std::chrono::milliseconds(300).count(), expire_time.count(),
- kTIMING_TOLERANCE_MS);
- // Let all requests timeout, now default value2
- std::this_thread::sleep_for(expire_time + kSLEEP_TOLERANCE_MS);
- expire_time = t.Update(true);
- _VerifyPropertyValue(key, "");
- EXPECT_EQ(std::chrono::milliseconds::max(), expire_time);
-}
-
-// Test remove request
-TEST(PropertyNodeTest, RemoveRequestTest) {
- std::string key = _InitProperty("test.libperfmgr.key");
- PropertyNode t("t", key, {{"value0"}, {"value1"}, {"value2"}}, 2, true);
- auto start = std::chrono::steady_clock::now();
- EXPECT_TRUE(t.AddRequest(1, "INTERACTION", start + 500ms));
- std::chrono::milliseconds expire_time = t.Update(true);
- // Add request @ value1
- _VerifyPropertyValue(key, "value1");
- EXPECT_NEAR(std::chrono::milliseconds(500).count(), expire_time.count(),
- kTIMING_TOLERANCE_MS);
- // Add request @ value0 higher prio than value1
- EXPECT_TRUE(t.AddRequest(0, "LAUNCH", start + 200ms));
- expire_time = t.Update(true);
- _VerifyPropertyValue(key, "value0");
- EXPECT_NEAR(std::chrono::milliseconds(200).count(), expire_time.count(),
- kTIMING_TOLERANCE_MS);
- // Remove high prio request, now only request @ value1 active
- t.RemoveRequest("LAUNCH");
- expire_time = t.Update(true);
- _VerifyPropertyValue(key, "value1");
- EXPECT_NEAR(std::chrono::milliseconds(500).count(), expire_time.count(),
- kTIMING_TOLERANCE_MS);
- // Remove request, now default value2
- t.RemoveRequest("INTERACTION");
- expire_time = t.Update(true);
- _VerifyPropertyValue(key, "value2");
- EXPECT_EQ(std::chrono::milliseconds::max(), expire_time);
-}
-
-// Test add request
-TEST(PropertyNodeTest, AddRequestTestOverride) {
- std::string key = _InitProperty("test.libperfmgr.key");
- PropertyNode t("t", key, {{"value0"}, {"value1"}, {"value2"}}, 2, true);
- auto start = std::chrono::steady_clock::now();
- EXPECT_TRUE(t.AddRequest(1, "INTERACTION", start + 500ms));
- std::chrono::milliseconds expire_time = t.Update(true);
- // Add request @ value1
- _VerifyPropertyValue(key, "value1");
- EXPECT_NEAR(std::chrono::milliseconds(500).count(), expire_time.count(),
- kTIMING_TOLERANCE_MS);
- // Add request @ value0 higher prio than value1
- EXPECT_TRUE(t.AddRequest(0, "LAUNCH", start + 200ms));
- expire_time = t.Update(true);
- _VerifyPropertyValue(key, "value0");
- EXPECT_NEAR(std::chrono::milliseconds(200).count(), expire_time.count(),
- kTIMING_TOLERANCE_MS);
- // Add request @ value0 shorter
- EXPECT_TRUE(t.AddRequest(0, "LAUNCH", start + 100ms));
- expire_time = t.Update(true);
- _VerifyPropertyValue(key, "value0");
- EXPECT_NEAR(std::chrono::milliseconds(200).count(), expire_time.count(),
- kTIMING_TOLERANCE_MS);
- // Add request @ value0 longer
- EXPECT_TRUE(t.AddRequest(0, "LAUNCH", start + 300ms));
- expire_time = t.Update(true);
- _VerifyPropertyValue(key, "value0");
- EXPECT_NEAR(std::chrono::milliseconds(300).count(), expire_time.count(),
- kTIMING_TOLERANCE_MS);
- // Remove high prio request, now only request @ value1 active
- t.RemoveRequest("LAUNCH");
- expire_time = t.Update(true);
- _VerifyPropertyValue(key, "value1");
- EXPECT_NEAR(std::chrono::milliseconds(500).count(), expire_time.count(),
- kTIMING_TOLERANCE_MS);
- // Remove request, now default value2
- t.RemoveRequest("INTERACTION");
- expire_time = t.Update(true);
- _VerifyPropertyValue(key, "value2");
- EXPECT_EQ(std::chrono::milliseconds::max(), expire_time);
-}
-
-} // namespace perfmgr
-} // namespace android