mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-20 06:43:34 +08:00
Merge branch 'master' into dsdl_review
This commit is contained in:
@@ -95,8 +95,9 @@ TEST(GlobalDataTypeRegistry, Basic)
|
||||
/*
|
||||
* Runtime registrations
|
||||
*/
|
||||
ASSERT_EQ(GlobalDataTypeRegistry::RegistResultOk,
|
||||
GlobalDataTypeRegistry::instance().regist<DataTypeAService>(DataTypeAService::DefaultDataTypeID));
|
||||
ASSERT_EQ(GlobalDataTypeRegistry::RegistrationResultOk,
|
||||
GlobalDataTypeRegistry::instance().registerDataType<DataTypeAService>(
|
||||
DataTypeAService::DefaultDataTypeID));
|
||||
|
||||
ASSERT_EQ(2, GlobalDataTypeRegistry::instance().getNumMessageTypes());
|
||||
ASSERT_EQ(1, GlobalDataTypeRegistry::instance().getNumServiceTypes());
|
||||
@@ -109,8 +110,10 @@ TEST(GlobalDataTypeRegistry, Basic)
|
||||
/*
|
||||
* Runtime re-registration
|
||||
*/
|
||||
ASSERT_EQ(GlobalDataTypeRegistry::RegistResultOk, GlobalDataTypeRegistry::instance().regist<DataTypeAService>(147));
|
||||
ASSERT_EQ(GlobalDataTypeRegistry::RegistResultOk, GlobalDataTypeRegistry::instance().regist<DataTypeB>(741));
|
||||
ASSERT_EQ(GlobalDataTypeRegistry::RegistrationResultOk,
|
||||
GlobalDataTypeRegistry::instance().registerDataType<DataTypeAService>(147));
|
||||
ASSERT_EQ(GlobalDataTypeRegistry::RegistrationResultOk,
|
||||
GlobalDataTypeRegistry::instance().registerDataType<DataTypeB>(741));
|
||||
|
||||
ASSERT_EQ(2, GlobalDataTypeRegistry::instance().getNumMessageTypes());
|
||||
ASSERT_EQ(1, GlobalDataTypeRegistry::instance().getNumServiceTypes());
|
||||
@@ -129,11 +132,11 @@ TEST(GlobalDataTypeRegistry, Basic)
|
||||
/*
|
||||
* These types will be necessary for the aggregate signature test
|
||||
*/
|
||||
ASSERT_EQ(GlobalDataTypeRegistry::RegistResultCollision,
|
||||
GlobalDataTypeRegistry::instance().regist<DataTypeC>(741)); // ID COLLISION
|
||||
ASSERT_EQ(GlobalDataTypeRegistry::RegistrationResultCollision,
|
||||
GlobalDataTypeRegistry::instance().registerDataType<DataTypeC>(741)); // ID COLLISION
|
||||
|
||||
ASSERT_EQ(GlobalDataTypeRegistry::RegistResultOk,
|
||||
GlobalDataTypeRegistry::instance().regist<DataTypeC>(DataTypeC::DefaultDataTypeID));
|
||||
ASSERT_EQ(GlobalDataTypeRegistry::RegistrationResultOk,
|
||||
GlobalDataTypeRegistry::instance().registerDataType<DataTypeC>(DataTypeC::DefaultDataTypeID));
|
||||
uavcan::DefaultDataTypeRegistrator<DataTypeD> reg_DataTypeD;
|
||||
|
||||
GlobalDataTypeRegistry::instance().getDataTypeIDMask(uavcan::DataTypeKindMessage, dtmask);
|
||||
@@ -154,20 +157,21 @@ TEST(GlobalDataTypeRegistry, Basic)
|
||||
*/
|
||||
GlobalDataTypeRegistry::instance().freeze();
|
||||
|
||||
ASSERT_EQ(GlobalDataTypeRegistry::RegistResultFrozen,
|
||||
GlobalDataTypeRegistry::instance().regist<DataTypeAService>(555)); // Rejected
|
||||
ASSERT_EQ(GlobalDataTypeRegistry::RegistrationResultFrozen,
|
||||
GlobalDataTypeRegistry::instance().registerDataType<DataTypeAService>(555)); // Rejected
|
||||
|
||||
ASSERT_EQ(GlobalDataTypeRegistry::RegistResultFrozen,
|
||||
GlobalDataTypeRegistry::instance().regist<DataTypeAMessage>(999)); // Rejected
|
||||
ASSERT_EQ(GlobalDataTypeRegistry::RegistrationResultFrozen,
|
||||
GlobalDataTypeRegistry::instance().registerDataType<DataTypeAMessage>(999)); // Rejected
|
||||
|
||||
ASSERT_EQ(GlobalDataTypeRegistry::RegistResultFrozen,
|
||||
GlobalDataTypeRegistry::instance().regist<DataTypeB>(888)); // Rejected
|
||||
ASSERT_EQ(GlobalDataTypeRegistry::RegistrationResultFrozen,
|
||||
GlobalDataTypeRegistry::instance().registerDataType<DataTypeB>(888)); // Rejected
|
||||
|
||||
/*
|
||||
* Searching
|
||||
*/
|
||||
const uavcan::DataTypeDescriptor* pdtd = NULL;
|
||||
ASSERT_FALSE(GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, "Nonexistent"));
|
||||
ASSERT_FALSE(GlobalDataTypeRegistry::instance().find("Nonexistent"));
|
||||
ASSERT_FALSE(GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, 987));
|
||||
// Asking for service, but this is a message:
|
||||
ASSERT_FALSE(GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindService, "my_namespace.DataTypeB"));
|
||||
@@ -175,12 +179,14 @@ TEST(GlobalDataTypeRegistry, Basic)
|
||||
|
||||
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage,
|
||||
"my_namespace.DataTypeB")));
|
||||
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find("my_namespace.DataTypeB")));
|
||||
ASSERT_EQ(extractDescriptor<DataTypeB>(741), *pdtd);
|
||||
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, 741)));
|
||||
ASSERT_EQ(extractDescriptor<DataTypeB>(741), *pdtd);
|
||||
|
||||
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage,
|
||||
"my_namespace.DataTypeA")));
|
||||
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find("my_namespace.DataTypeA")));
|
||||
ASSERT_EQ(extractDescriptor<DataTypeAMessage>(), *pdtd);
|
||||
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, uavcan::DataTypeID(0))));
|
||||
ASSERT_EQ(extractDescriptor<DataTypeAMessage>(), *pdtd);
|
||||
|
||||
@@ -23,22 +23,39 @@ static bool validateDataTypeInfoResponse(const std::auto_ptr<ServiceCallResult<G
|
||||
{
|
||||
if (!resp.get())
|
||||
{
|
||||
std::cout << "Null response" << std::endl;
|
||||
return false;
|
||||
}
|
||||
if (!resp->isSuccessful())
|
||||
{
|
||||
std::cout << "Request was not successful" << std::endl;
|
||||
return false;
|
||||
}
|
||||
if (resp->response.name != DataType::getDataTypeFullName())
|
||||
{
|
||||
std::cout << "Type name mismatch: '"
|
||||
<< resp->response.name.c_str() << "' '"
|
||||
<< DataType::getDataTypeFullName() << "'" << std::endl;
|
||||
return false;
|
||||
}
|
||||
if (DataType::getDataTypeSignature().get() != resp->response.signature)
|
||||
{
|
||||
std::cout << "Signature mismatch" << std::endl;
|
||||
return false;
|
||||
}
|
||||
if (resp->response.mask != mask)
|
||||
{
|
||||
std::cout << "Mask mismatch" << std::endl;
|
||||
return false;
|
||||
}
|
||||
if (resp->response.kind.value != DataType::DataTypeKind)
|
||||
{
|
||||
std::cout << "Kind mismatch" << std::endl;
|
||||
return false;
|
||||
}
|
||||
if (resp->response.id != DataType::DefaultDataTypeID)
|
||||
{
|
||||
std::cout << "DTID mismatch" << std::endl;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -75,9 +92,25 @@ TEST(DataTypeInfoProvider, Basic)
|
||||
GetDataTypeInfo::Response::MASK_SERVING));
|
||||
ASSERT_EQ(1, gdti_cln.collector.result->server_node_id.get());
|
||||
|
||||
/*
|
||||
* GetDataTypeInfo request for GetDataTypeInfo by name
|
||||
*/
|
||||
gdti_request = GetDataTypeInfo::Request();
|
||||
gdti_request.id = 999; // Intentionally wrong
|
||||
gdti_request.kind.value = DataTypeKind::MESSAGE; // Intentionally wrong
|
||||
gdti_request.name = "uavcan.protocol.GetDataTypeInfo";
|
||||
ASSERT_LE(0, gdti_cln.call(1, gdti_request));
|
||||
nodes.spinBoth(MonotonicDuration::fromMSec(10));
|
||||
|
||||
ASSERT_TRUE(validateDataTypeInfoResponse<GetDataTypeInfo>(gdti_cln.collector.result,
|
||||
GetDataTypeInfo::Response::MASK_KNOWN |
|
||||
GetDataTypeInfo::Response::MASK_SERVING));
|
||||
ASSERT_EQ(1, gdti_cln.collector.result->server_node_id.get());
|
||||
|
||||
/*
|
||||
* GetDataTypeInfo request for NodeStatus - not used yet
|
||||
*/
|
||||
gdti_request = GetDataTypeInfo::Request();
|
||||
gdti_request.id = NodeStatus::DefaultDataTypeID;
|
||||
gdti_request.kind.value = DataTypeKind::MESSAGE;
|
||||
ASSERT_LE(0, gdti_cln.call(1, gdti_request));
|
||||
@@ -107,15 +140,37 @@ TEST(DataTypeInfoProvider, Basic)
|
||||
/*
|
||||
* Requesting a non-existent type
|
||||
*/
|
||||
gdti_request = GetDataTypeInfo::Request();
|
||||
gdti_request.id = ComputeAggregateTypeSignature::DefaultDataTypeID;
|
||||
gdti_request.kind.value = 0xFF; // INVALID VALUE
|
||||
gdti_request.kind.value = 3; // INVALID VALUE
|
||||
ASSERT_LE(0, gdti_cln.call(1, gdti_request));
|
||||
nodes.spinBoth(MonotonicDuration::fromMSec(10));
|
||||
|
||||
ASSERT_TRUE(gdti_cln.collector.result.get());
|
||||
ASSERT_TRUE(gdti_cln.collector.result->isSuccessful());
|
||||
ASSERT_EQ(1, gdti_cln.collector.result->server_node_id.get());
|
||||
ASSERT_TRUE(gdti_cln.collector.result->response == GetDataTypeInfo::Response()); // Empty response
|
||||
ASSERT_EQ(0, gdti_cln.collector.result->response.mask);
|
||||
ASSERT_TRUE(gdti_cln.collector.result->response.name.empty()); // Empty name
|
||||
ASSERT_EQ(gdti_request.id, gdti_cln.collector.result->response.id);
|
||||
ASSERT_EQ(gdti_request.kind.value, gdti_cln.collector.result->response.kind.value);
|
||||
|
||||
/*
|
||||
* Requesting a non-existent type by name
|
||||
*/
|
||||
gdti_request = GetDataTypeInfo::Request();
|
||||
gdti_request.id = 999; // Intentionally wrong
|
||||
gdti_request.kind.value = 3; // Intentionally wrong
|
||||
gdti_request.name = "uavcan.equipment.gnss.Fix";
|
||||
ASSERT_LE(0, gdti_cln.call(1, gdti_request));
|
||||
nodes.spinBoth(MonotonicDuration::fromMSec(10));
|
||||
|
||||
ASSERT_TRUE(gdti_cln.collector.result.get());
|
||||
ASSERT_TRUE(gdti_cln.collector.result->isSuccessful());
|
||||
ASSERT_EQ(1, gdti_cln.collector.result->server_node_id.get());
|
||||
ASSERT_EQ(0, gdti_cln.collector.result->response.mask);
|
||||
ASSERT_EQ("uavcan.equipment.gnss.Fix", gdti_cln.collector.result->response.name);
|
||||
ASSERT_EQ(0, gdti_cln.collector.result->response.id);
|
||||
ASSERT_EQ(0, gdti_cln.collector.result->response.kind.value);
|
||||
|
||||
/*
|
||||
* ComputeAggregateTypeSignature test
|
||||
|
||||
Reference in New Issue
Block a user