APM test: Fix default config, add test for 'dump'
- Fix AudioPolicyConfig::setDefault so the config is valid again;
- Enhance the default config with dynamic profiles;
- Factor out the code for creating a full dynamic profile;
- Add a method to unit test that verifies calling APM::dump.
This is also useful to examine how the default config looks
like.
Test: audiopolicy_tests
Change-Id: I102071e160b835da50ed5806bd2d62102a10d775
diff --git a/services/audiopolicy/tests/audiopolicymanager_tests.cpp b/services/audiopolicy/tests/audiopolicymanager_tests.cpp
index 2d9260e..56af152 100644
--- a/services/audiopolicy/tests/audiopolicymanager_tests.cpp
+++ b/services/audiopolicy/tests/audiopolicymanager_tests.cpp
@@ -16,9 +16,13 @@
#include <memory>
#include <set>
+#include <sys/wait.h>
+#include <unistd.h>
#include <gtest/gtest.h>
+#define LOG_TAG "APM_Test"
+#include <log/log.h>
#include <media/PatchBuilder.h>
#include "AudioPolicyTestClient.h"
@@ -134,6 +138,36 @@
// SetUp must finish with no assertions.
}
+TEST_F(AudioPolicyManagerTest, Dump) {
+ int pipefd[2];
+ ASSERT_NE(-1, pipe(pipefd));
+ pid_t cpid = fork();
+ ASSERT_NE(-1, cpid);
+ if (cpid == 0) {
+ // Child process reads from the pipe and logs.
+ close(pipefd[1]);
+ std::string line;
+ char buf;
+ while (read(pipefd[0], &buf, sizeof(buf)) > 0) {
+ if (buf != '\n') {
+ line += buf;
+ } else {
+ ALOGI("%s", line.c_str());
+ line = "";
+ }
+ }
+ if (!line.empty()) ALOGI("%s", line.c_str());
+ close(pipefd[0]);
+ _exit(EXIT_SUCCESS);
+ } else {
+ // Parent does the dump and checks the status code.
+ close(pipefd[0]);
+ ASSERT_EQ(NO_ERROR, mManager->dump(pipefd[1]));
+ close(pipefd[1]);
+ wait(NULL); // Wait for the child to exit.
+ }
+}
+
TEST_F(AudioPolicyManagerTest, CreateAudioPatchFailure) {
audio_patch patch{};
audio_patch_handle_t handle = AUDIO_PATCH_HANDLE_NONE;