From 76656f3d24ba9bed2f1f5760c356266869a9f9e5 Mon Sep 17 00:00:00 2001 From: kishanps Date: Mon, 8 Jan 2024 22:21:52 -0800 Subject: [PATCH 1/2] [Thinkit] Implement the various flow programmers for PINs NSF tests. PiperOrigin-RevId: 596809160 --- .../system/nsf/flow_programmers/BUILD.bazel | 53 +++++++++++++++++++ .../fuzzer_replay_programmer.h | 37 +++++++++++++ .../nsf/flow_programmers/replay_programmer.h | 37 +++++++++++++ .../nsf/flow_programmers/static_programmer.h | 37 +++++++++++++ 4 files changed, 164 insertions(+) create mode 100644 tests/integration/system/nsf/flow_programmers/BUILD.bazel create mode 100644 tests/integration/system/nsf/flow_programmers/fuzzer_replay_programmer.h create mode 100644 tests/integration/system/nsf/flow_programmers/replay_programmer.h create mode 100644 tests/integration/system/nsf/flow_programmers/static_programmer.h diff --git a/tests/integration/system/nsf/flow_programmers/BUILD.bazel b/tests/integration/system/nsf/flow_programmers/BUILD.bazel new file mode 100644 index 00000000..9a54ed61 --- /dev/null +++ b/tests/integration/system/nsf/flow_programmers/BUILD.bazel @@ -0,0 +1,53 @@ +# Copyright 2024 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# This package implements the various flow programmers for PINs NSF tests. + +package( + default_visibility = ["//visibility:public"], + licenses = ["notice"], +) + +cc_library( + name = "static_programmer", + testonly = True, + hdrs = ["static_programmer.h"], + deps = [ + "//tests/integration/system/nsf/interfaces:flow_programmer", + "//thinkit:generic_testbed", + "@com_google_absl//absl/status", + ], +) + +cc_library( + name = "fuzzer_replay_programmer", + testonly = True, + hdrs = ["fuzzer_replay_programmer.h"], + deps = [ + "//tests/integration/system/nsf/interfaces:flow_programmer", + "//thinkit:generic_testbed", + "@com_google_absl//absl/status", + ], +) + +cc_library( + name = "replay_programmer", + testonly = True, + hdrs = ["replay_programmer.h"], + deps = [ + "//tests/integration/system/nsf/interfaces:flow_programmer", + "//thinkit:generic_testbed", + "@com_google_absl//absl/status", + ], +) diff --git a/tests/integration/system/nsf/flow_programmers/fuzzer_replay_programmer.h b/tests/integration/system/nsf/flow_programmers/fuzzer_replay_programmer.h new file mode 100644 index 00000000..9dbcd325 --- /dev/null +++ b/tests/integration/system/nsf/flow_programmers/fuzzer_replay_programmer.h @@ -0,0 +1,37 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef PINS_TESTS_INTEGRATION_SYSTEM_NSF_FLOW_PROGRAMMERS_FUZZER_REPLAY_PROGRAMMER_H_ +#define PINS_TESTS_INTEGRATION_SYSTEM_NSF_FLOW_PROGRAMMERS_FUZZER_REPLAY_PROGRAMMER_H_ + +#include "absl/status/status.h" +#include "tests/integration/system/nsf/interfaces/flow_programmer.h" +#include "thinkit/generic_testbed.h" + +namespace pins_test { + +class FuzzerReplayProgrammer : public FlowProgrammer { + public: + absl::Status ProgramFlows(IpVersion ip_version, Protocol protocol, + thinkit::GenericTestbed& testbed) override { + return absl::OkStatus(); + }; + absl::Status ClearFlows(thinkit::GenericTestbed& testbed) override { + return absl::OkStatus(); + }; +}; + +} // namespace pins_test + +#endif // PINS_TESTS_INTEGRATION_SYSTEM_NSF_FLOW_PROGRAMMERS_FUZZER_REPLAY_PROGRAMMER_H_ diff --git a/tests/integration/system/nsf/flow_programmers/replay_programmer.h b/tests/integration/system/nsf/flow_programmers/replay_programmer.h new file mode 100644 index 00000000..1dda29a2 --- /dev/null +++ b/tests/integration/system/nsf/flow_programmers/replay_programmer.h @@ -0,0 +1,37 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef PINS_TESTS_INTEGRATION_SYSTEM_NSF_FLOW_PROGRAMMERS_REPLAY_PROGRAMMER_H_ +#define PINS_TESTS_INTEGRATION_SYSTEM_NSF_FLOW_PROGRAMMERS_REPLAY_PROGRAMMER_H_ + +#include "absl/status/status.h" +#include "tests/integration/system/nsf/interfaces/flow_programmer.h" +#include "thinkit/generic_testbed.h" + +namespace pins_test { + +class ReplayProgrammer : public FlowProgrammer { + public: + absl::Status ProgramFlows(IpVersion ip_version, Protocol protocol, + thinkit::GenericTestbed& testbed) override { + return absl::OkStatus(); + }; + absl::Status ClearFlows(thinkit::GenericTestbed& testbed) override { + return absl::OkStatus(); + }; +}; + +} // namespace pins_test + +#endif // PINS_TESTS_INTEGRATION_SYSTEM_NSF_FLOW_PROGRAMMERS_REPLAY_PROGRAMMER_H_ diff --git a/tests/integration/system/nsf/flow_programmers/static_programmer.h b/tests/integration/system/nsf/flow_programmers/static_programmer.h new file mode 100644 index 00000000..a6605c94 --- /dev/null +++ b/tests/integration/system/nsf/flow_programmers/static_programmer.h @@ -0,0 +1,37 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef PINS_TESTS_INTEGRATION_SYSTEM_NSF_FLOW_PROGRAMMERS_STATIC_PROGRAMMER_H_ +#define PINS_TESTS_INTEGRATION_SYSTEM_NSF_FLOW_PROGRAMMERS_STATIC_PROGRAMMER_H_ + +#include "absl/status/status.h" +#include "tests/integration/system/nsf/interfaces/flow_programmer.h" +#include "thinkit/generic_testbed.h" + +namespace pins_test { + +class StaticProgrammer : public FlowProgrammer { + public: + absl::Status ProgramFlows(IpVersion ip_version, Protocol protocol, + thinkit::GenericTestbed& testbed) override { + return absl::OkStatus(); + }; + absl::Status ClearFlows(thinkit::GenericTestbed& testbed) override { + return absl::OkStatus(); + }; +}; + +} // namespace pins_test + +#endif // PINS_TESTS_INTEGRATION_SYSTEM_NSF_FLOW_PROGRAMMERS_STATIC_PROGRAMMER_H_ From 82e9a4cde70125af69b9bd6ff35f71dd304e2ce9 Mon Sep 17 00:00:00 2001 From: kishanps Date: Wed, 24 Jan 2024 02:46:29 -0800 Subject: [PATCH 2/2] [Thinkit] Implement the various component validators for PINs NSF tests.Update NsfTestParam types and names for better usability.Create utility functions for NSF integration tests. --- tests/integration/system/nsf/BUILD.bazel | 36 ++++++++++ .../nsf/component_validators/BUILD.bazel | 63 +++++++++++++++++ .../nsf/component_validators/sai_validator.h | 44 ++++++++++++ .../nsf/component_validators/swss_validator.h | 44 ++++++++++++ .../component_validators/syncd_validator.h | 49 +++++++++++++ .../system/nsf/flow_programmers/BUILD.bazel | 2 +- .../system/nsf/interfaces/BUILD.bazel | 2 +- .../system/nsf/interfaces/test_params.h | 12 ++-- .../system/nsf/traffic_helpers/BUILD.bazel | 2 +- .../system/nsf/traffic_helpers/otg_helper.h | 2 - tests/integration/system/nsf/util.cc | 68 +++++++++++++++++++ tests/integration/system/nsf/util.h | 58 ++++++++++++++++ 12 files changed, 373 insertions(+), 9 deletions(-) create mode 100644 tests/integration/system/nsf/BUILD.bazel create mode 100644 tests/integration/system/nsf/component_validators/BUILD.bazel create mode 100644 tests/integration/system/nsf/component_validators/sai_validator.h create mode 100644 tests/integration/system/nsf/component_validators/swss_validator.h create mode 100644 tests/integration/system/nsf/component_validators/syncd_validator.h create mode 100644 tests/integration/system/nsf/util.cc create mode 100644 tests/integration/system/nsf/util.h diff --git a/tests/integration/system/nsf/BUILD.bazel b/tests/integration/system/nsf/BUILD.bazel new file mode 100644 index 00000000..c9f3080b --- /dev/null +++ b/tests/integration/system/nsf/BUILD.bazel @@ -0,0 +1,36 @@ +# Copyright 2024 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# This package has the integration tests along with the utilities for testing NSF in PINs. + +package( + default_visibility = ["//visibility:public"], + licenses = ["notice"], +) + +cc_library( + name = "util", + testonly = True, + srcs = ["util.cc"], + hdrs = ["util.h"], + deps = [ + "//gutil:status", + "//tests/integration/system/nsf/interfaces:component_validator", + "//thinkit:generic_testbed", + "@com_github_p4lang_p4runtime//:p4info_cc_proto", + "@com_google_absl//absl/status", + "@com_google_absl//absl/strings:string_view", + "@com_google_absl//absl/types:span", + ], +) diff --git a/tests/integration/system/nsf/component_validators/BUILD.bazel b/tests/integration/system/nsf/component_validators/BUILD.bazel new file mode 100644 index 00000000..8ae06495 --- /dev/null +++ b/tests/integration/system/nsf/component_validators/BUILD.bazel @@ -0,0 +1,63 @@ +# Copyright 2024 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# This package implements the various component validators for PINs NSF tests. +# +# Note: These are dummy validators added as example of ComponentValidators implementation. +# Component owners need to have their own implementations and register to be used by the NSF Upgrade +# tests. + +package( + default_visibility = ["//visibility:public"], + licenses = ["notice"], +) + +cc_library( + name = "sai_validator", + testonly = True, + hdrs = ["sai_validator.h"], + deps = [ + "//tests/integration/system/nsf/interfaces:component_validator", + "//thinkit:generic_testbed", + "@com_github_google_glog//:glog", + "@com_google_absl//absl/status", + "@com_google_absl//absl/strings:string_view", + ], +) + +cc_library( + name = "swss_validator", + testonly = True, + hdrs = ["swss_validator.h"], + deps = [ + "//tests/integration/system/nsf/interfaces:component_validator", + "//thinkit:generic_testbed", + "@com_github_google_glog//:glog", + "@com_google_absl//absl/status", + "@com_google_absl//absl/strings:string_view", + ], +) + +cc_library( + name = "syncd_validator", + testonly = True, + hdrs = ["syncd_validator.h"], + deps = [ + "//tests/integration/system/nsf/interfaces:component_validator", + "//thinkit:generic_testbed", + "@com_github_google_glog//:glog", + "@com_google_absl//absl/status", + "@com_google_absl//absl/strings:string_view", + ], +) diff --git a/tests/integration/system/nsf/component_validators/sai_validator.h b/tests/integration/system/nsf/component_validators/sai_validator.h new file mode 100644 index 00000000..61071d4f --- /dev/null +++ b/tests/integration/system/nsf/component_validators/sai_validator.h @@ -0,0 +1,44 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef PINS_TESTS_INTEGRATION_SYSTEM_NSF_COMPONENT_VALIDATORS_SAI_VALIDATOR_H_ +#define PINS_TESTS_INTEGRATION_SYSTEM_NSF_COMPONENT_VALIDATORS_SAI_VALIDATOR_H_ + +#include "absl/status/status.h" +#include "absl/strings/string_view.h" +#include "glog/logging.h" +#include "tests/integration/system/nsf/interfaces/component_validator.h" +#include "thinkit/generic_testbed.h" + +namespace pins_test { + +// Dummy validators added as example of ComponentValidators implementation. +// Component owners need to have their own implementations and register to be +// used by the NSF Upgrade tests. +class SaiValidator : public ComponentValidator { + absl::Status OnInit(absl::string_view version, + thinkit::GenericTestbed& testbed) override { + LOG(INFO) << "Sai Init"; + return absl::OkStatus(); + } + absl::Status OnFlowCleanup(absl::string_view version, + thinkit::GenericTestbed& testbed) override { + LOG(INFO) << "Sai Flow Cleanup"; + return absl::OkStatus(); + } +}; + +} // namespace pins_test + +#endif // PINS_TESTS_INTEGRATION_SYSTEM_NSF_COMPONENT_VALIDATORS_SAI_VALIDATOR_H_ diff --git a/tests/integration/system/nsf/component_validators/swss_validator.h b/tests/integration/system/nsf/component_validators/swss_validator.h new file mode 100644 index 00000000..3a9c46b3 --- /dev/null +++ b/tests/integration/system/nsf/component_validators/swss_validator.h @@ -0,0 +1,44 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef PINS_TESTS_INTEGRATION_SYSTEM_NSF_COMPONENT_VALIDATORS_SWSS_VALIDATOR_H_ +#define PINS_TESTS_INTEGRATION_SYSTEM_NSF_COMPONENT_VALIDATORS_SWSS_VALIDATOR_H_ + +#include "absl/status/status.h" +#include "absl/strings/string_view.h" +#include "glog/logging.h" +#include "tests/integration/system/nsf/interfaces/component_validator.h" +#include "thinkit/generic_testbed.h" + +namespace pins_test { + +// Dummy validators added as example of ComponentValidators implementation. +// Component owners need to have their own implementations and register to be +// used by the NSF Upgrade tests. +class SwssValidator : public ComponentValidator { + absl::Status OnInit(absl::string_view version, + thinkit::GenericTestbed& testbed) override { + LOG(INFO) << "Swss Init"; + return absl::OkStatus(); + } + absl::Status OnFlowProgram(absl::string_view version, + thinkit::GenericTestbed& testbed) override { + LOG(INFO) << "Swss Flow Program"; + return absl::OkStatus(); + } +}; + +} // namespace pins_test + +#endif // PINS_TESTS_INTEGRATION_SYSTEM_NSF_COMPONENT_VALIDATORS_SWSS_VALIDATOR_H_ diff --git a/tests/integration/system/nsf/component_validators/syncd_validator.h b/tests/integration/system/nsf/component_validators/syncd_validator.h new file mode 100644 index 00000000..73a4d9c1 --- /dev/null +++ b/tests/integration/system/nsf/component_validators/syncd_validator.h @@ -0,0 +1,49 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef PINS_TESTS_INTEGRATION_SYSTEM_NSF_COMPONENT_VALIDATORS_SYNCD_VALIDATOR_H_ +#define PINS_TESTS_INTEGRATION_SYSTEM_NSF_COMPONENT_VALIDATORS_SYNCD_VALIDATOR_H_ + +#include "absl/status/status.h" +#include "absl/strings/string_view.h" +#include "glog/logging.h" +#include "tests/integration/system/nsf/interfaces/component_validator.h" +#include "thinkit/generic_testbed.h" + +namespace pins_test { + +// Dummy validators added as example of ComponentValidators implementation. +// Component owners need to have their own implementations and register to be +// used by the NSF Upgrade tests. +class SyncdValidator : public ComponentValidator { + absl::Status OnInit(absl::string_view version, + thinkit::GenericTestbed& testbed) override { + LOG(INFO) << "Syncd Init"; + return absl::OkStatus(); + } + absl::Status OnFlowProgram(absl::string_view version, + thinkit::GenericTestbed& testbed) override { + LOG(INFO) << "Syncd Flow Program"; + return absl::OkStatus(); + } + absl::Status OnFlowCleanup(absl::string_view version, + thinkit::GenericTestbed& testbed) override { + LOG(INFO) << "Syncd Flow Cleanup"; + return absl::OkStatus(); + } +}; + +} // namespace pins_test + +#endif // PINS_TESTS_INTEGRATION_SYSTEM_NSF_COMPONENT_VALIDATORS_SYNCD_VALIDATOR_H_ diff --git a/tests/integration/system/nsf/flow_programmers/BUILD.bazel b/tests/integration/system/nsf/flow_programmers/BUILD.bazel index 9a54ed61..6978551d 100644 --- a/tests/integration/system/nsf/flow_programmers/BUILD.bazel +++ b/tests/integration/system/nsf/flow_programmers/BUILD.bazel @@ -4,7 +4,7 @@ # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# https://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/tests/integration/system/nsf/interfaces/BUILD.bazel b/tests/integration/system/nsf/interfaces/BUILD.bazel index 7ef4559a..1bad56c7 100644 --- a/tests/integration/system/nsf/interfaces/BUILD.bazel +++ b/tests/integration/system/nsf/interfaces/BUILD.bazel @@ -4,7 +4,7 @@ # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# https://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/tests/integration/system/nsf/interfaces/test_params.h b/tests/integration/system/nsf/interfaces/test_params.h index 02f0c10e..0f0e9bc5 100644 --- a/tests/integration/system/nsf/interfaces/test_params.h +++ b/tests/integration/system/nsf/interfaces/test_params.h @@ -15,6 +15,8 @@ #ifndef PINS_TESTS_INTEGRATION_SYSTEM_NSF_INTERFACES_TEST_PARAMS_H_ #define PINS_TESTS_INTEGRATION_SYSTEM_NSF_INTERFACES_TEST_PARAMS_H_ +#include +#include #include #include @@ -31,10 +33,12 @@ namespace pins_test { // parameterized NSF integration test. struct NsfTestParams { std::string name; - FlowProgrammer* flow_programmer; - TrafficHelper* traffic_helper; - thinkit::GenericTestbedInterface* testbed_interface; - std::vector component_validators; + std::function()> create_flow_programmer; + std::function()> create_traffic_helper; + std::function()> + create_testbed_interface; + std::function>()> + create_component_validators; }; } // namespace pins_test diff --git a/tests/integration/system/nsf/traffic_helpers/BUILD.bazel b/tests/integration/system/nsf/traffic_helpers/BUILD.bazel index 685879de..c8c9dc40 100644 --- a/tests/integration/system/nsf/traffic_helpers/BUILD.bazel +++ b/tests/integration/system/nsf/traffic_helpers/BUILD.bazel @@ -4,7 +4,7 @@ # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# https://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, diff --git a/tests/integration/system/nsf/traffic_helpers/otg_helper.h b/tests/integration/system/nsf/traffic_helpers/otg_helper.h index 6772ab37..71ee8b43 100644 --- a/tests/integration/system/nsf/traffic_helpers/otg_helper.h +++ b/tests/integration/system/nsf/traffic_helpers/otg_helper.h @@ -22,8 +22,6 @@ namespace pins_test { class OtgHelper : public TrafficHelper { - ~OtgHelper() override = default; - public: absl::Status StartTraffic(thinkit::GenericTestbed& testbed) override { return absl::OkStatus(); diff --git a/tests/integration/system/nsf/util.cc b/tests/integration/system/nsf/util.cc new file mode 100644 index 00000000..1c0878b6 --- /dev/null +++ b/tests/integration/system/nsf/util.cc @@ -0,0 +1,68 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "tests/integration/system/nsf/util.h" + +#include +#include + +#include "absl/status/status.h" +#include "absl/strings/string_view.h" +#include "absl/types/span.h" +#include "gutil/status.h" // NOLINT: Need to add gutil/status.h for using `RETURN_IF_ERROR` in upstream code. +#include "p4/config/v1/p4info.pb.h" +#include "tests/integration/system/nsf/interfaces/component_validator.h" +#include "thinkit/generic_testbed.h" + +namespace pins_test { + +using p4::v1::ReadResponse; + +absl::Status InstallRebootPushConfig(absl::string_view version) { + return absl::OkStatus(); +} + +absl::Status ValidateSwitchState(absl::string_view version) { + return absl::OkStatus(); +} + +absl::Status ValidateComponents( + absl::Status (ComponentValidator::*validate)(absl::string_view, + thinkit::GenericTestbed&), + const absl::Span> validators, + absl::string_view version, thinkit::GenericTestbed& testbed) { + for (const std::unique_ptr& validator : validators) { + RETURN_IF_ERROR((std::invoke(validate, validator, version, testbed))); + } + return absl::OkStatus(); +} + +absl::Status Upgrade(absl::string_view version) { return absl::OkStatus(); } + +absl::Status NsfReboot(absl::string_view version) { return absl::OkStatus(); } + +absl::Status PushConfig(absl::string_view version) { return absl::OkStatus(); } + +ReadResponse TakeP4FlowSnapshot() { return ReadResponse(); } + +absl::Status CompareP4FlowSnapshots(const ReadResponse& a, + const ReadResponse& b) { + return absl::OkStatus(); +} + +absl::Status CaptureDbState() { return absl::OkStatus(); } + +absl::Status ValidateDbState() { return absl::OkStatus(); } + +} // namespace pins_test diff --git a/tests/integration/system/nsf/util.h b/tests/integration/system/nsf/util.h new file mode 100644 index 00000000..6ec81da6 --- /dev/null +++ b/tests/integration/system/nsf/util.h @@ -0,0 +1,58 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef PINS_TESTS_INTEGRATION_SYSTEM_NSF_UTIL_H_ +#define PINS_TESTS_INTEGRATION_SYSTEM_NSF_UTIL_H_ + +#include + +#include "absl/status/status.h" +#include "absl/strings/string_view.h" +#include "absl/types/span.h" +#include "p4/config/v1/p4info.pb.h" +#include "tests/integration/system/nsf/interfaces/component_validator.h" +#include "thinkit/generic_testbed.h" + +namespace pins_test { + +absl::Status InstallRebootPushConfig(absl::string_view version); + +// Validates P4, gNMI, SSH connections and port status along with validating the +// Stack version. +absl::Status ValidateSwitchState(absl::string_view version); + +absl::Status ValidateComponents( + absl::Status (ComponentValidator::*validate)(absl::string_view, + thinkit::GenericTestbed&), + absl::Span> validators, + absl::string_view version, thinkit::GenericTestbed& testbed); + +absl::Status Upgrade(absl::string_view version); + +absl::Status NsfReboot(absl::string_view version); + +absl::Status PushConfig(absl::string_view version); + +p4::v1::ReadResponse TakeP4FlowSnapshot(); + +absl::Status CompareP4FlowSnapshots(const p4::v1::ReadResponse& a, + const p4::v1::ReadResponse& b); + +absl::Status CaptureDbState(); + +absl::Status ValidateDbState(); + +} // namespace pins_test + +#endif // PINS_TESTS_INTEGRATION_SYSTEM_NSF_UTIL_H_