Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5a4e4572 authored by Henri Chataing's avatar Henri Chataing Committed by Gerrit Code Review
Browse files

Merge "net_test_stack_a2dp_codecs_native: Remove dependency on log capture" into main

parents 56dabca2 c8bdced2
Loading
Loading
Loading
Loading
+30 −41
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@
#include <string>

#include "common/init_flags.h"
#include "common/testing/log_capture.h"
#include "common/time_util.h"
#include "os/log.h"
#include "osi/include/allocator.h"
@@ -39,10 +38,6 @@
namespace {
constexpr uint32_t kAacReadSize = 1024 * 2 * 2;
constexpr uint32_t kA2dpTickUs = 23 * 1000;
constexpr char kDecodedDataCallbackIsInvoked[] =
    "A2DP decoded data callback is invoked.";
constexpr char kEnqueueCallbackIsInvoked[] =
    "A2DP source enqueue callback is invoked.";
constexpr uint16_t kPeerMtu = 1000;
constexpr char kWavFile[] = "test/a2dp/raw_data/pcm1644s.wav";
constexpr uint8_t kCodecInfoAacCapability[AVDT_CODEC_SIZE] = {
@@ -150,45 +145,44 @@ class A2dpAacTest : public ::testing::Test {
  A2dpCodecs* a2dp_codecs_;
  tA2DP_ENCODER_INTERFACE* encoder_iface_;
  tA2DP_DECODER_INTERFACE* decoder_iface_;
  std::unique_ptr<LogCapture> log_capture_;
};

TEST_F(A2dpAacTest, a2dp_source_read_underflow) {
  log_capture_ = std::make_unique<LogCapture>();
  auto read_cb = +[](uint8_t* p_buf, uint32_t len) -> uint32_t {
    // underflow
    return 0;
  };
  static int enqueue_cb_invoked = 0;

  auto read_cb = +[](uint8_t* p_buf, uint32_t len) -> uint32_t { return 0; };

  auto enqueue_cb = +[](BT_HDR* p_buf, size_t frames_n, uint32_t len) -> bool {
    enqueue_cb_invoked += 1;
    osi_free(p_buf);
    return false;
  };

  InitializeEncoder(true, read_cb, enqueue_cb);
  uint64_t timestamp_us = bluetooth::common::time_gettimeofday_us();
  encoder_iface_->send_frames(timestamp_us);
  usleep(kA2dpTickUs);
  timestamp_us = bluetooth::common::time_gettimeofday_us();
  encoder_iface_->send_frames(timestamp_us);
  log_capture_->WaitUntilLogContains("a2dp_aac_encode_frames: underflow");
  encoder_iface_->send_frames(timestamp_us + kA2dpTickUs);

  ASSERT_EQ(enqueue_cb_invoked, 0);
}

TEST_F(A2dpAacTest, a2dp_enqueue_cb_is_invoked) {
  log_capture_ = std::make_unique<LogCapture>();
  auto read_cb = +[](uint8_t* p_buf, uint32_t len) -> uint32_t {
    ASSERT(kAacReadSize == len);
    return len;
  };
  static int enqueue_cb_invoked = 0;

  auto read_cb = +[](uint8_t* p_buf, uint32_t len) -> uint32_t { return len; };

  auto enqueue_cb = +[](BT_HDR* p_buf, size_t frames_n, uint32_t len) -> bool {
    log::info("{}", kEnqueueCallbackIsInvoked);
    enqueue_cb_invoked += 1;
    osi_free(p_buf);
    return false;
  };

  InitializeEncoder(true, read_cb, enqueue_cb);
  uint64_t timestamp_us = bluetooth::common::time_gettimeofday_us();
  encoder_iface_->send_frames(timestamp_us);
  usleep(kA2dpTickUs);
  timestamp_us = bluetooth::common::time_gettimeofday_us();
  encoder_iface_->send_frames(timestamp_us);
  log_capture_->WaitUntilLogContains(kEnqueueCallbackIsInvoked);
  encoder_iface_->send_frames(timestamp_us + kA2dpTickUs);

  ASSERT_EQ(enqueue_cb_invoked, 1);
}

TEST_F(A2dpAacTest, decoded_data_cb_not_invoked_when_empty_packet) {
@@ -201,10 +195,11 @@ TEST_F(A2dpAacTest, decoded_data_cb_not_invoked_when_empty_packet) {
}

TEST_F(A2dpAacTest, decoded_data_cb_invoked) {
  log_capture_ = std::make_unique<LogCapture>();
  auto data_cb = +[](uint8_t* p_buf, uint32_t len) {
    log::info("{}", kDecodedDataCallbackIsInvoked);
  };
  static int data_cb_invoked = 0;
  static int enqueue_cb_invoked = 0;

  auto data_cb = +[](uint8_t* p_buf, uint32_t len) { data_cb_invoked += 1; };

  InitializeDecoder(data_cb);

  auto read_cb = +[](uint8_t* p_buf, uint32_t len) -> uint32_t {
@@ -213,23 +208,23 @@ TEST_F(A2dpAacTest, decoded_data_cb_invoked) {
    counter += len;
    return len;
  };

  auto enqueue_cb = +[](BT_HDR* p_buf, size_t frames_n, uint32_t len) -> bool {
    enqueue_cb_invoked += 1;
    packet = p_buf;
    log::info("{}", kEnqueueCallbackIsInvoked);
    return false;
  };

  InitializeEncoder(true, read_cb, enqueue_cb);

  uint64_t timestamp_us = bluetooth::common::time_gettimeofday_us();
  encoder_iface_->send_frames(timestamp_us);
  usleep(kA2dpTickUs);
  timestamp_us = bluetooth::common::time_gettimeofday_us();
  encoder_iface_->send_frames(timestamp_us);
  encoder_iface_->send_frames(timestamp_us + kA2dpTickUs);

  log_capture_->WaitUntilLogContains(kEnqueueCallbackIsInvoked);
  ASSERT_EQ(enqueue_cb_invoked, 1);
  decoder_iface_->decode_packet(packet);
  osi_free(packet);
  ASSERT_TRUE(log_capture_->Find(kDecodedDataCallbackIsInvoked));
  ASSERT_EQ(data_cb_invoked, 1);
}

TEST_F(A2dpAacTest, set_source_codec_config_works) {
@@ -272,12 +267,6 @@ TEST_F(A2dpAacTest, effective_mtu_when_peer_does_not_support_3mbps) {
  ASSERT_EQ(a2dp_aac_get_effective_frame_size(), 663 /* MAX_2MBPS_AVDTP_MTU */);
}

TEST_F(A2dpAacTest, debug_codec_dump) {
  log_capture_ = std::make_unique<LogCapture>();
  a2dp_codecs_->debug_codec_dump(2);
  log_capture_->WaitUntilLogContains("Current Codec: AAC");
}

TEST_F(A2dpAacTest, codec_info_string) {
  auto codec_info = A2DP_CodecInfoString(kCodecInfoAacCapability);
  ASSERT_NE(codec_info.find("samp_freq: 44100"), std::string::npos);
+0 −8
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@
#include <string>

#include "common/init_flags.h"
#include "common/testing/log_capture.h"
#include "common/time_util.h"
#include "os/log.h"
#include "osi/include/allocator.h"
@@ -147,7 +146,6 @@ class A2dpSbcTest : public ::testing::Test {
  A2dpCodecs* a2dp_codecs_;
  tA2DP_ENCODER_INTERFACE* encoder_iface_;
  tA2DP_DECODER_INTERFACE* decoder_iface_;
  std::unique_ptr<LogCapture> log_capture_;
};

TEST_F(A2dpSbcTest, a2dp_source_read_underflow) {
@@ -281,12 +279,6 @@ TEST_F(A2dpSbcTest, effective_mtu_when_peer_does_not_support_3mbps) {
  ASSERT_EQ(a2dp_sbc_get_effective_frame_size(), 663 /* MAX_2MBPS_AVDTP_MTU */);
}

TEST_F(A2dpSbcTest, debug_codec_dump) {
  log_capture_ = std::make_unique<LogCapture>();
  a2dp_codecs_->debug_codec_dump(2);
  log_capture_->WaitUntilLogContains("Current Codec: SBC");
}

TEST_F(A2dpSbcTest, codec_info_string) {
  auto codec_info = A2DP_CodecInfoString(kCodecInfoSbcCapability);
  ASSERT_NE(codec_info.find("samp_freq: 44100"), std::string::npos);
+9 −8
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@
#include <stdio.h>

#include "common/init_flags.h"
#include "common/testing/log_capture.h"
#include "common/time_util.h"
#include "osi/include/allocator.h"
#include "stack/include/a2dp_vendor_ldac_constants.h"
@@ -128,24 +127,26 @@ class A2dpLdacTest : public ::testing::Test {
  A2dpCodecs* a2dp_codecs_;
  tA2DP_ENCODER_INTERFACE* encoder_iface_;
  tA2DP_DECODER_INTERFACE* decoder_iface_;
  std::unique_ptr<LogCapture> log_capture_;
};

TEST_F(A2dpLdacTest, a2dp_source_read_underflow) {
  // log_capture_ = std::make_unique<LogCapture>();
  static int enqueue_cb_invoked = 0;

  auto read_cb = +[](uint8_t* p_buf, uint32_t len) -> uint32_t {
    return 0;
  };

  auto enqueue_cb = +[](BT_HDR* p_buf, size_t frames_n, uint32_t len) -> bool {
    enqueue_cb_invoked += 1;
    return false;
  };

  InitializeEncoder(read_cb, enqueue_cb);
  uint64_t timestamp_us = bluetooth::common::time_gettimeofday_us();
  encoder_iface_->send_frames(timestamp_us);
  usleep(kA2dpTickUs);
  timestamp_us = bluetooth::common::time_gettimeofday_us();
  encoder_iface_->send_frames(timestamp_us);
  // log_capture_->WaitUntilLogContains("a2dp_ldac_encode_frames: underflow");
  encoder_iface_->send_frames(timestamp_us + kA2dpTickUs);

  ASSERT_EQ(enqueue_cb_invoked, 0);
}

}  // namespace testing