Feature: Pio::Arp
  Scenario: create an ARP request
    When I try to create a packet with:
      """
      Pio::Arp::Request.new(
        source_mac: '00:26:82:eb:ea:d1',
        sender_protocol_address: '192.168.83.3',
        target_protocol_address: '192.168.83.254'
      )
      """
    Then it should finish successfully
    And the packet have the following fields and values:
      | field                   |             value |
      | class                   | Pio::Arp::Request |
      | destination_mac         | ff:ff:ff:ff:ff:ff |
      | source_mac              | 00:26:82:eb:ea:d1 |
      | ether_type              |              2054 |
      | hardware_type           |                 1 |
      | protocol_type           |              2048 |
      | hardware_length         |                 6 |
      | protocol_length         |                 4 |
      | operation               |                 1 |
      | sender_hardware_address | 00:26:82:eb:ea:d1 |
      | sender_protocol_address |      192.168.83.3 |
      | target_hardware_address | 00:00:00:00:00:00 |
      | target_protocol_address |    192.168.83.254 |

  Scenario: create an ARP reply
    When I try to create a packet with:
      """
      Pio::Arp::Reply.new(
        source_mac: '00:16:9d:1d:9c:c4',
        destination_mac: '00:26:82:eb:ea:d1',
        sender_protocol_address: '192.168.83.254',
        target_protocol_address: '192.168.83.3'
      )
      """
    Then it should finish successfully
    And the packet have the following fields and values:
      | field                   |             value |
      | class                   |   Pio::Arp::Reply |
      | destination_mac         | 00:26:82:eb:ea:d1 |
      | source_mac              | 00:16:9d:1d:9c:c4 |
      | ether_type              |              2054 |
      | hardware_type           |                 1 |
      | protocol_type           |              2048 |
      | hardware_length         |                 6 |
      | protocol_length         |                 4 |
      | operation               |                 2 |
      | sender_hardware_address | 00:16:9d:1d:9c:c4 |
      | sender_protocol_address |    192.168.83.254 |
      | target_hardware_address | 00:26:82:eb:ea:d1 |
      | target_protocol_address |      192.168.83.3 |

  Scenario: parse arp.pcap
    When I try to parse a file named "arp.pcap" with "Pio::Arp" class
    Then it should finish successfully

  Scenario: parse arp-storm.pcap
    When I try to parse a file named "arp-storm.pcap" with "Pio::Arp" class
    Then it should finish successfully