Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(211)

Unified Diff: webrtc/api/rtcstats_integrationtest.cc

Issue 2593623002: Improve rtcstats_integrationtest.cc by sanity checking values. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/rtcstats_integrationtest.cc
diff --git a/webrtc/api/rtcstats_integrationtest.cc b/webrtc/api/rtcstats_integrationtest.cc
index c28130fe8a692558116b401eb2887ef3149454ae..0ffffb10619a7acceebb3cef40491be41331921d 100644
--- a/webrtc/api/rtcstats_integrationtest.cc
+++ b/webrtc/api/rtcstats_integrationtest.cc
@@ -8,6 +8,7 @@
* be found in the AUTHORS file in the root of the source tree.
*/
+#include <functional>
#include <set>
#include <vector>
@@ -121,18 +122,26 @@ class RTCStatsVerifier {
void TestMemberIsDefined(const RTCStatsMemberInterface& member) {
EXPECT_TRUE(member.is_defined()) <<
- stats_->type() << "." << member.name() << "[" << stats_->id() <<
- "] was undefined.";
+ stats_->type() << "." << member.name() << "[" << stats_->id() <<
+ "] was undefined.";
MarkMemberTested(member, member.is_defined());
}
void TestMemberIsUndefined(const RTCStatsMemberInterface& member) {
EXPECT_FALSE(member.is_defined()) <<
- stats_->type() << "." << member.name() << "[" << stats_->id() <<
- "] was defined (" << member.ValueToString() << ").";
+ stats_->type() << "." << member.name() << "[" << stats_->id() <<
+ "] was defined (" << member.ValueToString() << ").";
MarkMemberTested(member, !member.is_defined());
}
+ void TestMemberIsPositive(const RTCStatsMemberInterface& member) {
+ TestMemberSign(member, "positive", [](int sign) { return sign == 1; });
hta-webrtc 2016/12/20 15:19:18 This seems like a huge amount of machinery for say
hbos 2016/12/21 10:41:14 Not quite, I have to do MarkMemberTested and EXPEC
+ }
+
+ void TestMemberIsNonNegative(const RTCStatsMemberInterface& member) {
+ TestMemberSign(member, "non-negative", [](int sign) { return sign >= 0; });
+ }
+
void TestMemberIsIDReference(
const RTCStatsMemberInterface& member,
const char* expected_type) {
@@ -157,6 +166,62 @@ class RTCStatsVerifier {
}
private:
+ void TestMemberSign(const RTCStatsMemberInterface& member,
+ const char* sign_requirement,
+ std::function<bool(int)> sign_check) {
+ EXPECT_TRUE(member.is_defined()) <<
+ stats_->type() << "." << member.name() << "[" << stats_->id() <<
+ "] was undefined.";
+ if (!member.is_defined()) {
+ MarkMemberTested(member, false);
+ return;
+ }
+ rtc::Optional<int> sign;
+ switch (member.type()) {
+ case RTCStatsMemberInterface::kInt32:
+ sign = rtc::Optional<int>(Sign(
+ **static_cast<const RTCStatsMember<int32_t>*>(&member)));
+ break;
+ case RTCStatsMemberInterface::kUint32:
+ sign = rtc::Optional<int>(Sign(
+ **static_cast<const RTCStatsMember<uint32_t>*>(&member)));
+ break;
+ case RTCStatsMemberInterface::kInt64:
+ sign = rtc::Optional<int>(Sign(
+ **static_cast<const RTCStatsMember<int64_t>*>(&member)));
+ break;
+ case RTCStatsMemberInterface::kUint64:
+ sign = rtc::Optional<int>(Sign(
+ **static_cast<const RTCStatsMember<uint64_t>*>(&member)));
+ break;
+ case RTCStatsMemberInterface::kDouble:
+ sign = rtc::Optional<int>(Sign(
+ **static_cast<const RTCStatsMember<double>*>(&member)));
+ break;
+ default:
+ break;
+ }
+ if (!sign) {
+ EXPECT_TRUE(false) <<
+ stats_->type() << "." << member.name() << "[" << stats_->id() <<
+ "] is not " << sign_requirement << " because it is not a numeric " <<
+ "value (" << member.ValueToString() << ").";
+ MarkMemberTested(member, false);
+ return;
+ }
+ bool passed_sign_check = sign_check(*sign);
+ EXPECT_TRUE(passed_sign_check) <<
+ stats_->type() << "." << member.name() << "[" << stats_->id() <<
+ "] is not " << sign_requirement << " (" << member.ValueToString() <<
+ ").";
+ MarkMemberTested(member, passed_sign_check);
+ }
+
+ template<typename T>
+ int Sign(T value) {
+ return (value > T(0)) - (value < T(0));
+ }
+
void TestMemberIsIDReference(
const RTCStatsMemberInterface& member,
const char* expected_type,
@@ -297,7 +362,7 @@ class RTCStatsReportVerifier {
RTCStatsVerifier verifier(report_, &codec);
verifier.TestMemberIsDefined(codec.payload_type);
verifier.TestMemberIsDefined(codec.codec);
- verifier.TestMemberIsDefined(codec.clock_rate);
+ verifier.TestMemberIsPositive(codec.clock_rate);
verifier.TestMemberIsUndefined(codec.channels);
verifier.TestMemberIsUndefined(codec.parameters);
verifier.TestMemberIsUndefined(codec.implementation);
@@ -311,10 +376,10 @@ class RTCStatsReportVerifier {
verifier.TestMemberIsDefined(data_channel.protocol);
verifier.TestMemberIsDefined(data_channel.datachannelid);
verifier.TestMemberIsDefined(data_channel.state);
- verifier.TestMemberIsDefined(data_channel.messages_sent);
- verifier.TestMemberIsDefined(data_channel.bytes_sent);
- verifier.TestMemberIsDefined(data_channel.messages_received);
- verifier.TestMemberIsDefined(data_channel.bytes_received);
+ verifier.TestMemberIsNonNegative(data_channel.messages_sent);
+ verifier.TestMemberIsNonNegative(data_channel.bytes_sent);
+ verifier.TestMemberIsNonNegative(data_channel.messages_received);
+ verifier.TestMemberIsNonNegative(data_channel.bytes_received);
return verifier.ExpectAllMembersSuccessfullyTested();
}
@@ -332,20 +397,20 @@ class RTCStatsReportVerifier {
verifier.TestMemberIsUndefined(candidate_pair.nominated);
verifier.TestMemberIsDefined(candidate_pair.writable);
verifier.TestMemberIsUndefined(candidate_pair.readable);
- verifier.TestMemberIsDefined(candidate_pair.bytes_sent);
- verifier.TestMemberIsDefined(candidate_pair.bytes_received);
+ verifier.TestMemberIsNonNegative(candidate_pair.bytes_sent);
+ verifier.TestMemberIsNonNegative(candidate_pair.bytes_received);
verifier.TestMemberIsUndefined(candidate_pair.total_round_trip_time);
- verifier.TestMemberIsDefined(candidate_pair.current_round_trip_time);
+ verifier.TestMemberIsNonNegative(candidate_pair.current_round_trip_time);
verifier.TestMemberIsUndefined(candidate_pair.available_outgoing_bitrate);
verifier.TestMemberIsUndefined(candidate_pair.available_incoming_bitrate);
- verifier.TestMemberIsDefined(candidate_pair.requests_received);
- verifier.TestMemberIsDefined(candidate_pair.requests_sent);
- verifier.TestMemberIsDefined(candidate_pair.responses_received);
- verifier.TestMemberIsDefined(candidate_pair.responses_sent);
+ verifier.TestMemberIsNonNegative(candidate_pair.requests_received);
+ verifier.TestMemberIsNonNegative(candidate_pair.requests_sent);
+ verifier.TestMemberIsNonNegative(candidate_pair.responses_received);
+ verifier.TestMemberIsNonNegative(candidate_pair.responses_sent);
verifier.TestMemberIsUndefined(candidate_pair.retransmissions_received);
verifier.TestMemberIsUndefined(candidate_pair.retransmissions_sent);
verifier.TestMemberIsUndefined(candidate_pair.consent_requests_received);
- verifier.TestMemberIsDefined(candidate_pair.consent_requests_sent);
+ verifier.TestMemberIsNonNegative(candidate_pair.consent_requests_sent);
verifier.TestMemberIsUndefined(candidate_pair.consent_responses_received);
verifier.TestMemberIsUndefined(candidate_pair.consent_responses_sent);
return verifier.ExpectAllMembersSuccessfullyTested();
@@ -355,10 +420,10 @@ class RTCStatsReportVerifier {
const RTCIceCandidateStats& candidate) {
RTCStatsVerifier verifier(report_, &candidate);
verifier.TestMemberIsDefined(candidate.ip);
- verifier.TestMemberIsDefined(candidate.port);
+ verifier.TestMemberIsNonNegative(candidate.port);
verifier.TestMemberIsDefined(candidate.protocol);
verifier.TestMemberIsDefined(candidate.candidate_type);
- verifier.TestMemberIsDefined(candidate.priority);
+ verifier.TestMemberIsNonNegative(candidate.priority);
verifier.TestMemberIsUndefined(candidate.url);
return verifier.ExpectAllMembersSuccessfullyTested();
}
@@ -393,8 +458,8 @@ class RTCStatsReportVerifier {
// Video or audio media stream track?
if (media_stream_track.frame_width.is_defined()) {
// Video-only members
- verifier.TestMemberIsDefined(media_stream_track.frame_width);
- verifier.TestMemberIsDefined(media_stream_track.frame_height);
+ verifier.TestMemberIsNonNegative(media_stream_track.frame_width);
+ verifier.TestMemberIsNonNegative(media_stream_track.frame_height);
verifier.TestMemberIsUndefined(media_stream_track.frames_per_second);
verifier.TestMemberIsUndefined(media_stream_track.frames_sent);
verifier.TestMemberIsUndefined(media_stream_track.frames_received);
@@ -436,8 +501,8 @@ class RTCStatsReportVerifier {
bool VerifyRTCPeerConnectionStats(
const RTCPeerConnectionStats& peer_connection) {
RTCStatsVerifier verifier(report_, &peer_connection);
- verifier.TestMemberIsDefined(peer_connection.data_channels_opened);
- verifier.TestMemberIsDefined(peer_connection.data_channels_closed);
+ verifier.TestMemberIsNonNegative(peer_connection.data_channels_opened);
+ verifier.TestMemberIsNonNegative(peer_connection.data_channels_closed);
return verifier.ExpectAllMembersSuccessfullyTested();
}
@@ -452,9 +517,9 @@ class RTCStatsReportVerifier {
stream.transport_id, RTCTransportStats::kType);
verifier->TestMemberIsIDReference(stream.codec_id, RTCCodecStats::kType);
if (stream.media_type.is_defined() && *stream.media_type == "video") {
- verifier->TestMemberIsDefined(stream.fir_count);
- verifier->TestMemberIsDefined(stream.pli_count);
- verifier->TestMemberIsDefined(stream.nack_count);
+ verifier->TestMemberIsNonNegative(stream.fir_count);
+ verifier->TestMemberIsNonNegative(stream.pli_count);
+ verifier->TestMemberIsNonNegative(stream.nack_count);
} else {
verifier->TestMemberIsUndefined(stream.fir_count);
verifier->TestMemberIsUndefined(stream.pli_count);
@@ -467,16 +532,16 @@ class RTCStatsReportVerifier {
const RTCInboundRTPStreamStats& inbound_stream) {
RTCStatsVerifier verifier(report_, &inbound_stream);
VerifyRTCRTPStreamStats(inbound_stream, &verifier);
- verifier.TestMemberIsDefined(inbound_stream.packets_received);
- verifier.TestMemberIsDefined(inbound_stream.bytes_received);
- verifier.TestMemberIsDefined(inbound_stream.packets_lost);
+ verifier.TestMemberIsNonNegative(inbound_stream.packets_received);
+ verifier.TestMemberIsNonNegative(inbound_stream.bytes_received);
+ verifier.TestMemberIsNonNegative(inbound_stream.packets_lost);
if (inbound_stream.media_type.is_defined() &&
*inbound_stream.media_type == "video") {
verifier.TestMemberIsUndefined(inbound_stream.jitter);
} else {
- verifier.TestMemberIsDefined(inbound_stream.jitter);
+ verifier.TestMemberIsNonNegative(inbound_stream.jitter);
}
- verifier.TestMemberIsDefined(inbound_stream.fraction_lost);
+ verifier.TestMemberIsNonNegative(inbound_stream.fraction_lost);
verifier.TestMemberIsUndefined(inbound_stream.packets_discarded);
verifier.TestMemberIsUndefined(inbound_stream.packets_repaired);
verifier.TestMemberIsUndefined(inbound_stream.burst_packets_lost);
@@ -494,8 +559,8 @@ class RTCStatsReportVerifier {
const RTCOutboundRTPStreamStats& outbound_stream) {
RTCStatsVerifier verifier(report_, &outbound_stream);
VerifyRTCRTPStreamStats(outbound_stream, &verifier);
- verifier.TestMemberIsDefined(outbound_stream.packets_sent);
- verifier.TestMemberIsDefined(outbound_stream.bytes_sent);
+ verifier.TestMemberIsNonNegative(outbound_stream.packets_sent);
+ verifier.TestMemberIsNonNegative(outbound_stream.bytes_sent);
verifier.TestMemberIsUndefined(outbound_stream.target_bitrate);
// TODO(hbos): Defined in video but not audio case. Why? crbug.com/669877
verifier.MarkMemberTested(outbound_stream.round_trip_time, true);
@@ -505,8 +570,8 @@ class RTCStatsReportVerifier {
bool VerifyRTCTransportStats(
const RTCTransportStats& transport) {
RTCStatsVerifier verifier(report_, &transport);
- verifier.TestMemberIsDefined(transport.bytes_sent);
- verifier.TestMemberIsDefined(transport.bytes_received);
+ verifier.TestMemberIsNonNegative(transport.bytes_sent);
+ verifier.TestMemberIsNonNegative(transport.bytes_received);
verifier.TestMemberIsOptionalIDReference(
transport.rtcp_transport_stats_id, RTCTransportStats::kType);
verifier.TestMemberIsDefined(transport.active_connection);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698