// Copyright (c) 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "quic/qbone/platform/tcp_packet.h"

#include <netinet/ip6.h>

#include <cstdint>

#include "absl/strings/string_view.h"
#include "quic/platform/api/quic_test.h"
#include "common/quiche_text_utils.h"

namespace quic {
namespace {

// clang-format off
constexpr uint8_t kReferenceTCPSYNPacket[] = {
  // START IPv6 Header
  // IPv6 with zero ToS and flow label
  0x60, 0x00, 0x00, 0x00,
  // Payload is 40 bytes
  0x00, 0x28,
  // Next header is TCP (6)
  0x06,
  // Hop limit is 64
  0x40,
  // Source address of ::1
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
  // Destination address of ::1
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
  // END IPv6 Header
  // START TCPv6 Header
  // Source port
  0xac, 0x1e,
  // Destination port
  0x27, 0x0f,
  // Sequence number
  0x4b, 0x01, 0xe8, 0x99,
  // Acknowledgement Sequence number,
  0x00, 0x00, 0x00, 0x00,
  // Offset
  0xa0,
  // Flags
  0x02,
  // Window
  0xaa, 0xaa,
  // Checksum
  0x2e, 0x21,
  // Urgent
  0x00, 0x00,
  // END TCPv6 Header
  // Options
  0x02, 0x04, 0xff, 0xc4, 0x04, 0x02, 0x08, 0x0a,
  0x1b, 0xb8, 0x52, 0xa1, 0x00, 0x00, 0x00, 0x00,
  0x01, 0x03, 0x03, 0x07,
};

constexpr uint8_t kReferenceTCPRSTPacket[] = {
  // START IPv6 Header
  // IPv6 with zero ToS and flow label
  0x60, 0x00, 0x00, 0x00,
  // Payload is 20 bytes
  0x00, 0x14,
  // Next header is TCP (6)
  0x06,
  // Hop limit is 64
  0x40,
  // Source address of ::1
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
  // Destination address of ::1
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
  // END IPv6 Header
  // START TCPv6 Header
  // Source port
  0x27, 0x0f,
  // Destination port
  0xac, 0x1e,
  // Sequence number
  0x00, 0x00, 0x00, 0x00,
  // Acknowledgement Sequence number,
  0x4b, 0x01, 0xe8, 0x9a,
  // Offset
  0x50,
  // Flags
  0x14,
  // Window
  0x00, 0x00,
  // Checksum
  0xa9, 0x05,
  // Urgent
  0x00, 0x00,
  // END TCPv6 Header
};
// clang-format on

}  // namespace

TEST(TcpPacketTest, CreatedPacketMatchesReference) {
  absl::string_view syn =
      absl::string_view(reinterpret_cast<const char*>(kReferenceTCPSYNPacket),
                        sizeof(kReferenceTCPSYNPacket));
  absl::string_view expected_packet =
      absl::string_view(reinterpret_cast<const char*>(kReferenceTCPRSTPacket),
                        sizeof(kReferenceTCPRSTPacket));
  CreateTcpResetPacket(syn, [&expected_packet](absl::string_view packet) {
    QUIC_LOG(INFO) << quiche::QuicheTextUtils::HexDump(packet);
    ASSERT_EQ(packet, expected_packet);
  });
}

}  // namespace quic
