summaryrefslogtreecommitdiff
path: root/cras/src/tests/rstream_unittest.cc
diff options
context:
space:
mode:
authorCheng-Yi Chiang <cychiang@chromium.org>2017-11-13 20:19:28 +0800
committerchrome-bot <chrome-bot@chromium.org>2017-11-16 06:27:45 -0800
commit762b1f500e4e050396ecd3fba8cf7769fc40359d (patch)
tree320dd0d77bbc3ded2d1266a5f0ea4cca95a3b590 /cras/src/tests/rstream_unittest.cc
parent94cdcf77d0af70911ea30edd3cf309b7ae8acb9b (diff)
downloadadhd-762b1f500e4e050396ecd3fba8cf7769fc40359d.tar.gz
CRAS: rstream - Add API to flush audio messages
Add API to let cras_rstream read and handle audio messages from client. The pending flag in shm can be cleared if client replies the request. BUG=b:68479798 TEST=unittest to be added. Change-Id: Ic997bbd3a789af31ba23ab028f6605e3271183aa Reviewed-on: https://chromium-review.googlesource.com/768776 Commit-Ready: Cheng-Yi Chiang <cychiang@chromium.org> Tested-by: Cheng-Yi Chiang <cychiang@chromium.org> Reviewed-by: Cheng-Yi Chiang <cychiang@chromium.org>
Diffstat (limited to 'cras/src/tests/rstream_unittest.cc')
-rw-r--r--cras/src/tests/rstream_unittest.cc81
1 files changed, 81 insertions, 0 deletions
diff --git a/cras/src/tests/rstream_unittest.cc b/cras/src/tests/rstream_unittest.cc
index 20ad117f..baf53efa 100644
--- a/cras/src/tests/rstream_unittest.cc
+++ b/cras/src/tests/rstream_unittest.cc
@@ -57,6 +57,20 @@ class RstreamTestSuite : public testing::Test {
fmt1->num_channels == fmt2->num_channels;
}
+ void stub_client_reply(enum CRAS_AUDIO_MESSAGE_ID id, int frames, int err) {
+ int rc;
+ struct audio_message aud_msg;
+ // Create a message.
+ aud_msg.id = id;
+ aud_msg.frames = frames;
+ aud_msg.error = err;
+
+ // Use socket fd to stub message from client.
+ rc = write(client_fd_, &aud_msg, sizeof(aud_msg));
+ EXPECT_EQ(sizeof(aud_msg), rc);
+ return;
+ }
+
struct cras_audio_format fmt_;
struct cras_rstream_config config_;
int client_fd_;
@@ -232,6 +246,39 @@ TEST_F(RstreamTestSuite, OutputStreamIsPendingReply) {
cras_rstream_destroy(s);
}
+TEST_F(RstreamTestSuite, OutputStreamFlushMessages) {
+ struct cras_rstream *s;
+ int rc;
+ struct timespec ts;
+
+ rc = cras_rstream_create(&config_, &s);
+ EXPECT_EQ(0, rc);
+
+ // Not pending reply.
+ rc = cras_rstream_is_pending_reply(s);
+ EXPECT_EQ(0, rc);
+
+ // Request some data from client.
+ rc = cras_rstream_request_audio(s, &ts);
+ EXPECT_GT(rc, 0);
+
+ // Pending reply.
+ rc = cras_rstream_is_pending_reply(s);
+ EXPECT_EQ(1, rc);
+
+ // Client replies that data is ready.
+ stub_client_reply(AUDIO_MESSAGE_DATA_READY, 10, 0);
+
+ // Read messages.
+ cras_rstream_flush_old_audio_messages(s);
+
+ // NOT Pending reply.
+ rc = cras_rstream_is_pending_reply(s);
+ EXPECT_EQ(0, rc);
+
+ cras_rstream_destroy(s);
+}
+
TEST_F(RstreamTestSuite, InputStreamIsPendingReply) {
struct cras_rstream *s;
int rc;
@@ -256,6 +303,40 @@ TEST_F(RstreamTestSuite, InputStreamIsPendingReply) {
cras_rstream_destroy(s);
}
+TEST_F(RstreamTestSuite, InputStreamFlushMessages) {
+ struct cras_rstream *s;
+ int rc;
+
+ config_.direction = CRAS_STREAM_INPUT;
+
+ rc = cras_rstream_create(&config_, &s);
+ EXPECT_EQ(0, rc);
+
+ // Not pending reply.
+ rc = cras_rstream_is_pending_reply(s);
+ EXPECT_EQ(0, rc);
+
+ // Some data is ready. Sends it to client.
+ rc = cras_rstream_audio_ready(s, 10);
+ EXPECT_GT(rc, 0);
+
+ // Pending reply.
+ rc = cras_rstream_is_pending_reply(s);
+ EXPECT_EQ(1, rc);
+
+ // Client replies that data is captured.
+ stub_client_reply(AUDIO_MESSAGE_DATA_CAPTURED, 10, 0);
+
+ // Read messages.
+ cras_rstream_flush_old_audio_messages(s);
+
+ // NOT Pending reply.
+ rc = cras_rstream_is_pending_reply(s);
+ EXPECT_EQ(0, rc);
+
+ cras_rstream_destroy(s);
+}
+
} // namespace
int main(int argc, char **argv) {