• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <memory>
6 #include <stdint.h>
7 #include <stdio.h>
8 #include <time.h>
9 
10 #include <gtest/gtest.h>
11 
12 extern "C" {
13 #include "dev_io.h" // tested
14 #include "dev_stream.h" // tested
15 #include "cras_rstream.h" // stubbed
16 #include "cras_iodev.h" // stubbed
17 #include "cras_shm.h"
18 #include "cras_types.h"
19 #include "utlist.h"
20 
21 struct audio_thread_event_log* atlog;
22 }
23 
24 #include "dev_io_stubs.h"
25 #include "iodev_stub.h"
26 #include "rstream_stub.h"
27 
28 namespace {
29 
30 
31 class DevIoSuite : public testing::Test{
32  protected:
SetUp()33   virtual void SetUp() {
34     atlog = static_cast<audio_thread_event_log*>(calloc(1, sizeof(*atlog)));
35     iodev_stub_reset();
36     rstream_stub_reset();
37   }
38 
TearDown()39   virtual void TearDown() {
40     free(atlog);
41   }
42 };
43 
TEST_F(DevIoSuite,SendCapturedFails)44 TEST_F(DevIoSuite, SendCapturedFails) {
45   const size_t cb_threshold = 480;
46 
47   cras_audio_format format;
48   fill_audio_format(&format, 48000);
49 
50   StreamPtr stream =
51       create_stream(1, 1, CRAS_STREAM_INPUT, cb_threshold, &format);
52   // rstream's next callback is now and there is enough data to fill.
53   struct timespec start;
54   clock_gettime(CLOCK_MONOTONIC_RAW, &start);
55   stream->rstream->next_cb_ts = start;
56   AddFakeDataToStream(stream.get(), 480);
57 
58   struct open_dev* dev_list = NULL;
59   DevicePtr dev = create_device(CRAS_STREAM_INPUT, cb_threshold,
60                                 &format, CRAS_NODE_TYPE_MIC);
61   DL_APPEND(dev_list, dev->odev.get());
62   add_stream_to_dev(dev->dev, stream);
63 
64   // Set failure response from frames_queued.
65   iodev_stub_frames_queued(dev->dev.get(), -3, start);
66 
67   EXPECT_EQ(-3, dev_io_send_captured_samples(dev_list));
68 }
69 
70 /* Stubs */
71 extern "C" {
72 
cras_server_metrics_highest_hw_level(unsigned hw_level,enum CRAS_STREAM_DIRECTION direction)73 int cras_server_metrics_highest_hw_level(unsigned hw_level,
74 		enum CRAS_STREAM_DIRECTION direction)
75 {
76   return 0;
77 }
78 
cras_server_metrics_longest_fetch_delay(unsigned delay_msec)79 int cras_server_metrics_longest_fetch_delay(unsigned delay_msec)
80 {
81   return 0;
82 }
83 
cras_server_metrics_num_underruns(unsigned num_underruns)84 int cras_server_metrics_num_underruns(unsigned num_underruns)
85 {
86   return 0;
87 }
88 
input_data_get_for_stream(struct input_data * data,struct cras_rstream * stream,struct buffer_share * offsets,struct cras_audio_area ** area,unsigned int * offset)89 int input_data_get_for_stream(
90 		struct input_data *data,
91 		struct cras_rstream *stream,
92 		struct buffer_share *offsets,
93 		struct cras_audio_area **area,
94 		unsigned int *offset)
95 {
96   return 0;
97 }
98 
input_data_put_for_stream(struct input_data * data,struct cras_rstream * stream,struct buffer_share * offsets,unsigned int frames)99 int input_data_put_for_stream(struct input_data *data,
100 			   struct cras_rstream *stream,
101 			   struct buffer_share *offsets,
102 			   unsigned int frames)
103 {
104   return 0;
105 }
cras_rstream_post_processing_format(const struct cras_rstream * stream,void * dev_ptr)106 struct cras_audio_format *cras_rstream_post_processing_format(
107     const struct cras_rstream *stream, void *dev_ptr)
108 {
109   return NULL;
110 }
111 }  // extern "C"
112 
113 }  //  namespace
114 
main(int argc,char ** argv)115 int main(int argc, char** argv) {
116   ::testing::InitGoogleTest(&argc, argv);
117   return RUN_ALL_TESTS();
118 }
119