# Copyright 2016 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.

"""Test cros_generate_os_release."""

from __future__ import print_function

import os

from chromite.lib import cros_build_lib
from chromite.lib import cros_test_lib
from chromite.lib import osutils
import cros_generate_os_release


class CrosGenerateOsReleaseTest(cros_test_lib.TempDirTestCase):
  """Tests GenerateOsRelease."""

  def setUp(self):
    # Use a fresh tempdir as the root for each test case.
    self.osrelease = os.path.join(self.tempdir, "etc", "os-release")
    self.osreleased = os.path.join(self.tempdir, "etc", "os-release.d")
    osutils.SafeMakedirs(self.osreleased)

  def testOnlyOsRelease(self):
    """Tests the script without /etc/os-release."""
    osutils.WriteFile(os.path.join(self.osreleased, "TEST"), "hello")
    cros_generate_os_release.GenerateOsRelease(self.tempdir)
    self.assertEquals("TEST=hello\n", osutils.ReadFile(self.osrelease))

  def testOnlyOsReleaseD(self):
    """Tests the script without /etc/os-release.d."""
    osutils.RmDir(self.osreleased)
    osutils.WriteFile(self.osrelease, "TEST=bonjour\n")

    cros_generate_os_release.GenerateOsRelease(self.tempdir)
    self.assertEquals("TEST=bonjour\n", osutils.ReadFile(self.osrelease))

  def testFailOnDuplicate(self):
    """Tests with a field set both in os-release and os-release.d/."""
    osutils.WriteFile(os.path.join(self.osreleased, "TEST"), "hello")
    osutils.WriteFile(self.osrelease, "TEST=bonjour")

    self.assertRaises(cros_build_lib.DieSystemExit,
                      cros_generate_os_release.GenerateOsRelease, self.tempdir)

  def testNormal(self):
    """Normal scenario: both os-release and os-release.d are present."""
    osutils.WriteFile(os.path.join(self.osreleased, "TEST1"), "hello")
    osutils.WriteFile(self.osrelease, "TEST2=bonjour")

    default_params = {"TEST1": "hello2",
                      "TEST3": "hola"}

    cros_generate_os_release.GenerateOsRelease(self.tempdir,
                                               default_params=default_params)
    output = osutils.ReadFile(self.osrelease).splitlines()
    output.sort()
    self.assertEquals(["TEST1=hello",
                       "TEST2=bonjour",
                       "TEST3=hola"],
                      output)
