Milestone 3
This commit is contained in:
parent
866f0419ad
commit
691eb327d0
6 changed files with 507 additions and 24 deletions
|
|
@ -216,3 +216,97 @@ TEST_CASE("autoconnect reconnects after forced disconnect") {
|
|||
auto nodes_after = result.value->ListNodes();
|
||||
REQUIRE(nodes_after.ok());
|
||||
}
|
||||
|
||||
TEST_CASE("link creation validates ports and directions") {
|
||||
auto result = warppipe::Client::Create(DefaultOptions());
|
||||
if (!result.ok()) {
|
||||
SUCCEED("PipeWire unavailable");
|
||||
return;
|
||||
}
|
||||
|
||||
warppipe::NodeInfo node;
|
||||
node.id = warppipe::NodeId{600001};
|
||||
node.name = "warppipe-link-node";
|
||||
node.media_class = "Audio/Sink";
|
||||
REQUIRE(result.value->Test_InsertNode(node).ok());
|
||||
|
||||
warppipe::PortInfo out_port;
|
||||
out_port.id = warppipe::PortId{600002};
|
||||
out_port.node = node.id;
|
||||
out_port.name = "out";
|
||||
out_port.is_input = false;
|
||||
REQUIRE(result.value->Test_InsertPort(out_port).ok());
|
||||
|
||||
warppipe::PortInfo in_port;
|
||||
in_port.id = warppipe::PortId{600003};
|
||||
in_port.node = node.id;
|
||||
in_port.name = "in";
|
||||
in_port.is_input = true;
|
||||
REQUIRE(result.value->Test_InsertPort(in_port).ok());
|
||||
|
||||
auto invalid = result.value->CreateLink(warppipe::PortId{0}, in_port.id, warppipe::LinkOptions{});
|
||||
REQUIRE_FALSE(invalid.ok());
|
||||
REQUIRE(invalid.status.code == warppipe::StatusCode::kInvalidArgument);
|
||||
|
||||
auto missing_out = result.value->CreateLink(warppipe::PortId{123456}, in_port.id, warppipe::LinkOptions{});
|
||||
REQUIRE_FALSE(missing_out.ok());
|
||||
REQUIRE(missing_out.status.code == warppipe::StatusCode::kNotFound);
|
||||
|
||||
auto missing_in = result.value->CreateLink(out_port.id, warppipe::PortId{123457}, warppipe::LinkOptions{});
|
||||
REQUIRE_FALSE(missing_in.ok());
|
||||
REQUIRE(missing_in.status.code == warppipe::StatusCode::kNotFound);
|
||||
|
||||
auto mismatch = result.value->CreateLink(in_port.id, out_port.id, warppipe::LinkOptions{});
|
||||
REQUIRE_FALSE(mismatch.ok());
|
||||
REQUIRE(mismatch.status.code == warppipe::StatusCode::kInvalidArgument);
|
||||
}
|
||||
|
||||
TEST_CASE("CreateLinkByName validates missing names") {
|
||||
auto result = warppipe::Client::Create(DefaultOptions());
|
||||
if (!result.ok()) {
|
||||
SUCCEED("PipeWire unavailable");
|
||||
return;
|
||||
}
|
||||
|
||||
auto invalid = result.value->CreateLinkByName("", "out", "node", "in", warppipe::LinkOptions{});
|
||||
REQUIRE_FALSE(invalid.ok());
|
||||
REQUIRE(invalid.status.code == warppipe::StatusCode::kInvalidArgument);
|
||||
}
|
||||
|
||||
TEST_CASE("duplicate links are rejected") {
|
||||
auto result = warppipe::Client::Create(DefaultOptions());
|
||||
if (!result.ok()) {
|
||||
SUCCEED("PipeWire unavailable");
|
||||
return;
|
||||
}
|
||||
|
||||
warppipe::NodeInfo node;
|
||||
node.id = warppipe::NodeId{600101};
|
||||
node.name = "warppipe-link-dup";
|
||||
node.media_class = "Audio/Sink";
|
||||
REQUIRE(result.value->Test_InsertNode(node).ok());
|
||||
|
||||
warppipe::PortInfo out_port;
|
||||
out_port.id = warppipe::PortId{600102};
|
||||
out_port.node = node.id;
|
||||
out_port.name = "out";
|
||||
out_port.is_input = false;
|
||||
REQUIRE(result.value->Test_InsertPort(out_port).ok());
|
||||
|
||||
warppipe::PortInfo in_port;
|
||||
in_port.id = warppipe::PortId{600103};
|
||||
in_port.node = node.id;
|
||||
in_port.name = "in";
|
||||
in_port.is_input = true;
|
||||
REQUIRE(result.value->Test_InsertPort(in_port).ok());
|
||||
|
||||
auto first = result.value->CreateLink(out_port.id, in_port.id, warppipe::LinkOptions{});
|
||||
if (!first.ok()) {
|
||||
SUCCEED("Link factory unavailable");
|
||||
return;
|
||||
}
|
||||
|
||||
auto second = result.value->CreateLink(out_port.id, in_port.id, warppipe::LinkOptions{});
|
||||
REQUIRE_FALSE(second.ok());
|
||||
REQUIRE(second.status.code == warppipe::StatusCode::kInvalidArgument);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue