1# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. 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 12# implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15 16# vim: tabstop=4 shiftwidth=4 softtabstop=4 17 18import copy 19import logging 20from struct import pack, unpack_from 21import unittest 22 23from nose.tools import ok_, eq_, raises 24from ryu.ofproto import ether 25from ryu.lib.packet.ethernet import ethernet 26from ryu.lib.packet.packet import Packet 27from ryu.lib import addrconv 28from ryu.lib.packet.slow import slow, lacp 29from ryu.lib.packet.slow import SLOW_PROTOCOL_MULTICAST 30from ryu.lib.packet.slow import SLOW_SUBTYPE_LACP 31from ryu.lib.packet.slow import SLOW_SUBTYPE_MARKER 32 33LOG = logging.getLogger(__name__) 34 35 36class Test_slow(unittest.TestCase): 37 """ Test case for Slow Protocol 38 """ 39 40 def setUp(self): 41 self.subtype = SLOW_SUBTYPE_LACP 42 self.version = lacp.LACP_VERSION_NUMBER 43 self.actor_tag = lacp.LACP_TLV_TYPE_ACTOR 44 self.actor_length = 20 45 self.actor_system_priority = 65534 46 self.actor_system = '00:07:0d:af:f4:54' 47 self.actor_key = 1 48 self.actor_port_priority = 65535 49 self.actor_port = 1 50 self.actor_state_activity = lacp.LACP_STATE_ACTIVE 51 self.actor_state_timeout = lacp.LACP_STATE_LONG_TIMEOUT 52 self.actor_state_aggregation = lacp.LACP_STATE_AGGREGATEABLE 53 self.actor_state_synchronization = lacp.LACP_STATE_IN_SYNC 54 self.actor_state_collecting = lacp.LACP_STATE_COLLECTING_ENABLED 55 self.actor_state_distributing = lacp.LACP_STATE_DISTRIBUTING_ENABLED 56 self.actor_state_defaulted = lacp.LACP_STATE_OPERATIONAL_PARTNER 57 self.actor_state_expired = lacp.LACP_STATE_EXPIRED 58 self.actor_state = ( 59 (self.actor_state_activity << 0) | 60 (self.actor_state_timeout << 1) | 61 (self.actor_state_aggregation << 2) | 62 (self.actor_state_synchronization << 3) | 63 (self.actor_state_collecting << 4) | 64 (self.actor_state_distributing << 5) | 65 (self.actor_state_defaulted << 6) | 66 (self.actor_state_expired << 7)) 67 self.partner_tag = lacp.LACP_TLV_TYPE_PARTNER 68 self.partner_length = 20 69 self.partner_system_priority = 0 70 self.partner_system = '00:00:00:00:00:00' 71 self.partner_key = 0 72 self.partner_port_priority = 0 73 self.partner_port = 0 74 self.partner_state_activity = 0 75 self.partner_state_timeout = lacp.LACP_STATE_SHORT_TIMEOUT 76 self.partner_state_aggregation = 0 77 self.partner_state_synchronization = 0 78 self.partner_state_collecting = 0 79 self.partner_state_distributing = 0 80 self.partner_state_defaulted = 0 81 self.partner_state_expired = 0 82 self.partner_state = ( 83 (self.partner_state_activity << 0) | 84 (self.partner_state_timeout << 1) | 85 (self.partner_state_aggregation << 2) | 86 (self.partner_state_synchronization << 3) | 87 (self.partner_state_collecting << 4) | 88 (self.partner_state_distributing << 5) | 89 (self.partner_state_defaulted << 6) | 90 (self.partner_state_expired << 7)) 91 self.collector_tag = lacp.LACP_TLV_TYPE_COLLECTOR 92 self.collector_length = 16 93 self.collector_max_delay = 0 94 self.terminator_tag = lacp.LACP_TLV_TYPE_TERMINATOR 95 self.terminator_length = 0 96 97 self.head_fmt = lacp._HLEN_PACK_STR 98 self.head_len = lacp._HLEN_PACK_LEN 99 self.act_fmt = lacp._ACTPRT_INFO_PACK_STR 100 self.act_len = lacp._ACTPRT_INFO_PACK_LEN 101 self.prt_fmt = lacp._ACTPRT_INFO_PACK_STR 102 self.prt_len = lacp._ACTPRT_INFO_PACK_LEN 103 self.col_fmt = lacp._COL_INFO_PACK_STR 104 self.col_len = lacp._COL_INFO_PACK_LEN 105 self.trm_fmt = lacp._TRM_PACK_STR 106 self.trm_len = lacp._TRM_PACK_LEN 107 self.length = lacp._ALL_PACK_LEN 108 109 self.head_buf = pack(self.head_fmt, 110 self.subtype, 111 self.version) 112 self.act_buf = pack(self.act_fmt, 113 self.actor_tag, 114 self.actor_length, 115 self.actor_system_priority, 116 addrconv.mac.text_to_bin(self.actor_system), 117 self.actor_key, 118 self.actor_port_priority, 119 self.actor_port, 120 self.actor_state) 121 self.prt_buf = pack(self.prt_fmt, 122 self.partner_tag, 123 self.partner_length, 124 self.partner_system_priority, 125 addrconv.mac.text_to_bin(self.partner_system), 126 self.partner_key, 127 self.partner_port_priority, 128 self.partner_port, 129 self.partner_state) 130 self.col_buf = pack(self.col_fmt, 131 self.collector_tag, 132 self.collector_length, 133 self.collector_max_delay) 134 self.trm_buf = pack(self.trm_fmt, 135 self.terminator_tag, 136 self.terminator_length) 137 138 self.buf = self.head_buf + self.act_buf + self.prt_buf + \ 139 self.col_buf + self.trm_buf 140 141 def tearDown(self): 142 pass 143 144 def test_parser(self): 145 slow.parser(self.buf) 146 147 def test_not_implemented_subtype(self): 148 not_implemented_buf = pack( 149 slow._PACK_STR, SLOW_SUBTYPE_MARKER) + self.buf[1:] 150 (instance, nexttype, last) = slow.parser(not_implemented_buf) 151 assert instance is None 152 assert nexttype is None 153 assert last is not None 154 155 def test_invalid_subtype(self): 156 invalid_buf = b'\xff' + self.buf[1:] 157 (instance, nexttype, last) = slow.parser(invalid_buf) 158 assert instance is None 159 assert nexttype is None 160 assert last is not None 161 162 163class Test_lacp(unittest.TestCase): 164 """ Test case for lacp 165 """ 166 167 def setUp(self): 168 self.subtype = SLOW_SUBTYPE_LACP 169 self.version = lacp.LACP_VERSION_NUMBER 170 self.actor_tag = lacp.LACP_TLV_TYPE_ACTOR 171 self.actor_length = 20 172 self.actor_system_priority = 65534 173 self.actor_system = '00:07:0d:af:f4:54' 174 self.actor_key = 1 175 self.actor_port_priority = 65535 176 self.actor_port = 1 177 self.actor_state_activity = lacp.LACP_STATE_ACTIVE 178 self.actor_state_timeout = lacp.LACP_STATE_LONG_TIMEOUT 179 self.actor_state_aggregation = lacp.LACP_STATE_AGGREGATEABLE 180 self.actor_state_synchronization = lacp.LACP_STATE_IN_SYNC 181 self.actor_state_collecting = lacp.LACP_STATE_COLLECTING_ENABLED 182 self.actor_state_distributing = lacp.LACP_STATE_DISTRIBUTING_ENABLED 183 self.actor_state_defaulted = lacp.LACP_STATE_OPERATIONAL_PARTNER 184 self.actor_state_expired = lacp.LACP_STATE_EXPIRED 185 self.actor_state = ( 186 (self.actor_state_activity << 0) | 187 (self.actor_state_timeout << 1) | 188 (self.actor_state_aggregation << 2) | 189 (self.actor_state_synchronization << 3) | 190 (self.actor_state_collecting << 4) | 191 (self.actor_state_distributing << 5) | 192 (self.actor_state_defaulted << 6) | 193 (self.actor_state_expired << 7)) 194 self.partner_tag = lacp.LACP_TLV_TYPE_PARTNER 195 self.partner_length = 20 196 self.partner_system_priority = 0 197 self.partner_system = '00:00:00:00:00:00' 198 self.partner_key = 0 199 self.partner_port_priority = 0 200 self.partner_port = 0 201 self.partner_state_activity = 0 202 self.partner_state_timeout = lacp.LACP_STATE_SHORT_TIMEOUT 203 self.partner_state_aggregation = 0 204 self.partner_state_synchronization = 0 205 self.partner_state_collecting = 0 206 self.partner_state_distributing = 0 207 self.partner_state_defaulted = 0 208 self.partner_state_expired = 0 209 self.partner_state = ( 210 (self.partner_state_activity << 0) | 211 (self.partner_state_timeout << 1) | 212 (self.partner_state_aggregation << 2) | 213 (self.partner_state_synchronization << 3) | 214 (self.partner_state_collecting << 4) | 215 (self.partner_state_distributing << 5) | 216 (self.partner_state_defaulted << 6) | 217 (self.partner_state_expired << 7)) 218 self.collector_tag = lacp.LACP_TLV_TYPE_COLLECTOR 219 self.collector_length = 16 220 self.collector_max_delay = 0 221 self.terminator_tag = lacp.LACP_TLV_TYPE_TERMINATOR 222 self.terminator_length = 0 223 224 self.head_fmt = lacp._HLEN_PACK_STR 225 self.head_len = lacp._HLEN_PACK_LEN 226 self.act_fmt = lacp._ACTPRT_INFO_PACK_STR 227 self.act_len = lacp._ACTPRT_INFO_PACK_LEN 228 self.prt_fmt = lacp._ACTPRT_INFO_PACK_STR 229 self.prt_len = lacp._ACTPRT_INFO_PACK_LEN 230 self.col_fmt = lacp._COL_INFO_PACK_STR 231 self.col_len = lacp._COL_INFO_PACK_LEN 232 self.trm_fmt = lacp._TRM_PACK_STR 233 self.trm_len = lacp._TRM_PACK_LEN 234 self.length = lacp._ALL_PACK_LEN 235 236 self.head_buf = pack(self.head_fmt, 237 self.subtype, 238 self.version) 239 self.act_buf = pack(self.act_fmt, 240 self.actor_tag, 241 self.actor_length, 242 self.actor_system_priority, 243 addrconv.mac.text_to_bin(self.actor_system), 244 self.actor_key, 245 self.actor_port_priority, 246 self.actor_port, 247 self.actor_state) 248 self.prt_buf = pack(self.prt_fmt, 249 self.partner_tag, 250 self.partner_length, 251 self.partner_system_priority, 252 addrconv.mac.text_to_bin(self.partner_system), 253 self.partner_key, 254 self.partner_port_priority, 255 self.partner_port, 256 self.partner_state) 257 self.col_buf = pack(self.col_fmt, 258 self.collector_tag, 259 self.collector_length, 260 self.collector_max_delay) 261 self.trm_buf = pack(self.trm_fmt, 262 self.terminator_tag, 263 self.terminator_length) 264 265 self.buf = self.head_buf + self.act_buf + self.prt_buf + \ 266 self.col_buf + self.trm_buf 267 268 self.l = lacp(self.version, 269 self.actor_system_priority, 270 self.actor_system, 271 self.actor_key, 272 self.actor_port_priority, 273 self.actor_port, 274 self.actor_state_activity, 275 self.actor_state_timeout, 276 self.actor_state_aggregation, 277 self.actor_state_synchronization, 278 self.actor_state_collecting, 279 self.actor_state_distributing, 280 self.actor_state_defaulted, 281 self.actor_state_expired, 282 self.partner_system_priority, 283 self.partner_system, 284 self.partner_key, 285 self.partner_port_priority, 286 self.partner_port, 287 self.partner_state_activity, 288 self.partner_state_timeout, 289 self.partner_state_aggregation, 290 self.partner_state_synchronization, 291 self.partner_state_collecting, 292 self.partner_state_distributing, 293 self.partner_state_defaulted, 294 self.partner_state_expired, 295 self.collector_max_delay) 296 297 def tearDown(self): 298 pass 299 300 def find_protocol(self, pkt, name): 301 for p in pkt.protocols: 302 if p.protocol_name == name: 303 return p 304 305 def test_init(self): 306 eq_(self.subtype, self.l._subtype) 307 eq_(self.version, self.l.version) 308 eq_(self.actor_tag, self.l._actor_tag) 309 eq_(self.actor_length, self.l._actor_length) 310 eq_(self.actor_system_priority, self.l.actor_system_priority) 311 eq_(self.actor_system, self.l.actor_system) 312 eq_(self.actor_key, self.l.actor_key) 313 eq_(self.actor_port_priority, self.l.actor_port_priority) 314 eq_(self.actor_port, self.l.actor_port) 315 eq_(self.actor_state_activity, self.l.actor_state_activity) 316 eq_(self.actor_state_timeout, self.l.actor_state_timeout) 317 eq_(self.actor_state_aggregation, 318 self.l.actor_state_aggregation) 319 eq_(self.actor_state_synchronization, 320 self.l.actor_state_synchronization) 321 eq_(self.actor_state_collecting, 322 self.l.actor_state_collecting) 323 eq_(self.actor_state_distributing, 324 self.l.actor_state_distributing) 325 eq_(self.actor_state_defaulted, self.l.actor_state_defaulted) 326 eq_(self.actor_state_expired, self.l.actor_state_expired) 327 eq_(self.actor_state, self.l._actor_state) 328 eq_(self.partner_tag, self.l._partner_tag) 329 eq_(self.partner_length, self.l._partner_length) 330 eq_(self.partner_system_priority, 331 self.l.partner_system_priority) 332 eq_(self.partner_system, self.l.partner_system) 333 eq_(self.partner_key, self.l.partner_key) 334 eq_(self.partner_port_priority, self.l.partner_port_priority) 335 eq_(self.partner_port, self.l.partner_port) 336 eq_(self.partner_state_activity, self.l.partner_state_activity) 337 eq_(self.partner_state_timeout, self.l.partner_state_timeout) 338 eq_(self.partner_state_aggregation, 339 self.l.partner_state_aggregation) 340 eq_(self.partner_state_synchronization, 341 self.l.partner_state_synchronization) 342 eq_(self.partner_state_collecting, 343 self.l.partner_state_collecting) 344 eq_(self.partner_state_distributing, 345 self.l.partner_state_distributing) 346 eq_(self.partner_state_defaulted, 347 self.l.partner_state_defaulted) 348 eq_(self.partner_state_expired, self.l.partner_state_expired) 349 eq_(self.partner_state, self.l._partner_state) 350 eq_(self.collector_tag, self.l._collector_tag) 351 eq_(self.collector_length, self.l._collector_length) 352 eq_(self.collector_max_delay, self.l.collector_max_delay) 353 eq_(self.terminator_tag, self.l._terminator_tag) 354 eq_(self.terminator_length, self.l._terminator_length) 355 356 def test_parser(self): 357 _res = self.l.parser(self.buf) 358 if type(_res) is tuple: 359 res = _res[0] 360 else: 361 res = _res 362 363 eq_(res._subtype, self.subtype) 364 eq_(res.version, self.version) 365 eq_(res._actor_tag, self.actor_tag) 366 eq_(res._actor_length, self.actor_length) 367 eq_(res.actor_system_priority, self.actor_system_priority) 368 eq_(res.actor_system, self.actor_system) 369 eq_(res.actor_key, self.actor_key) 370 eq_(res.actor_port_priority, self.actor_port_priority) 371 eq_(res.actor_port, self.actor_port) 372 eq_(res.actor_state_activity, self.actor_state_activity) 373 eq_(res.actor_state_timeout, self.actor_state_timeout) 374 eq_(res.actor_state_aggregation, self.actor_state_aggregation) 375 eq_(res.actor_state_synchronization, 376 self.actor_state_synchronization) 377 eq_(res.actor_state_collecting, self.actor_state_collecting) 378 eq_(res.actor_state_distributing, self.actor_state_distributing) 379 eq_(res.actor_state_defaulted, self.actor_state_defaulted) 380 eq_(res.actor_state_expired, self.actor_state_expired) 381 eq_(res._actor_state, self.actor_state) 382 eq_(res._partner_tag, self.partner_tag) 383 eq_(res._partner_length, self.partner_length) 384 eq_(res.partner_system_priority, self.partner_system_priority) 385 eq_(res.partner_system, self.partner_system) 386 eq_(res.partner_key, self.partner_key) 387 eq_(res.partner_port_priority, self.partner_port_priority) 388 eq_(res.partner_port, self.partner_port) 389 eq_(res.partner_state_activity, self.partner_state_activity) 390 eq_(res.partner_state_timeout, self.partner_state_timeout) 391 eq_(res.partner_state_aggregation, 392 self.partner_state_aggregation) 393 eq_(res.partner_state_synchronization, 394 self.partner_state_synchronization) 395 eq_(res.partner_state_collecting, self.partner_state_collecting) 396 eq_(res.partner_state_distributing, 397 self.partner_state_distributing) 398 eq_(res.partner_state_defaulted, self.partner_state_defaulted) 399 eq_(res.partner_state_expired, self.partner_state_expired) 400 eq_(res._partner_state, self.partner_state) 401 eq_(res._collector_tag, self.collector_tag) 402 eq_(res._collector_length, self.collector_length) 403 eq_(res.collector_max_delay, self.collector_max_delay) 404 eq_(res._terminator_tag, self.terminator_tag) 405 eq_(res._terminator_length, self.terminator_length) 406 407 def test_serialize(self): 408 data = bytearray() 409 prev = None 410 buf = self.l.serialize(data, prev) 411 412 offset = 0 413 head_res = unpack_from(self.head_fmt, buf, offset) 414 offset += self.head_len 415 act_res = unpack_from(self.act_fmt, buf, offset) 416 offset += self.act_len 417 prt_res = unpack_from(self.prt_fmt, buf, offset) 418 offset += self.prt_len 419 col_res = unpack_from(self.col_fmt, buf, offset) 420 offset += self.col_len 421 trm_res = unpack_from(self.trm_fmt, buf, offset) 422 423 eq_(head_res[0], self.subtype) 424 eq_(head_res[1], self.version) 425 426 eq_(act_res[0], self.actor_tag) 427 eq_(act_res[1], self.actor_length) 428 eq_(act_res[2], self.actor_system_priority) 429 eq_(act_res[3], addrconv.mac.text_to_bin(self.actor_system)) 430 eq_(act_res[4], self.actor_key) 431 eq_(act_res[5], self.actor_port_priority) 432 eq_(act_res[6], self.actor_port) 433 eq_(act_res[7], self.actor_state) 434 435 eq_(prt_res[0], self.partner_tag) 436 eq_(prt_res[1], self.partner_length) 437 eq_(prt_res[2], self.partner_system_priority) 438 eq_(prt_res[3], addrconv.mac.text_to_bin(self.partner_system)) 439 eq_(prt_res[4], self.partner_key) 440 eq_(prt_res[5], self.partner_port_priority) 441 eq_(prt_res[6], self.partner_port) 442 eq_(prt_res[7], self.partner_state) 443 444 eq_(col_res[0], self.collector_tag) 445 eq_(col_res[1], self.collector_length) 446 eq_(col_res[2], self.collector_max_delay) 447 448 eq_(trm_res[0], self.terminator_tag) 449 eq_(trm_res[1], self.terminator_length) 450 451 def _build_lacp(self): 452 ethertype = ether.ETH_TYPE_SLOW 453 dst = SLOW_PROTOCOL_MULTICAST 454 e = ethernet(dst, self.actor_system, ethertype) 455 p = Packet() 456 457 p.add_protocol(e) 458 p.add_protocol(self.l) 459 p.serialize() 460 return p 461 462 def test_build_lacp(self): 463 p = self._build_lacp() 464 465 e = self.find_protocol(p, "ethernet") 466 ok_(e) 467 eq_(e.ethertype, ether.ETH_TYPE_SLOW) 468 469 l = self.find_protocol(p, "lacp") 470 ok_(l) 471 472 eq_(l._subtype, self.subtype) 473 eq_(l.version, self.version) 474 eq_(l._actor_tag, self.actor_tag) 475 eq_(l._actor_length, self.actor_length) 476 eq_(l.actor_system_priority, self.actor_system_priority) 477 eq_(l.actor_system, self.actor_system) 478 eq_(l.actor_key, self.actor_key) 479 eq_(l.actor_port_priority, self.actor_port_priority) 480 eq_(l.actor_port, self.actor_port) 481 eq_(l.actor_state_activity, self.actor_state_activity) 482 eq_(l.actor_state_timeout, self.actor_state_timeout) 483 eq_(l.actor_state_aggregation, self.actor_state_aggregation) 484 eq_(l.actor_state_synchronization, 485 self.actor_state_synchronization) 486 eq_(l.actor_state_collecting, self.actor_state_collecting) 487 eq_(l.actor_state_distributing, self.actor_state_distributing) 488 eq_(l.actor_state_defaulted, self.actor_state_defaulted) 489 eq_(l.actor_state_expired, self.actor_state_expired) 490 eq_(l._actor_state, self.actor_state) 491 eq_(l._partner_tag, self.partner_tag) 492 eq_(l._partner_length, self.partner_length) 493 eq_(l.partner_system_priority, self.partner_system_priority) 494 eq_(l.partner_system, self.partner_system) 495 eq_(l.partner_key, self.partner_key) 496 eq_(l.partner_port_priority, self.partner_port_priority) 497 eq_(l.partner_port, self.partner_port) 498 eq_(l.partner_state_activity, self.partner_state_activity) 499 eq_(l.partner_state_timeout, self.partner_state_timeout) 500 eq_(l.partner_state_aggregation, self.partner_state_aggregation) 501 eq_(l.partner_state_synchronization, 502 self.partner_state_synchronization) 503 eq_(l.partner_state_collecting, self.partner_state_collecting) 504 eq_(l.partner_state_distributing, 505 self.partner_state_distributing) 506 eq_(l.partner_state_defaulted, self.partner_state_defaulted) 507 eq_(l.partner_state_expired, self.partner_state_expired) 508 eq_(l._partner_state, self.partner_state) 509 eq_(l._collector_tag, self.collector_tag) 510 eq_(l._collector_length, self.collector_length) 511 eq_(l.collector_max_delay, self.collector_max_delay) 512 eq_(l._terminator_tag, self.terminator_tag) 513 eq_(l._terminator_length, self.terminator_length) 514 515 @raises(Exception) 516 def test_malformed_lacp(self): 517 m_short_buf = self.buf[1:self.length] 518 slow.parser(m_short_buf) 519 520 @raises(Exception) 521 def test_invalid_subtype(self): 522 invalid_lacv = copy.deepcopy(self.l) 523 invalid_lacv.subtype = 0xff 524 invalid_buf = invalid_lacv.serialize() 525 slow.parser(invalid_buf) 526 527 @raises(Exception) 528 def test_invalid_version(self): 529 invalid_lacv = copy.deepcopy(self.l) 530 invalid_lacv.version = 0xff 531 invalid_buf = invalid_lacv.serialize() 532 slow.parser(invalid_buf) 533 534 @raises(Exception) 535 def test_invalid_actor_tag(self): 536 invalid_lacv = copy.deepcopy(self.l) 537 invalid_lacv.actor_tag = 0x04 538 invalid_buf = invalid_lacv.serialize() 539 slow.parser(invalid_buf) 540 541 @raises(Exception) 542 def test_invalid_actor_length(self): 543 invalid_lacv = copy.deepcopy(self.l) 544 invalid_lacv.actor_length = 50 545 invalid_buf = invalid_lacv.serialize() 546 slow.parser(invalid_buf) 547 548 @raises(Exception) 549 def test_invalid_partner_tag(self): 550 invalid_lacv = copy.deepcopy(self.l) 551 invalid_lacv.partner_tag = 0x01 552 invalid_buf = invalid_lacv.serialize() 553 slow.parser(invalid_buf) 554 555 @raises(Exception) 556 def test_invalid_partner_length(self): 557 invalid_lacv = copy.deepcopy(self.l) 558 invalid_lacv.partner_length = 0 559 invalid_buf = invalid_lacv.serialize() 560 slow.parser(invalid_buf) 561 562 @raises(Exception) 563 def test_invalid_collector_tag(self): 564 invalid_lacv = copy.deepcopy(self.l) 565 invalid_lacv.collector_tag = 0x00 566 invalid_buf = invalid_lacv.serialize() 567 slow.parser(invalid_buf) 568 569 @raises(Exception) 570 def test_invalid_collector_length(self): 571 invalid_lacv = copy.deepcopy(self.l) 572 invalid_lacv.collector_length = 20 573 invalid_buf = invalid_lacv.serialize() 574 slow.parser(invalid_buf) 575 576 @raises(Exception) 577 def test_invalid_terminator_tag(self): 578 invalid_lacv = copy.deepcopy(self.l) 579 invalid_lacv.terminator_tag = 0x04 580 invalid_buf = invalid_lacv.serialize() 581 slow.parser(invalid_buf) 582 583 @raises(Exception) 584 def test_invalid_terminator_length(self): 585 invalid_lacv = copy.deepcopy(self.l) 586 invalid_lacv.terminator_length = self.trm_len 587 invalid_buf = invalid_lacv.serialize() 588 slow.parser(invalid_buf) 589 590 @raises(Exception) 591 def test_invalid_actor_state_activity(self): 592 l = lacp(self.version, 593 self.actor_system_priority, 594 self.actor_system, 595 self.actor_key, 596 self.actor_port_priority, 597 self.actor_port, 598 2, 599 self.actor_state_timeout, 600 self.actor_state_aggregation, 601 self.actor_state_synchronization, 602 self.actor_state_collecting, 603 self.actor_state_distributing, 604 self.actor_state_defaulted, 605 self.actor_state_expired, 606 self.partner_system_priority, 607 self.partner_system, 608 self.partner_key, 609 self.partner_port_priority, 610 self.partner_port, 611 self.partner_state_activity, 612 self.partner_state_timeout, 613 self.partner_state_aggregation, 614 self.partner_state_synchronization, 615 self.partner_state_collecting, 616 self.partner_state_distributing, 617 self.partner_state_defaulted, 618 self.partner_state_expired, 619 self.collector_max_delay) 620 l.serialize() 621 622 @raises(Exception) 623 def test_invalid_actor_state_timeout(self): 624 l = lacp(self.version, 625 self.actor_system_priority, 626 self.actor_system, 627 self.actor_key, 628 self.actor_port_priority, 629 self.actor_port, 630 self.actor_state_activity, 631 2, 632 self.actor_state_aggregation, 633 self.actor_state_synchronization, 634 self.actor_state_collecting, 635 self.actor_state_distributing, 636 self.actor_state_defaulted, 637 self.actor_state_expired, 638 self.partner_system_priority, 639 self.partner_system, 640 self.partner_key, 641 self.partner_port_priority, 642 self.partner_port, 643 self.partner_state_activity, 644 self.partner_state_timeout, 645 self.partner_state_aggregation, 646 self.partner_state_synchronization, 647 self.partner_state_collecting, 648 self.partner_state_distributing, 649 self.partner_state_defaulted, 650 self.partner_state_expired, 651 self.collector_max_delay) 652 l.serialize() 653 654 @raises(Exception) 655 def test_invalid_actor_state_aggregation(self): 656 l = lacp(self.version, 657 self.actor_system_priority, 658 self.actor_system, 659 self.actor_key, 660 self.actor_port_priority, 661 self.actor_port, 662 self.actor_state_activity, 663 self.actor_state_timeout, 664 2, 665 self.actor_state_synchronization, 666 self.actor_state_collecting, 667 self.actor_state_distributing, 668 self.actor_state_defaulted, 669 self.actor_state_expired, 670 self.partner_system_priority, 671 self.partner_system, 672 self.partner_key, 673 self.partner_port_priority, 674 self.partner_port, 675 self.partner_state_activity, 676 self.partner_state_timeout, 677 self.partner_state_aggregation, 678 self.partner_state_synchronization, 679 self.partner_state_collecting, 680 self.partner_state_distributing, 681 self.partner_state_defaulted, 682 self.partner_state_expired, 683 self.collector_max_delay) 684 l.serialize() 685 686 @raises(Exception) 687 def test_invalid_actor_state_synchronization(self): 688 l = lacp(self.version, 689 self.actor_system_priority, 690 self.actor_system, 691 self.actor_key, 692 self.actor_port_priority, 693 self.actor_port, 694 self.actor_state_activity, 695 self.actor_state_timeout, 696 self.actor_state_aggregation, 697 2, 698 self.actor_state_collecting, 699 self.actor_state_distributing, 700 self.actor_state_defaulted, 701 self.actor_state_expired, 702 self.partner_system_priority, 703 self.partner_system, 704 self.partner_key, 705 self.partner_port_priority, 706 self.partner_port, 707 self.partner_state_activity, 708 self.partner_state_timeout, 709 self.partner_state_aggregation, 710 self.partner_state_synchronization, 711 self.partner_state_collecting, 712 self.partner_state_distributing, 713 self.partner_state_defaulted, 714 self.partner_state_expired, 715 self.collector_max_delay) 716 l.serialize() 717 718 @raises(Exception) 719 def test_invalid_actor_state_collecting(self): 720 l = lacp(self.version, 721 self.actor_system_priority, 722 self.actor_system, 723 self.actor_key, 724 self.actor_port_priority, 725 self.actor_port, 726 self.actor_state_activity, 727 self.actor_state_timeout, 728 self.actor_state_aggregation, 729 self.actor_state_synchronization, 730 2, 731 self.actor_state_distributing, 732 self.actor_state_defaulted, 733 self.actor_state_expired, 734 self.partner_system_priority, 735 self.partner_system, 736 self.partner_key, 737 self.partner_port_priority, 738 self.partner_port, 739 self.partner_state_activity, 740 self.partner_state_timeout, 741 self.partner_state_aggregation, 742 self.partner_state_synchronization, 743 self.partner_state_collecting, 744 self.partner_state_distributing, 745 self.partner_state_defaulted, 746 self.partner_state_expired, 747 self.collector_max_delay) 748 l.serialize() 749 750 @raises(Exception) 751 def test_invalid_actor_state_distributing(self): 752 l = lacp(self.version, 753 self.actor_system_priority, 754 self.actor_system, 755 self.actor_key, 756 self.actor_port_priority, 757 self.actor_port, 758 self.actor_state_activity, 759 self.actor_state_timeout, 760 self.actor_state_aggregation, 761 self.actor_state_synchronization, 762 self.actor_state_collecting, 763 2, 764 self.actor_state_defaulted, 765 self.actor_state_expired, 766 self.partner_system_priority, 767 self.partner_system, 768 self.partner_key, 769 self.partner_port_priority, 770 self.partner_port, 771 self.partner_state_activity, 772 self.partner_state_timeout, 773 self.partner_state_aggregation, 774 self.partner_state_synchronization, 775 self.partner_state_collecting, 776 self.partner_state_distributing, 777 self.partner_state_defaulted, 778 self.partner_state_expired, 779 self.collector_max_delay) 780 l.serialize() 781 782 @raises(Exception) 783 def test_invalid_actor_state_defaulted(self): 784 l = lacp(self.version, 785 self.actor_system_priority, 786 self.actor_system, 787 self.actor_key, 788 self.actor_port_priority, 789 self.actor_port, 790 self.actor_state_activity, 791 self.actor_state_timeout, 792 self.actor_state_aggregation, 793 self.actor_state_synchronization, 794 self.actor_state_collecting, 795 self.actor_state_distributing, 796 2, 797 self.actor_state_expired, 798 self.partner_system_priority, 799 self.partner_system, 800 self.partner_key, 801 self.partner_port_priority, 802 self.partner_port, 803 self.partner_state_activity, 804 self.partner_state_timeout, 805 self.partner_state_aggregation, 806 self.partner_state_synchronization, 807 self.partner_state_collecting, 808 self.partner_state_distributing, 809 self.partner_state_defaulted, 810 self.partner_state_expired, 811 self.collector_max_delay) 812 l.serialize() 813 814 @raises(Exception) 815 def test_invalid_actor_state_expired(self): 816 l = lacp(self.version, 817 self.actor_system_priority, 818 self.actor_system, 819 self.actor_key, 820 self.actor_port_priority, 821 self.actor_port, 822 self.actor_state_activity, 823 self.actor_state_timeout, 824 self.actor_state_aggregation, 825 self.actor_state_synchronization, 826 self.actor_state_collecting, 827 self.actor_state_distributing, 828 self.actor_state_defaulted, 829 2, 830 self.partner_system_priority, 831 self.partner_system, 832 self.partner_key, 833 self.partner_port_priority, 834 self.partner_port, 835 self.partner_state_activity, 836 self.partner_state_timeout, 837 self.partner_state_aggregation, 838 self.partner_state_synchronization, 839 self.partner_state_collecting, 840 self.partner_state_distributing, 841 self.partner_state_defaulted, 842 self.partner_state_expired, 843 self.collector_max_delay) 844 l.serialize() 845 846 @raises(Exception) 847 def test_invalid_partner_state_activity(self): 848 l = lacp(self.version, 849 self.actor_system_priority, 850 self.actor_system, 851 self.actor_key, 852 self.actor_port_priority, 853 self.actor_port, 854 self.actor_state_activity, 855 self.actor_state_timeout, 856 self.actor_state_aggregation, 857 self.actor_state_synchronization, 858 self.actor_state_collecting, 859 self.actor_state_distributing, 860 self.actor_state_defaulted, 861 self.actor_state_expired, 862 self.partner_system_priority, 863 self.partner_system, 864 self.partner_key, 865 self.partner_port_priority, 866 self.partner_port, 867 -1, 868 self.partner_state_timeout, 869 self.partner_state_aggregation, 870 self.partner_state_synchronization, 871 self.partner_state_collecting, 872 self.partner_state_distributing, 873 self.partner_state_defaulted, 874 self.partner_state_expired, 875 self.collector_max_delay) 876 l.serialize() 877 878 @raises(Exception) 879 def test_invalid_partner_state_timeout(self): 880 l = lacp(self.version, 881 self.actor_system_priority, 882 self.actor_system, 883 self.actor_key, 884 self.actor_port_priority, 885 self.actor_port, 886 self.actor_state_activity, 887 self.actor_state_timeout, 888 self.actor_state_aggregation, 889 self.actor_state_synchronization, 890 self.actor_state_collecting, 891 self.actor_state_distributing, 892 self.actor_state_defaulted, 893 self.actor_state_expired, 894 self.partner_system_priority, 895 self.partner_system, 896 self.partner_key, 897 self.partner_port_priority, 898 self.partner_port, 899 self.partner_state_activity, 900 -1, 901 self.partner_state_aggregation, 902 self.partner_state_synchronization, 903 self.partner_state_collecting, 904 self.partner_state_distributing, 905 self.partner_state_defaulted, 906 self.partner_state_expired, 907 self.collector_max_delay) 908 l.serialize() 909 910 @raises(Exception) 911 def test_invalid_partner_state_aggregation(self): 912 l = lacp(self.version, 913 self.actor_system_priority, 914 self.actor_system, 915 self.actor_key, 916 self.actor_port_priority, 917 self.actor_port, 918 self.actor_state_activity, 919 self.actor_state_timeout, 920 self.actor_state_aggregation, 921 self.actor_state_synchronization, 922 self.actor_state_collecting, 923 self.actor_state_distributing, 924 self.actor_state_defaulted, 925 self.actor_state_expired, 926 self.partner_system_priority, 927 self.partner_system, 928 self.partner_key, 929 self.partner_port_priority, 930 self.partner_port, 931 self.partner_state_activity, 932 self.partner_state_timeout, 933 -1, 934 self.partner_state_synchronization, 935 self.partner_state_collecting, 936 self.partner_state_distributing, 937 self.partner_state_defaulted, 938 self.partner_state_expired, 939 self.collector_max_delay) 940 l.serialize() 941 942 @raises(Exception) 943 def test_invalid_partner_state_synchronization(self): 944 l = lacp(self.version, 945 self.actor_system_priority, 946 self.actor_system, 947 self.actor_key, 948 self.actor_port_priority, 949 self.actor_port, 950 self.actor_state_activity, 951 self.actor_state_timeout, 952 self.actor_state_aggregation, 953 self.actor_state_synchronization, 954 self.actor_state_collecting, 955 self.actor_state_distributing, 956 self.actor_state_defaulted, 957 self.actor_state_expired, 958 self.partner_system_priority, 959 self.partner_system, 960 self.partner_key, 961 self.partner_port_priority, 962 self.partner_port, 963 self.partner_state_activity, 964 self.partner_state_timeout, 965 self.partner_state_aggregation, 966 -1, 967 self.partner_state_collecting, 968 self.partner_state_distributing, 969 self.partner_state_defaulted, 970 self.partner_state_expired, 971 self.collector_max_delay) 972 l.serialize() 973 974 @raises(Exception) 975 def test_invalid_partner_state_collecting(self): 976 l = lacp(self.version, 977 self.actor_system_priority, 978 self.actor_system, 979 self.actor_key, 980 self.actor_port_priority, 981 self.actor_port, 982 self.actor_state_activity, 983 self.actor_state_timeout, 984 self.actor_state_aggregation, 985 self.actor_state_synchronization, 986 self.actor_state_collecting, 987 self.actor_state_distributing, 988 self.actor_state_defaulted, 989 self.actor_state_expired, 990 self.partner_system_priority, 991 self.partner_system, 992 self.partner_key, 993 self.partner_port_priority, 994 self.partner_port, 995 self.partner_state_activity, 996 self.partner_state_timeout, 997 self.partner_state_aggregation, 998 self.partner_state_synchronization, 999 -1, 1000 self.partner_state_distributing, 1001 self.partner_state_defaulted, 1002 self.partner_state_expired, 1003 self.collector_max_delay) 1004 l.serialize() 1005 1006 @raises(Exception) 1007 def test_invalid_partner_state_distributing(self): 1008 l = lacp(self.version, 1009 self.actor_system_priority, 1010 self.actor_system, 1011 self.actor_key, 1012 self.actor_port_priority, 1013 self.actor_port, 1014 self.actor_state_activity, 1015 self.actor_state_timeout, 1016 self.actor_state_aggregation, 1017 self.actor_state_synchronization, 1018 self.actor_state_collecting, 1019 self.actor_state_distributing, 1020 self.actor_state_defaulted, 1021 self.actor_state_expired, 1022 self.partner_system_priority, 1023 self.partner_system, 1024 self.partner_key, 1025 self.partner_port_priority, 1026 self.partner_port, 1027 self.partner_state_activity, 1028 self.partner_state_timeout, 1029 self.partner_state_aggregation, 1030 self.partner_state_synchronization, 1031 self.partner_state_collecting, 1032 -1, 1033 self.partner_state_defaulted, 1034 self.partner_state_expired, 1035 self.collector_max_delay) 1036 l.serialize() 1037 1038 @raises(Exception) 1039 def test_invalid_partner_state_defaulted(self): 1040 l = lacp(self.version, 1041 self.actor_system_priority, 1042 self.actor_system, 1043 self.actor_key, 1044 self.actor_port_priority, 1045 self.actor_port, 1046 self.actor_state_activity, 1047 self.actor_state_timeout, 1048 self.actor_state_aggregation, 1049 self.actor_state_synchronization, 1050 self.actor_state_collecting, 1051 self.actor_state_distributing, 1052 self.actor_state_defaulted, 1053 self.actor_state_expired, 1054 self.partner_system_priority, 1055 self.partner_system, 1056 self.partner_key, 1057 self.partner_port_priority, 1058 self.partner_port, 1059 self.partner_state_activity, 1060 self.partner_state_timeout, 1061 self.partner_state_aggregation, 1062 self.partner_state_synchronization, 1063 self.partner_state_collecting, 1064 self.partner_state_distributing, 1065 -1, 1066 self.partner_state_expired, 1067 self.collector_max_delay) 1068 l.serialize() 1069 1070 @raises(Exception) 1071 def test_invalid_partner_state_expired(self): 1072 l = lacp(self.version, 1073 self.actor_system_priority, 1074 self.actor_system, 1075 self.actor_key, 1076 self.actor_port_priority, 1077 self.actor_port, 1078 self.actor_state_activity, 1079 self.actor_state_timeout, 1080 self.actor_state_aggregation, 1081 self.actor_state_synchronization, 1082 self.actor_state_collecting, 1083 self.actor_state_distributing, 1084 self.actor_state_defaulted, 1085 self.actor_state_expired, 1086 self.partner_system_priority, 1087 self.partner_system, 1088 self.partner_key, 1089 self.partner_port_priority, 1090 self.partner_port, 1091 self.partner_state_activity, 1092 self.partner_state_timeout, 1093 self.partner_state_aggregation, 1094 self.partner_state_synchronization, 1095 self.partner_state_collecting, 1096 self.partner_state_distributing, 1097 self.partner_state_defaulted, 1098 -1, 1099 self.collector_max_delay) 1100 l.serialize() 1101 1102 def test_json(self): 1103 jsondict = self.l.to_jsondict() 1104 l = lacp.from_jsondict(jsondict['lacp']) 1105 eq_(str(self.l), str(l)) 1106