diff --git a/tests/forwarding/BUILD.bazel b/tests/forwarding/BUILD.bazel index 2df932c7..6431e3be 100644 --- a/tests/forwarding/BUILD.bazel +++ b/tests/forwarding/BUILD.bazel @@ -81,7 +81,7 @@ cc_library( testonly = True, srcs = ["smoke_test.cc"], hdrs = ["smoke_test.h"], - visibility = ["//platforms/networking/gpins/testing/blackbox/p4:__pkg__"], + visibility = ["//visibility:public"], deps = [ ":p4_blackbox_fixture", ":test_data", @@ -93,7 +93,7 @@ cc_library( "//sai_p4/instantiations/google:sai_p4info_cc", "//sai_p4/instantiations/google:sai_pd_cc_proto", "//thinkit:mirror_testbed_fixture", - "@com_google_googletest//:gtest_main", + "@com_google_googletest//:gtest", ], alwayslink = True, ) diff --git a/tests/gnoi/BUILD.bazel b/tests/gnoi/BUILD.bazel index cba106dd..dbbdb955 100644 --- a/tests/gnoi/BUILD.bazel +++ b/tests/gnoi/BUILD.bazel @@ -28,11 +28,13 @@ cc_library( ], deps = [ "//gutil:status_matchers", + "//gutil:testing", "//thinkit:mirror_testbed_fixture", "@com_github_gnoi//diag:diag_cc_proto", "@com_github_google_glog//:glog", "@com_github_grpc_grpc//:grpc++", "@com_google_absl//absl/strings", + "@com_google_absl//absl/time", "@com_google_googletest//:gtest", "@com_google_protobuf//:protobuf", ], diff --git a/tests/gnoi/bert_tests.cc b/tests/gnoi/bert_tests.cc index 24450696..10411f67 100644 --- a/tests/gnoi/bert_tests.cc +++ b/tests/gnoi/bert_tests.cc @@ -14,54 +14,118 @@ #include "tests/gnoi/bert_tests.h" +#include "absl/strings/str_cat.h" #include "absl/strings/substitute.h" +#include "absl/time/clock.h" +#include "absl/time/time.h" #include "diag/diag.pb.h" #include "glog/logging.h" #include "google/protobuf/text_format.h" #include "gtest/gtest.h" #include "gutil/status_matchers.h" +#include "gutil/testing.h" namespace bert { -// Test StartBERT with test duration longer than maximum allowed duration. -TEST_P(BertTest, StartBertFailsIfTestDurationTooLong) { +using ::testing::HasSubstr; + +// Test StartBERT with invalid request parameters. +TEST_P(BertTest, StartBertFailsIfRequestParametersInvalid) { thinkit::Switch& sut = GetMirrorTestbed().Sut(); ASSERT_OK_AND_ASSIGN(auto sut_gnoi_diag_stub, sut.CreateGnoiDiagStub()); - // Set BERT test duration to more than 24 hours: (24 hours + 1 sec). - constexpr uint32_t kTesDurationInSecs = (60 * 60 * 24) + 1; + // TODO (b/182417612) : Select one admin state "up" port. + gnoi::diag::StartBERTRequest valid_request = + gutil::ParseProtoOrDie(R"PROTO( + bert_operation_id: "OpId-1" + per_port_requests { + interface { + origin: "openconfig" + elem { name: "interfaces" } + elem { + name: "interface" + key { key: "name" value: "Ethernet0" } + } + } + prbs_polynomial: PRBS_POLYNOMIAL_PRBS23 + test_duration_in_secs: 600 + } + )PROTO"); + // Set a unique BERT operation id using current time. + valid_request.set_bert_operation_id( + absl::StrCat("OpId-", absl::ToUnixMillis(absl::Now()))); + gnoi::diag::StartBERTResponse response; - // TODO (ashishksingh) : Before using the "Ethernet0", run sanity test to - // ensure the ports are oper-state "up" on the SUT switch. - const std::string kStartBertRequest = - absl::Substitute(R"PROTO( - bert_operation_id: "OpId-1" - per_port_requests { - interface { - origin: "openconfig" - elem { - name: "interface" - key { key: "name" value: "Ethernet0" } - } - } - prbs_polynomial: PRBS_POLYNOMIAL_PRBS23 - test_duration_in_secs: $0 - } - )PROTO", - kTesDurationInSecs); + // Case 1: BERT test duration is 0 secs. + { + gnoi::diag::StartBERTRequest too_short_time_request = valid_request; + too_short_time_request.mutable_per_port_requests(0) + ->set_test_duration_in_secs(0); + grpc::ClientContext context; + LOG(INFO) << "Sending StartBERT request: " + << too_short_time_request.ShortDebugString(); + EXPECT_THAT(gutil::GrpcStatusToAbslStatus(sut_gnoi_diag_stub->StartBERT( + &context, too_short_time_request, &response)), + gutil::StatusIs(absl::StatusCode::kInvalidArgument, + HasSubstr("is too short"))); + } - gnoi::diag::StartBERTRequest request; - ASSERT_TRUE(google::protobuf::TextFormat::ParseFromString(kStartBertRequest, - &request)); + // Case 2: BERT test duration is more than 24 hours: (24 hours + 1 sec). + { + gnoi::diag::StartBERTRequest too_long_time_request = valid_request; + too_long_time_request.mutable_per_port_requests(0) + ->set_test_duration_in_secs( + ToInt64Seconds(absl::Hours(24) + absl::Seconds(1))); + response.Clear(); + grpc::ClientContext context; + LOG(INFO) << "Sending StartBERT request: " + << too_long_time_request.ShortDebugString(); + EXPECT_THAT(gutil::GrpcStatusToAbslStatus(sut_gnoi_diag_stub->StartBERT( + &context, too_long_time_request, &response)), + gutil::StatusIs(absl::StatusCode::kInvalidArgument, + HasSubstr("is too long"))); + } - gnoi::diag::StartBERTResponse response; - grpc::ClientContext context; - LOG(INFO) << "Sending StartBERT request: " << request.ShortDebugString(); + // Case 3: Invalid PRBS polynomial order. + { + gnoi::diag::StartBERTRequest unset_prbs_polynomial_request = valid_request; + unset_prbs_polynomial_request.mutable_per_port_requests(0) + ->clear_prbs_polynomial(); + response.Clear(); + grpc::ClientContext context; + LOG(INFO) << "Sending StartBERT request: " + << unset_prbs_polynomial_request.ShortDebugString(); + EXPECT_THAT(gutil::GrpcStatusToAbslStatus(sut_gnoi_diag_stub->StartBERT( + &context, unset_prbs_polynomial_request, &response)), + gutil::StatusIs(absl::StatusCode::kInvalidArgument, + HasSubstr("PRBS polynomial is not set"))); + } - EXPECT_THAT(gutil::GrpcStatusToAbslStatus( - sut_gnoi_diag_stub->StartBERT(&context, request, &response)), - gutil::StatusIs(absl::StatusCode::kInvalidArgument, - testing::HasSubstr("too long"))); + // Case 4: Invalid interface. + { + gnoi::diag::StartBERTRequest invalid_interface_request = valid_request; + gnoi::types::Path invalid_interface = + gutil::ParseProtoOrDie( + R"PROTO( + origin: "openconfig" + elem { name: "interfaces" } + elem { + name: "interface" + key { key: "name" value: "InvalidPort" } + } + )PROTO"); + invalid_interface_request.mutable_per_port_requests(0) + ->mutable_interface() + ->CopyFrom(invalid_interface); + response.Clear(); + grpc::ClientContext context; + LOG(INFO) << "Sending StartBERT request: " + << invalid_interface_request.ShortDebugString(); + EXPECT_THAT(gutil::GrpcStatusToAbslStatus(sut_gnoi_diag_stub->StartBERT( + &context, invalid_interface_request, &response)), + gutil::StatusIs(absl::StatusCode::kInvalidArgument, + HasSubstr("Interface is invalid"))); + } } } // namespace bert