# -*- coding: utf-8 -*-
# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Unittests for merge_logs."""

from __future__ import print_function

import datetime
import sys

import dateutil.tz  # pylint: disable=import-error

from chromite.lib import cros_test_lib
from chromite.scripts import merge_logs

pytestmark = cros_test_lib.pytestmark_inside_only


assert sys.version_info >= (3, 6), 'This module requires Python 3.6+'


TZOFFSET = dateutil.tz.tzoffset(None, -25200)


class ParseDateTestBase(cros_test_lib.MockTestCase):
  """Test that ParseDate behaves correctly."""

  def setUp(self):
    now = datetime.datetime(2017, 8, 1, 13, 14, 8, 357309)
    self.now_mock = self.PatchObject(merge_logs, 'Now', return_value=now)


class ParseDateTest(ParseDateTestBase):
  """Test that ParseDate behaves correctly."""

  def testBasicFunctionality(self):
    # ARC
    dt = merge_logs.ParseDate('2017-07-31 07:05:10.257860139-07:00')
    self.assertEqual(dt, datetime.datetime(2017, 7, 31, 7, 5, 10, 257860,
                                           TZOFFSET))

    # CrOS
    dt = merge_logs.ParseDate('2017/07/31 09:18:08.871')
    self.assertEqual(dt, datetime.datetime(2017, 7, 31, 9, 18, 8, 871000,
                                           TZOFFSET))

    # Status Log
    dt = merge_logs.ParseDate('Jul 31 09:17:02')
    self.assertEqual(dt, datetime.datetime(datetime.datetime.now().year, 7, 31,
                                           9, 17, 2, 0, TZOFFSET))

    # Sysinfo
    dt = merge_logs.ParseDate('2017-07-31T09:17:25.907285-07:00')
    self.assertEqual(dt, datetime.datetime(2017, 7, 31, 9, 17, 25, 907285,
                                           TZOFFSET))

  def testUTC(self):
    dt = merge_logs.ParseDate('2017-07-31T13:55:29.455280+00:00')
    self.assertEqual(dt, datetime.datetime(2017, 7, 31, 13, 55, 29, 455280,
                                           dateutil.tz.tzutc()))


class ParseAutoservDateTest(ParseDateTestBase):
  """Test that ParseAutoservDate behaves correctly."""

  def testBasicFunctionality(self):
    dt = merge_logs.ParseAutoservDate('07/31 09:17:27.919')
    self.assertEqual(dt, datetime.datetime(2017, 7, 31, 9, 17, 27, 919000,
                                           TZOFFSET))


class ParseChromeDateTest(ParseDateTestBase):
  """Test that ParseChromeDate behaves correctly."""

  def testBasicFunctionality(self):
    dt = merge_logs.ParseChromeDate('0731/072833.409065')
    self.assertEqual(dt, datetime.datetime(2017, 7, 31, 7, 28, 33, 409065,
                                           TZOFFSET))


class ParsePowerdDateTest(ParseDateTestBase):
  """Test that ParsePowerdDate behaves correctly."""

  def testBasicFunctionality(self):
    dt = merge_logs.ParsePowerdDate('0731/070232')
    self.assertEqual(dt, datetime.datetime(2017, 7, 31, 7, 2, 32, 0,
                                           TZOFFSET))
