@@ -158,13 +158,41 @@ CASE("Reading Message and parsing options with Message_view")
158158 EXPECT (param_req_list_opt->code == option::DHCP_PARAMETER_REQUEST_LIST);
159159 EXPECT (anon_opt == param_req_list_opt);
160160
161- int i = 0 ;
162- auto y = view.parse_options ([&i] (const option::base* opt)
161+ int options_handled = 0 ;
162+ std::array<bool , 3 > seen{false , false , false };
163+ auto options_found = view.parse_options ([&] (const option::base* opt)
163164 {
164- ++i;
165+ EXPECT (opt->code != net::dhcp::option::PAD);
166+ EXPECT (opt->code != net::dhcp::option::END);
167+ EXPECT (opt->length != 0 );
168+
169+ switch (opt->code ) {
170+ case option::DHCP_MESSAGE_TYPE:
171+ EXPECT (opt->length == 1 );
172+ EXPECT (opt->val [0 ] == uint8_t (message_type::DISCOVER));
173+ seen[0 ] = true ;
174+ break ;
175+ case option::DHCP_CLIENT_IDENTIFIER:
176+ EXPECT (opt->length == 7 );
177+ EXPECT (opt->val [0 ] == uint8_t (htype::ETHER));
178+ EXPECT (std::memcmp (&opt->val [1 ], &link_addr, ETH_ALEN) == 0 );
179+ seen[1 ] = true ;
180+ break ;
181+ case option::DHCP_PARAMETER_REQUEST_LIST:
182+ EXPECT (opt->length == 3 );
183+ EXPECT (opt->val [0 ] == option::ROUTERS);
184+ EXPECT (opt->val [1 ] == option::SUBNET_MASK);
185+ EXPECT (opt->val [2 ] == option::DOMAIN_NAME_SERVERS);
186+ seen[2 ] = true ;
187+ break ;
188+ default :
189+ EXPECT (false );
190+ break ;
191+ }
192+ ++options_handled;
165193 });
166- EXPECT (i == 3 );
167- EXPECT (y == i );
194+ EXPECT (options_handled == 3 );
195+ EXPECT (options_found == options_handled );
168196}
169197
170198CASE (" Creating Message and adding options with Message_view" )
0 commit comments