// Copyright 2013 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 "net/cookies/cookie_constants.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace net {

TEST(CookieConstantsTest, TestCookiePriority) {
  // Basic cases.
  EXPECT_EQ("low", CookiePriorityToString(COOKIE_PRIORITY_LOW));
  EXPECT_EQ("medium", CookiePriorityToString(COOKIE_PRIORITY_MEDIUM));
  EXPECT_EQ("high", CookiePriorityToString(COOKIE_PRIORITY_HIGH));

  EXPECT_EQ(COOKIE_PRIORITY_LOW, StringToCookiePriority("low"));
  EXPECT_EQ(COOKIE_PRIORITY_MEDIUM, StringToCookiePriority("medium"));
  EXPECT_EQ(COOKIE_PRIORITY_HIGH, StringToCookiePriority("high"));

  // Case Insensitivity of StringToCookiePriority().
  EXPECT_EQ(COOKIE_PRIORITY_LOW, StringToCookiePriority("LOW"));
  EXPECT_EQ(COOKIE_PRIORITY_MEDIUM, StringToCookiePriority("Medium"));
  EXPECT_EQ(COOKIE_PRIORITY_HIGH, StringToCookiePriority("hiGH"));

  // Value of default priority.
  EXPECT_EQ(COOKIE_PRIORITY_DEFAULT, COOKIE_PRIORITY_MEDIUM);

  // Numeric values.
  EXPECT_LT(COOKIE_PRIORITY_LOW, COOKIE_PRIORITY_MEDIUM);
  EXPECT_LT(COOKIE_PRIORITY_MEDIUM, COOKIE_PRIORITY_HIGH);

  // Unrecognized tokens are interpreted as COOKIE_PRIORITY_DEFAULT.
  const char* const bad_tokens[] = {
    "", "lo", "lowerest", "high ", " high", "0"};
  for (const auto* bad_token : bad_tokens) {
    EXPECT_EQ(COOKIE_PRIORITY_DEFAULT, StringToCookiePriority(bad_token));
  }
}

// TODO(crbug.com/996811): Add tests for multiple possibly-invalid attributes.
TEST(CookieConstantsTest, TestCookieSameSite) {
  // Test case insensitivity
  EXPECT_EQ(CookieSameSite::NO_RESTRICTION, StringToCookieSameSite("None"));
  EXPECT_EQ(CookieSameSite::NO_RESTRICTION, StringToCookieSameSite("none"));
  EXPECT_EQ(CookieSameSite::NO_RESTRICTION, StringToCookieSameSite("NONE"));
  EXPECT_EQ(CookieSameSite::LAX_MODE, StringToCookieSameSite("Lax"));
  EXPECT_EQ(CookieSameSite::LAX_MODE, StringToCookieSameSite("LAX"));
  EXPECT_EQ(CookieSameSite::LAX_MODE, StringToCookieSameSite("lAx"));
  EXPECT_EQ(CookieSameSite::STRICT_MODE, StringToCookieSameSite("Strict"));
  EXPECT_EQ(CookieSameSite::STRICT_MODE, StringToCookieSameSite("STRICT"));
  EXPECT_EQ(CookieSameSite::STRICT_MODE, StringToCookieSameSite("sTrIcT"));
  EXPECT_EQ(CookieSameSite::UNSPECIFIED, StringToCookieSameSite("extended"));
  EXPECT_EQ(CookieSameSite::UNSPECIFIED, StringToCookieSameSite("EXTENDED"));
  EXPECT_EQ(CookieSameSite::UNSPECIFIED, StringToCookieSameSite("ExtenDED"));

  // Unrecognized tokens are interpreted as UNSPECIFIED.
  const char* const bad_tokens[] = {"",          "foo",   "none ",
                                    "strictest", " none", "0"};
  for (const auto* bad_token : bad_tokens) {
    EXPECT_EQ(CookieSameSite::UNSPECIFIED, StringToCookieSameSite(bad_token));
  }
}

TEST(CookieConstantsTest, TestReducePortRangeForCookieHistogram) {
  struct TestData {
    int input_port;
    CookiePort expected_enum;
  };

  const TestData kTestValues[] = {
      {-1234 /* Invalid port. */, CookiePort::kOther},
      {0 /* Invalid port. */, CookiePort::kOther},
      {1 /* Valid but outside range. */, CookiePort::kOther},
      {79 /* Valid but outside range. */, CookiePort::kOther},
      {80, CookiePort::k80},
      {445, CookiePort::k445},
      {3001, CookiePort::k3001},
      {4200, CookiePort::k4200},
      {5002, CookiePort::k5002},
      {7003, CookiePort::k7003},
      {8001, CookiePort::k8001},
      {8080, CookiePort::k8080},
      {8086 /* Valid but outside range. */, CookiePort::kOther},
      {8095, CookiePort::k8095},
      {8100, CookiePort::k8100},
      {8201, CookiePort::k8201},
      {8445, CookiePort::k8445},
      {8888, CookiePort::k8888},
      {9004, CookiePort::k9004},
      {9091, CookiePort::k9091},
      {65535 /* Valid but outside range. */, CookiePort::kOther},
      {655356 /* Invalid port. */, CookiePort::kOther},
  };

  for (const auto& value : kTestValues) {
    EXPECT_EQ(value.expected_enum,
              ReducePortRangeForCookieHistogram(value.input_port));
  }
}

}  // namespace net
