// 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 "quiche/quic/core/internet_checksum.h"

#include "quiche/quic/platform/api/quic_test.h"

namespace quic {
namespace {

// From the Numerical Example described in RFC 1071
// https://tools.ietf.org/html/rfc1071#section-3
TEST(InternetChecksumTest, MatchesRFC1071Example) {
  uint8_t data[] = {0x00, 0x01, 0xf2, 0x03, 0xf4, 0xf5, 0xf6, 0xf7};

  InternetChecksum checksum;
  checksum.Update(data, 8);
  uint16_t result = checksum.Value();
  auto* result_bytes = reinterpret_cast<uint8_t*>(&result);
  ASSERT_EQ(0x22, result_bytes[0]);
  ASSERT_EQ(0x0d, result_bytes[1]);
}

// Same as above, except 7 bytes. Should behave as if there was an 8th byte
// that equals 0.
TEST(InternetChecksumTest, MatchesRFC1071ExampleWithOddByteCount) {
  uint8_t data[] = {0x00, 0x01, 0xf2, 0x03, 0xf4, 0xf5, 0xf6};

  InternetChecksum checksum;
  checksum.Update(data, 7);
  uint16_t result = checksum.Value();
  auto* result_bytes = reinterpret_cast<uint8_t*>(&result);
  ASSERT_EQ(0x23, result_bytes[0]);
  ASSERT_EQ(0x04, result_bytes[1]);
}

// From the example described at:
// http://www.cs.berkeley.edu/~kfall/EE122/lec06/tsld023.htm
TEST(InternetChecksumTest, MatchesBerkleyExample) {
  uint8_t data[] = {0xe3, 0x4f, 0x23, 0x96, 0x44, 0x27, 0x99, 0xf3};

  InternetChecksum checksum;
  checksum.Update(data, 8);
  uint16_t result = checksum.Value();
  auto* result_bytes = reinterpret_cast<uint8_t*>(&result);
  ASSERT_EQ(0x1a, result_bytes[0]);
  ASSERT_EQ(0xff, result_bytes[1]);
}

TEST(InternetChecksumTest, ChecksumRequiringMultipleCarriesInLittleEndian) {
  uint8_t data[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00};

  // Data will accumulate to 0x0002FFFF
  // Summing lower and upper halves gives 0x00010001
  // Second sum of lower and upper halves gives 0x0002
  // One's complement gives 0xfffd, or [0xfd, 0xff] in network byte order
  InternetChecksum checksum;
  checksum.Update(data, 8);
  uint16_t result = checksum.Value();
  auto* result_bytes = reinterpret_cast<uint8_t*>(&result);
  EXPECT_EQ(0xfd, result_bytes[0]);
  EXPECT_EQ(0xff, result_bytes[1]);
}

}  // namespace
}  // namespace quic
