/*
 *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */
#ifndef WEBRTC_AUDIO_TEST_AUDIO_BWE_INTEGRATION_TEST_H_
#define WEBRTC_AUDIO_TEST_AUDIO_BWE_INTEGRATION_TEST_H_

#include <memory>
#include <string>

#include "webrtc/test/call_test.h"
#include "webrtc/test/fake_audio_device.h"

namespace webrtc {
namespace test {

class AudioBweTest : public test::EndToEndTest {
 public:
  AudioBweTest();

 protected:
  virtual std::string AudioInputFile() = 0;

  virtual FakeNetworkPipe::Config GetNetworkPipeConfig() = 0;

  size_t GetNumVideoStreams() const override;
  size_t GetNumAudioStreams() const override;
  size_t GetNumFlexfecStreams() const override;

  std::unique_ptr<test::FakeAudioDevice::Capturer> CreateCapturer() override;

  void OnFakeAudioDevicesCreated(
      test::FakeAudioDevice* send_audio_device,
      test::FakeAudioDevice* recv_audio_device) override;

  test::PacketTransport* CreateSendTransport(Call* sender_call) override;
  test::PacketTransport* CreateReceiveTransport() override;

  void PerformTest() override;

 private:
  test::FakeAudioDevice* send_audio_device_;
};

}  // namespace test
}  // namespace webrtc

#endif  // WEBRTC_AUDIO_TEST_AUDIO_BWE_INTEGRATION_TEST_H_
