P4C
The P4 Compiler
Loading...
Searching...
No Matches
protobuf_ir.h
1/*
2 * SPDX-FileCopyrightText: 2023 Google LLC
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef BACKENDS_P4TOOLS_MODULES_TESTGEN_TARGETS_BMV2_TEST_BACKEND_PROTOBUF_IR_H_
8#define BACKENDS_P4TOOLS_MODULES_TESTGEN_TARGETS_BMV2_TEST_BACKEND_PROTOBUF_IR_H_
9
10#include <cstddef>
11#include <string>
12#include <utility>
13
14#include <inja/inja.hpp>
15
16#include "control-plane/p4RuntimeSerializer.h"
17#include "lib/cstring.h"
18
19#include "backends/p4tools/modules/testgen/lib/test_spec.h"
20#include "backends/p4tools/modules/testgen/targets/bmv2/test_backend/common.h"
21
23
24struct ProtobufIrTest : public AbstractTest {
25 private:
27 std::string formattedTest_;
28
29 public:
30 explicit ProtobufIrTest(std::string formattedTest) : formattedTest_(std::move(formattedTest)) {}
31
33 [[nodiscard]] const std::string &getFormattedTest() const { return formattedTest_; }
34
35 DECLARE_TYPEINFO(ProtobufIrTest);
36};
37
39class ProtobufIr : public Bmv2TestFramework {
40 public:
41 explicit ProtobufIr(const TestBackendConfiguration &testBackendConfiguration,
42 P4::P4RuntimeAPI p4RuntimeApi);
43
44 ~ProtobufIr() override = default;
45 ProtobufIr(const ProtobufIr &) = default;
46 ProtobufIr(ProtobufIr &&) = default;
47 ProtobufIr &operator=(const ProtobufIr &) = default;
48 ProtobufIr &operator=(ProtobufIr &&) = default;
49
50 void writeTestToFile(const TestSpec *testSpec, cstring selectedBranches, size_t testId,
51 float currentCoverage) override;
52
53 AbstractTestReferenceOrError produceTest(const TestSpec *testSpec, cstring selectedBranches,
54 size_t testIdx, float currentCoverage) override;
55
56 private:
59 P4::P4RuntimeAPI p4RuntimeApi;
60
61 [[nodiscard]] inja::json getControlPlaneTable(const TableConfig &tblConfig) const override;
62
63 [[nodiscard]] inja::json getControlPlaneForTable(
64 const TableMatchMap &matches, const std::vector<ActionArg> &args) const override;
65
66 [[nodiscard]] inja::json getSend(const TestSpec *testSpec) const override;
67
68 [[nodiscard]] inja::json getExpectedPacket(const TestSpec *testSpec) const override;
69
75 inja::json produceTestCase(const TestSpec *testSpec, cstring selectedBranches, size_t testId,
76 float currentCoverage) const;
77
79 static std::string getTestCaseTemplate();
80
83 static std::optional<std::string> checkForP4RuntimeTranslationAnnotation(
84 const IR::IAnnotated *node);
85
88 static std::map<cstring, cstring> getP4RuntimeTranslationMappings(const IR::IAnnotated *node);
89
92 static std::string getFormatOfNode(const IR::IAnnotated *node);
93
95 static std::string formatNetworkValue(const std::string &type, const IR::Expression *value);
96
98 static std::string formatNetworkValue(const IR::IAnnotated *node, const std::string &type,
99 const IR::Expression *value);
100
103 static void createKeyMatch(cstring fieldName, const TableMatch &fieldMatch,
104 inja::json &rulesJson);
105};
106
107} // namespace P4::P4Tools::P4Testgen::Bmv2
108
109#endif /* BACKENDS_P4TOOLS_MODULES_TESTGEN_TARGETS_BMV2_TEST_BACKEND_PROTOBUF_IR_H_ */
AbstractTestReferenceOrError produceTest(const TestSpec *testSpec, cstring selectedBranches, size_t testIdx, float currentCoverage) override
Definition protobuf_ir.cpp:344
void writeTestToFile(const TestSpec *testSpec, cstring selectedBranches, size_t testId, float currentCoverage) override
Definition protobuf_ir.cpp:329
Definition lib/test_spec.h:260
Definition lib/test_spec.h:133
Definition lib/test_spec.h:303
Definition cstring.h:85
Inja.
Definition targets/bmv2/cmd_stepper.cpp:37
Definition p4RuntimeSerializer.h:48
Type definitions for abstract tests.
Definition test_framework.h:35
const std::string & getFormattedTest() const
Definition protobuf_ir.h:33
Definition test_backend_configuration.h:22