1- /* Copyright 2013-present Barefoot Networks, Inc.
2- *
3- * Licensed under the Apache License, Version 2.0 (the "License");
4- * you may not use this file except in compliance with the License.
5- * You may obtain a copy of the License at
6- *
7- * http://www.apache.org/licenses/LICENSE-2.0
8- *
9- * Unless required by applicable law or agreed to in writing, software
10- * distributed under the License is distributed on an "AS IS" BASIS,
11- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12- * See the License for the specific language governing permissions and
13- * limitations under the License.
14- */
15-
16- /*
17- * Antonin Bas (antonin@barefootnetworks.com)
18- *
19- */
20-
211#include < grpcpp/grpcpp.h>
22-
232#include < google/rpc/code.pb.h>
243
254#include < fstream>
265#include < streambuf>
6+ #include < vector>
7+
8+ #include < bm/bm_sim/options_parse.h>
279
2810#include " base_test.h"
11+ #include " switch_runner.h"
2912
3013namespace p4v1 = ::p4::v1;
3114
3215namespace sswitch_grpc {
33-
3416namespace testing {
3517
3618constexpr char SimpleSwitchGrpcBaseTest::grpc_server_addr[];
@@ -46,108 +28,129 @@ SimpleSwitchGrpcBaseTest::SimpleSwitchGrpcBaseTest(
4628 p4info = parse_p4info (p4info_proto_txt_path);
4729}
4830
49- void
50- SimpleSwitchGrpcBaseTest::SetUp () {
31+ void SimpleSwitchGrpcBaseTest::SetUp () {
5132 stream = p4runtime_stub->StreamChannel (&stream_context);
33+
5234 p4v1::StreamMessageRequest request;
5335 auto arbitration = request.mutable_arbitration ();
36+
5437 arbitration->set_device_id (device_id);
5538 set_election_id (arbitration->mutable_election_id ());
39+
5640 stream->Write (request);
41+
5742 p4v1::StreamMessageResponse response;
5843 stream->Read (&response);
59- ASSERT_EQ (response.update_case (), p4v1::StreamMessageResponse::kArbitration );
60- ASSERT_EQ (response.arbitration ().status ().code (), ::google::rpc::Code::OK );
44+
45+ ASSERT_EQ (response.update_case (),
46+ p4v1::StreamMessageResponse::kArbitration );
47+
48+ ASSERT_EQ (response.arbitration ().status ().code (),
49+ ::google::rpc::Code::OK );
6150}
6251
63- void
64- SimpleSwitchGrpcBaseTest::TearDown () {
52+ void SimpleSwitchGrpcBaseTest::TearDown () {
6553 stream->WritesDone ();
54+
6655 p4v1::StreamMessageResponse response;
67- while (stream->Read (&response)) { }
56+ while (stream->Read (&response)) {
57+ }
58+
6859 auto status = stream->Finish ();
6960 EXPECT_TRUE (status.ok ());
7061}
7162
72- void
73- SimpleSwitchGrpcBaseTest::update_json (const char *json_path) {
63+ void SimpleSwitchGrpcBaseTest::update_json (const char *json_path) {
7464 p4v1::SetForwardingPipelineConfigRequest request;
7565 request.set_device_id (device_id);
7666 request.set_action (
7767 p4v1::SetForwardingPipelineConfigRequest_Action_VERIFY_AND_COMMIT);
68+
7869 set_election_id (request.mutable_election_id ());
70+
7971 auto config = request.mutable_config ();
72+
8073 std::ifstream istream (json_path);
8174 ASSERT_TRUE (istream.good ());
75+
8276 config->mutable_p4_device_config ()->assign (
8377 (std::istreambuf_iterator<char >(istream)),
84- std::istreambuf_iterator<char >());
78+ std::istreambuf_iterator<char >());
8579
8680 p4v1::SetForwardingPipelineConfigResponse rep;
87- ClientContext context;
81+ grpc::ClientContext context;
82+
8883 config->set_allocated_p4info (&p4info);
89- auto status = p4runtime_stub->SetForwardingPipelineConfig (
90- &context, request, &rep);
84+
85+ auto status =
86+ p4runtime_stub->SetForwardingPipelineConfig (&context, request, &rep);
87+
9188 config->release_p4info ();
89+
9290 ASSERT_TRUE (status.ok ());
9391}
9492
95- void
96- SimpleSwitchGrpcBaseTest::set_election_id ( p4v1::Uint128 *election_id) const {
93+ void SimpleSwitchGrpcBaseTest::set_election_id (
94+ p4v1::Uint128 *election_id) const {
9795 election_id->set_high (0 );
9896 election_id->set_low (1 );
9997}
10098
101- grpc::Status
102- SimpleSwitchGrpcBaseTest::write (const p4v1::Entity &entity,
103- p4v1::Update::Type type) const {
99+ grpc::Status SimpleSwitchGrpcBaseTest::write (const p4v1::Entity &entity,
100+ p4v1::Update::Type type) const {
104101 p4v1::WriteRequest request;
105102 request.set_device_id (device_id);
103+
106104 auto update = request.add_updates ();
107105 update->set_type (type);
108106 update->mutable_entity ()->CopyFrom (entity);
109- ClientContext context;
107+
108+ grpc::ClientContext context;
110109 p4v1::WriteResponse rep;
110+
111111 return Write (&context, request, &rep);
112112}
113113
114- grpc::Status
115- SimpleSwitchGrpcBaseTest::insert ( const p4v1::Entity &entity) const {
114+ grpc::Status SimpleSwitchGrpcBaseTest::insert (
115+ const p4v1::Entity &entity) const {
116116 return write (entity, p4v1::Update::INSERT );
117117}
118118
119- grpc::Status
120- SimpleSwitchGrpcBaseTest::modify ( const p4v1::Entity &entity) const {
119+ grpc::Status SimpleSwitchGrpcBaseTest::modify (
120+ const p4v1::Entity &entity) const {
121121 return write (entity, p4v1::Update::MODIFY );
122122}
123123
124- grpc::Status
125- SimpleSwitchGrpcBaseTest::remove ( const p4v1::Entity &entity) const {
124+ grpc::Status SimpleSwitchGrpcBaseTest::remove (
125+ const p4v1::Entity &entity) const {
126126 return write (entity, p4v1::Update::DELETE );
127127}
128128
129- grpc::Status
130- SimpleSwitchGrpcBaseTest::read (const p4v1::Entity &entity,
131- p4v1::ReadResponse *rep) const {
129+ grpc::Status SimpleSwitchGrpcBaseTest::read (const p4v1::Entity &entity,
130+ p4v1::ReadResponse *rep) const {
132131 p4v1::ReadRequest request;
133132 request.set_device_id (device_id);
134133 request.add_entities ()->CopyFrom (entity);
135- ClientContext context;
136- std::unique_ptr<grpc::ClientReader<p4v1::ReadResponse> > reader (
134+
135+ grpc::ClientContext context;
136+
137+ std::unique_ptr<grpc::ClientReader<p4v1::ReadResponse>> reader (
137138 p4runtime_stub->Read (&context, request));
139+
138140 reader->Read (rep);
141+
139142 return reader->Finish ();
140143}
141144
142- grpc::Status
143- SimpleSwitchGrpcBaseTest::Write ( ClientContext *context,
144- p4v1::WriteRequest &request,
145- p4v1::WriteResponse *response) const {
145+ grpc::Status SimpleSwitchGrpcBaseTest::Write (
146+ grpc:: ClientContext *context,
147+ p4v1::WriteRequest &request,
148+ p4v1::WriteResponse *response) const {
146149 request.set_device_id (device_id);
147150 set_election_id (request.mutable_election_id ());
151+
148152 return p4runtime_stub->Write (context, request, response);
149153}
150154
151155} // namespace testing
152-
153156} // namespace sswitch_grpc
0 commit comments