blob: 2e0fa71386a4532df9d61bf425753a696310026e [file] [log] [blame]
// Copyright 2025 The Fuchsia 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 "src/media/audio/drivers/virtual-audio/virtual-audio.h"
#include <lib/driver/testing/cpp/driver_test.h>
#include "src/lib/testing/predicates/status.h"
#include "src/media/audio/drivers/virtual-audio/virtual-audio-composite.h"
namespace virtual_audio::test {
class Environment : public fdf_testing::Environment {
public:
zx::result<> Serve(fdf::OutgoingDirectory& to_driver_vfs) override { return zx::ok(); }
};
class TestConfig {
public:
using DriverType = VirtualAudio;
using EnvironmentType = Environment;
};
class VirtualAudioTest : public testing::Test {
public:
void SetUp() override {
ASSERT_OK(driver_test_.StartDriver());
ConnectToDriver();
}
void TearDown() override { ASSERT_OK(driver_test_.StopDriver()); }
protected:
fidl::SyncClient<fuchsia_virtualaudio::Control>& control_client() { return control_client_; }
private:
void ConnectToDriver() {
auto [client_end, server_end] = fidl::Endpoints<fuchsia_virtualaudio::Control>::Create();
driver_test_.RunInDriverContext(
[server_end = std::move(server_end)](VirtualAudio& driver) mutable {
fidl::BindServer(fdf::Dispatcher::GetCurrent()->async_dispatcher(), std::move(server_end),
&driver);
});
control_client_.Bind(std::move(client_end));
}
fdf_testing::BackgroundDriverTest<TestConfig> driver_test_;
fidl::SyncClient<fuchsia_virtualaudio::Control> control_client_;
};
// Verify that the virtual audio driver can start.
TEST_F(VirtualAudioTest, Start) {}
// Verify that the virtual audio driver can provide the default config for virtual audio composite
// devices but not other device types.
TEST_F(VirtualAudioTest, GetDefaultConfig) {
// Test composite default config.
{
fidl::Result result = control_client()->GetDefaultConfiguration(
{{.type = fuchsia_virtualaudio::DeviceType::kComposite}});
ASSERT_TRUE(result.is_ok());
auto& default_config = result->config();
ASSERT_EQ(default_config, VirtualAudioComposite::GetDefaultConfig());
}
// Test DAI default config.
{
fidl::Result result = control_client()->GetDefaultConfiguration(
{{.type = fuchsia_virtualaudio::DeviceType::kDai}});
ASSERT_TRUE(result.is_error());
ASSERT_TRUE(result.error_value().is_domain_error());
ASSERT_EQ(result.error_value().domain_error(), fuchsia_virtualaudio::Error::kNotSupported);
}
// Test stream config default config.
{
fidl::Result result = control_client()->GetDefaultConfiguration(
{{.type = fuchsia_virtualaudio::DeviceType::kStreamConfig}});
ASSERT_TRUE(result.is_error());
ASSERT_TRUE(result.error_value().is_domain_error());
ASSERT_EQ(result.error_value().domain_error(), fuchsia_virtualaudio::Error::kNotSupported);
}
// Test codec default config.
{
fidl::Result result = control_client()->GetDefaultConfiguration(
{{.type = fuchsia_virtualaudio::DeviceType::kDai}});
ASSERT_TRUE(result.is_error());
ASSERT_TRUE(result.error_value().is_domain_error());
ASSERT_EQ(result.error_value().domain_error(), fuchsia_virtualaudio::Error::kNotSupported);
}
}
} // namespace virtual_audio::test