diff options
Diffstat (limited to 'cras/src/tests/playback_rclient_unittest.cc')
-rw-r--r-- | cras/src/tests/playback_rclient_unittest.cc | 308 |
1 files changed, 0 insertions, 308 deletions
diff --git a/cras/src/tests/playback_rclient_unittest.cc b/cras/src/tests/playback_rclient_unittest.cc deleted file mode 100644 index 31ceda74..00000000 --- a/cras/src/tests/playback_rclient_unittest.cc +++ /dev/null @@ -1,308 +0,0 @@ -// Copyright 2019 The Chromium OS Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include <gtest/gtest.h> -#include <stdio.h> -#include <unistd.h> - -extern "C" { -#include "audio_thread.h" -#include "cras_bt_log.h" -#include "cras_messages.h" -#include "cras_rclient.h" -#include "cras_rstream.h" -#include "cras_system_state.h" - -// Access to data structures and static functions. -#include "cras_playback_rclient.c" -#include "cras_rclient_util.c" -} -static bool audio_format_valid; -static unsigned int cras_make_fd_nonblocking_called; -static unsigned int cras_observer_remove_called; -static int stream_list_add_called; -static int stream_list_add_return; -static unsigned int stream_list_rm_called; -static struct cras_audio_shm mock_shm; -static struct cras_rstream mock_rstream; - -void ResetStubData() { - audio_format_valid = true; - cras_make_fd_nonblocking_called = 0; - cras_observer_remove_called = 0; - stream_list_add_called = 0; - stream_list_add_return = 0; - stream_list_rm_called = 0; -} - -namespace { - -TEST(RClientSuite, CreateSendMessage) { - struct cras_rclient* rclient; - int rc; - struct cras_client_connected msg; - int pipe_fds[2]; - - ResetStubData(); - - rc = pipe(pipe_fds); - ASSERT_EQ(0, rc); - - rclient = cras_playback_rclient_create(pipe_fds[1], 800); - ASSERT_NE((void*)NULL, rclient); - EXPECT_EQ(800, rclient->id); - - rc = read(pipe_fds[0], &msg, sizeof(msg)); - EXPECT_EQ(sizeof(msg), rc); - EXPECT_EQ(CRAS_CLIENT_CONNECTED, msg.header.id); - - rclient->ops->destroy(rclient); - EXPECT_EQ(1, cras_observer_remove_called); - close(pipe_fds[0]); - close(pipe_fds[1]); -} - -class CPRMessageSuite : public testing::Test { - protected: - virtual void SetUp() { - int rc; - struct cras_client_connected msg; - - rc = pipe(pipe_fds_); - if (rc < 0) - return; - - rclient_ = cras_playback_rclient_create(pipe_fds_[1], 1); - rc = read(pipe_fds_[0], &msg, sizeof(msg)); - if (rc < 0) - return; - - fmt = { - .format = SND_PCM_FORMAT_S16_LE, - .frame_rate = 48000, - .num_channels = 2, - }; - cras_audio_format_set_default_channel_layout(&fmt); - ResetStubData(); - } - - virtual void TearDown() { - rclient_->ops->destroy(rclient_); - close(pipe_fds_[0]); - close(pipe_fds_[1]); - } - - struct cras_rclient* rclient_; - struct cras_audio_format fmt; - int pipe_fds_[2]; - int fd_; -}; - -TEST_F(CPRMessageSuite, StreamConnectMessage) { - struct cras_client_stream_connected out_msg; - int rc; - - struct cras_connect_message msg; - cras_stream_id_t stream_id = 0x10002; - cras_fill_connect_message(&msg, CRAS_STREAM_OUTPUT, stream_id, - CRAS_STREAM_TYPE_DEFAULT, CRAS_CLIENT_TYPE_UNKNOWN, - 480, 240, /*flags=*/0, /*effects=*/0, fmt, - NO_DEVICE); - ASSERT_EQ(stream_id, msg.stream_id); - - fd_ = 100; - rclient_->ops->handle_message_from_client(rclient_, &msg.header, &fd_, 1); - EXPECT_EQ(1, cras_make_fd_nonblocking_called); - EXPECT_EQ(1, stream_list_add_called); - EXPECT_EQ(0, stream_list_rm_called); - - rc = read(pipe_fds_[0], &out_msg, sizeof(out_msg)); - EXPECT_EQ(sizeof(out_msg), rc); - EXPECT_EQ(stream_id, out_msg.stream_id); -} - -TEST_F(CPRMessageSuite, StreamConnectMessageInvalidDirection) { - struct cras_client_stream_connected out_msg; - int rc; - - struct cras_connect_message msg; - cras_stream_id_t stream_id = 0x10002; - - for (int i = 0; i < CRAS_NUM_DIRECTIONS; i++) { - const auto dir = static_cast<CRAS_STREAM_DIRECTION>(i); - if (dir == CRAS_STREAM_OUTPUT) - continue; - cras_fill_connect_message(&msg, dir, stream_id, CRAS_STREAM_TYPE_DEFAULT, - CRAS_CLIENT_TYPE_UNKNOWN, 480, 240, /*flags=*/0, - /*effects=*/0, fmt, NO_DEVICE); - ASSERT_EQ(stream_id, msg.stream_id); - - fd_ = 100; - rc = rclient_->ops->handle_message_from_client(rclient_, &msg.header, &fd_, - 1); - EXPECT_EQ(0, rc); - EXPECT_EQ(0, cras_make_fd_nonblocking_called); - EXPECT_EQ(0, stream_list_add_called); - EXPECT_EQ(0, stream_list_rm_called); - - rc = read(pipe_fds_[0], &out_msg, sizeof(out_msg)); - EXPECT_EQ(sizeof(out_msg), rc); - EXPECT_EQ(-EINVAL, out_msg.err); - EXPECT_EQ(stream_id, out_msg.stream_id); - } -} - -TEST_F(CPRMessageSuite, StreamConnectMessageInvalidClientId) { - struct cras_client_stream_connected out_msg; - int rc; - - struct cras_connect_message msg; - cras_stream_id_t stream_id = 0x20002; // stream_id with invalid client_id - cras_fill_connect_message(&msg, CRAS_STREAM_OUTPUT, stream_id, - CRAS_STREAM_TYPE_DEFAULT, CRAS_CLIENT_TYPE_UNKNOWN, - 480, 240, /*flags=*/0, /*effects=*/0, fmt, - NO_DEVICE); - ASSERT_EQ(stream_id, msg.stream_id); - - fd_ = 100; - rc = - rclient_->ops->handle_message_from_client(rclient_, &msg.header, &fd_, 1); - EXPECT_EQ(0, rc); - EXPECT_EQ(0, cras_make_fd_nonblocking_called); - EXPECT_EQ(0, stream_list_add_called); - EXPECT_EQ(0, stream_list_rm_called); - - rc = read(pipe_fds_[0], &out_msg, sizeof(out_msg)); - EXPECT_EQ(sizeof(out_msg), rc); - EXPECT_EQ(-EINVAL, out_msg.err); - EXPECT_EQ(stream_id, out_msg.stream_id); -} - -TEST_F(CPRMessageSuite, StreamConnectMessageInvalidAudioFormat) { - struct cras_client_stream_connected out_msg; - int rc; - - struct cras_connect_message msg; - cras_stream_id_t stream_id = 0x10002; - cras_fill_connect_message(&msg, CRAS_STREAM_OUTPUT, stream_id, - CRAS_STREAM_TYPE_DEFAULT, CRAS_CLIENT_TYPE_UNKNOWN, - 480, 240, /*flags=*/0, /*effects=*/0, fmt, - NO_DEVICE); - ASSERT_EQ(stream_id, msg.stream_id); - - audio_format_valid = false; // stubs out verification failure. - - fd_ = 100; - rc = - rclient_->ops->handle_message_from_client(rclient_, &msg.header, &fd_, 1); - EXPECT_EQ(0, rc); - EXPECT_EQ(0, cras_make_fd_nonblocking_called); - EXPECT_EQ(0, stream_list_add_called); - EXPECT_EQ(0, stream_list_rm_called); - - rc = read(pipe_fds_[0], &out_msg, sizeof(out_msg)); - EXPECT_EQ(sizeof(out_msg), rc); - EXPECT_EQ(-EINVAL, out_msg.err); - EXPECT_EQ(stream_id, out_msg.stream_id); -} - -TEST_F(CPRMessageSuite, StreamDisconnectMessage) { - struct cras_disconnect_stream_message msg; - cras_stream_id_t stream_id = 0x10002; - cras_fill_disconnect_stream_message(&msg, stream_id); - - rclient_->ops->handle_message_from_client(rclient_, &msg.header, NULL, 0); - EXPECT_EQ(0, stream_list_add_called); - EXPECT_EQ(1, stream_list_rm_called); -} - -TEST_F(CPRMessageSuite, StreamDisconnectMessageInvalidClientId) { - struct cras_disconnect_stream_message msg; - cras_stream_id_t stream_id = 0x20002; // stream_id with invalid client_id - cras_fill_disconnect_stream_message(&msg, stream_id); - - rclient_->ops->handle_message_from_client(rclient_, &msg.header, NULL, 0); - EXPECT_EQ(0, stream_list_add_called); - EXPECT_EQ(0, stream_list_rm_called); -} -} // namespace - -int main(int argc, char** argv) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} - -/* stubs */ -extern "C" { - -struct stream_list* cras_iodev_list_get_stream_list() { - return NULL; -} - -int cras_make_fd_nonblocking(int fd) { - cras_make_fd_nonblocking_called++; - return 0; -} - -void cras_observer_remove(struct cras_observer_client* client) { - cras_observer_remove_called++; -} - -unsigned int cras_rstream_get_effects(const struct cras_rstream* stream) { - return 0; -} - -int cras_send_with_fds(int sockfd, - const void* buf, - size_t len, - int* fd, - unsigned int num_fds) { - return write(sockfd, buf, len); -} - -key_t cras_sys_state_shm_fd() { - return 1; -} - -void cras_system_set_suspended(int suspended) {} - -int stream_list_rm_all_client_streams(struct stream_list* list, - struct cras_rclient* rclient) { - return 0; -} - -int stream_list_rm(struct stream_list* list, cras_stream_id_t id) { - stream_list_rm_called++; - return 0; -} - -int stream_list_add(struct stream_list* list, - struct cras_rstream_config* config, - struct cras_rstream** stream) { - int ret; - - *stream = &mock_rstream; - - stream_list_add_called++; - ret = stream_list_add_return; - if (ret) - stream_list_add_return = -EINVAL; - - mock_rstream.shm = &mock_shm; - mock_rstream.direction = config->direction; - mock_rstream.stream_id = config->stream_id; - - return ret; -} - -bool cras_audio_format_valid(const struct cras_audio_format* fmt) { - return audio_format_valid; -} - -void detect_rtc_stream_pair(struct stream_list* list, - struct cras_rstream* stream) { - return; -} - -} // extern "C" |