Feature: Pio::Hello
  Scenario: new
    When I try to create an OpenFlow message with:
      """
      Pio::Hello.new
      """
    Then it should finish successfully
    And the message have the following fields and values:
      | field          |      value |
      | class          | Pio::Hello |
      | ofp_version    |          1 |
      | message_type   |          0 |
      | message_length |          8 |
      | transaction_id |          0 |
      | xid            |          0 |
      | body           |            |

  Scenario: new(transaction_id: 123)
    When I try to create an OpenFlow message with:
      """
      Pio::Hello.new(transaction_id: 123)
      """
    Then it should finish successfully
    And the message have the following fields and values:
      | field          |      value |
      | class          | Pio::Hello |
      | ofp_version    |          1 |
      | message_type   |          0 |
      | message_length |          8 |
      | transaction_id |        123 |
      | xid            |        123 |
      | body           |            |

  Scenario: new(xid: 123)
    When I try to create an OpenFlow message with:
      """
      Pio::Hello.new(xid: 123)
      """
    Then it should finish successfully
    And the message have the following fields and values:
      | field          |      value |
      | class          | Pio::Hello |
      | ofp_version    |          1 |
      | message_type   |          0 |
      | message_length |          8 |
      | transaction_id |        123 |
      | xid            |        123 |
      | body           |            |

  Scenario: new(xid: -1) and error
    When I try to create an OpenFlow message with:
      """
      Pio::Hello.new(xid: -1)
      """
    Then it should fail with "ArgumentError", "Transaction ID should be an unsigned 32-bit integer."

  Scenario: new(xid: 2**32) and error
    When I try to create an OpenFlow message with:
      """
      Pio::Hello.new(xid: 2**32)
      """
    Then it should fail with "ArgumentError", "Transaction ID should be an unsigned 32-bit integer."

  Scenario: read
    When I try to parse a file named "open_flow10/hello.raw" with "Hello" class
    Then it should finish successfully
    And the message have the following fields and values:
      | field          |      value |
      | class          | Pio::Hello |
      | ofp_version    |          1 |
      | message_type   |          0 |
      | message_length |          8 |
      | transaction_id |         23 |
      | xid            |         23 |
      | body           |            |

  Scenario: parse error
    When I try to parse a file named "open_flow10/features_request.raw" with "Pio::Hello" class
    Then it should fail with "Pio::ParseError", "Invalid Hello message."