Skip to content

Commit

Permalink
Making lossy tests deterministic [5073] (#481)
Browse files Browse the repository at this point in the history
* Refs #5073. Making package drop deterministic.

* Refs #5073. Removing unused test_RTCPMessageManager.
  • Loading branch information
MiguelCompany authored and richiware committed Apr 12, 2019
1 parent d155904 commit fdf1c9d
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 154 deletions.
1 change: 0 additions & 1 deletion include/fastrtps/transport/TCPTransportInterface.h
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,6 @@ class TCPTransportInterface : public TransportInterface

public:
friend class RTCPMessageManager;
friend class test_RTCPMessageManager;

virtual ~TCPTransportInterface();

Expand Down
61 changes: 0 additions & 61 deletions include/fastrtps/transport/tcp/test_RTCPMessageManager.h

This file was deleted.

24 changes: 19 additions & 5 deletions include/fastrtps/transport/test_UDPv4Transport.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,19 +48,33 @@ class test_UDPv4Transport : public UDPv4Transport
RTPS_DllAPI static uint32_t test_UDPv4Transport_DropLogLength;

private:
uint8_t drop_data_messages_percentage_;

struct PercentageData
{
PercentageData(uint8_t percent)
: percentage(percent)
, accumulator(0)
{
}

uint8_t percentage;
uint8_t accumulator;
};

PercentageData drop_data_messages_percentage_;
bool drop_participant_builtin_topic_data_;
bool drop_publication_builtin_topic_data_;
bool drop_subscription_builtin_topic_data_;
uint8_t drop_data_frag_messages_percentage_;
uint8_t drop_heartbeat_messages_percentage_;
uint8_t drop_ack_nack_messages_percentage_;
PercentageData drop_data_frag_messages_percentage_;
PercentageData drop_heartbeat_messages_percentage_;
PercentageData drop_ack_nack_messages_percentage_;
std::vector<SequenceNumber_t> sequence_number_data_messages_to_drop_;
uint8_t percentage_of_messages_to_drop_;
PercentageData percentage_of_messages_to_drop_;

bool log_drop(const octet* buffer, uint32_t size);
bool packet_should_drop(const octet* send_buffer, uint32_t send_buffer_size);
bool random_chance_drop();
bool should_be_dropped(PercentageData* percentage);
};

} // namespace rtps
Expand Down
1 change: 0 additions & 1 deletion src/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@ set(${PROJECT_NAME}_source_files
transport/tcp/TCPControlMessage.cpp
transport/tcp/RTCPMessageManager.cpp
transport/timedevent/TCPKeepAliveEvent.cpp
#transport/tcp/test_RTCPMessageManager.cpp

types/AnnotationDescriptor.cpp
types/AnnotationParameterValue.cpp
Expand Down
80 changes: 0 additions & 80 deletions src/cpp/transport/tcp/test_RTCPMessageManager.cpp

This file was deleted.

23 changes: 17 additions & 6 deletions src/cpp/transport/test_UDPv4Transport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ test_UDPv4Transport::test_UDPv4Transport(const test_UDPv4TransportDescriptor& de
UDPv4Transport::mReceiveBufferSize = descriptor.receiveBufferSize;
test_UDPv4Transport_DropLog.clear();
test_UDPv4Transport_DropLogLength = descriptor.dropLogLength;
srand(static_cast<unsigned>(time(NULL)));
}

test_UDPv4TransportDescriptor::test_UDPv4TransportDescriptor():
Expand Down Expand Up @@ -161,13 +160,13 @@ bool test_UDPv4Transport::packet_should_drop(const octet* send_buffer, uint32_t
(!drop_subscription_builtin_topic_data_ && writer_id == c_EntityId_SEDPSubWriter))
return false;

if(drop_data_messages_percentage_ > (rand()%100))
if(should_be_dropped(&drop_data_messages_percentage_))
return true;

break;

case ACKNACK:
if(drop_ack_nack_messages_percentage_ > (rand()%100))
if(should_be_dropped(&drop_ack_nack_messages_percentage_))
return true;

break;
Expand All @@ -177,13 +176,13 @@ bool test_UDPv4Transport::packet_should_drop(const octet* send_buffer, uint32_t
CDRMessage::readInt32(&cdrMessage, &sequence_number.high);
CDRMessage::readUInt32(&cdrMessage, &sequence_number.low);
cdrMessage.pos = old_pos;
if(drop_heartbeat_messages_percentage_ > (rand()%100))
if(should_be_dropped(&drop_heartbeat_messages_percentage_))
return true;

break;

case DATA_FRAG:
if(drop_data_frag_messages_percentage_ > (rand()%100))
if(should_be_dropped(&drop_data_frag_messages_percentage_))
return true;

break;
Expand Down Expand Up @@ -227,7 +226,19 @@ bool test_UDPv4Transport::log_drop(const octet* buffer, uint32_t size)

bool test_UDPv4Transport::random_chance_drop()
{
return percentage_of_messages_to_drop_ > (rand()%100);
return should_be_dropped(&percentage_of_messages_to_drop_);
}

bool test_UDPv4Transport::should_be_dropped(PercentageData* percent)
{
percent->accumulator += percent->percentage;
if (percent->accumulator >= 100u)
{
percent->accumulator -= 100u;
return true;
}

return false;
}

} // namespace rtps
Expand Down

0 comments on commit fdf1c9d

Please sign in to comment.