// Copyright 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 "components/cronet/native/native_metrics_util.h"

#include "base/test/gtest_util.h"
#include "base/time/time.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace cronet {

namespace native_metrics_util {

namespace {

TEST(NativeMetricsUtilTest, ConvertsTimes) {
  constexpr auto start_delta = base::TimeDelta::FromMilliseconds(20);
  constexpr auto event_delta = base::TimeDelta::FromMilliseconds(30);

  base::Optional<Cronet_DateTime> converted;
  ConvertTime(base::TimeTicks::UnixEpoch() + event_delta,
              base::TimeTicks::UnixEpoch() + start_delta,
              base::Time::UnixEpoch() + start_delta, &converted);
  ASSERT_TRUE(converted.has_value());
  EXPECT_EQ(converted->value, 30);
}

TEST(NativeMetricsUtilTest, OverwritesOldOutParam) {
  constexpr auto start_delta = base::TimeDelta::FromMilliseconds(20);
  constexpr auto event_delta = base::TimeDelta::FromMilliseconds(30);

  base::Optional<Cronet_DateTime> converted;
  converted.emplace();
  converted->value = 60;
  ConvertTime(base::TimeTicks::UnixEpoch() + event_delta,
              base::TimeTicks::UnixEpoch() + start_delta,
              base::Time::UnixEpoch() + start_delta, &converted);
  ASSERT_TRUE(converted.has_value());
  EXPECT_EQ(converted->value, 30);
}

TEST(NativeMetricsUtilTest, NullTicks) {
  constexpr auto start_delta = base::TimeDelta::FromMilliseconds(20);

  base::Optional<Cronet_DateTime> converted;
  ConvertTime(base::TimeTicks(), base::TimeTicks::UnixEpoch() + start_delta,
              base::Time::UnixEpoch() + start_delta, &converted);
  ASSERT_FALSE(converted.has_value());
}

TEST(NativeMetricsUtilTest, NullStartTicks) {
  constexpr auto start_delta = base::TimeDelta::FromMilliseconds(20);
  constexpr auto event_delta = base::TimeDelta::FromMilliseconds(30);

  base::Optional<Cronet_DateTime> converted;
  ConvertTime(base::TimeTicks::UnixEpoch() + event_delta, base::TimeTicks(),
              base::Time::UnixEpoch() + start_delta, &converted);
  ASSERT_FALSE(converted.has_value());
}

TEST(NativeMetricsUtilTest, NullStartTime) {
  constexpr auto start_delta = base::TimeDelta::FromMilliseconds(20);
  constexpr auto event_delta = base::TimeDelta::FromMilliseconds(30);

  base::Optional<Cronet_DateTime> converted;
  EXPECT_DCHECK_DEATH(ConvertTime(base::TimeTicks::UnixEpoch() + event_delta,
                                  base::TimeTicks::UnixEpoch() + start_delta,
                                  base::Time(), &converted));
}

}  // namespace

}  // namespace native_metrics_util

}  // namespace cronet
