blob: 046b5bf9beefc55997524362e21d402448be4cd0 [file] [log] [blame]
Mike Frysingere58c0e22017-10-04 15:43:30 -04001# -*- coding: utf-8 -*-
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -07002# Copyright 2016 The Chromium OS Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Test cros_generate_os_release."""
7
8from __future__ import print_function
9
10import os
Mike Frysinger03b983f2020-02-21 02:31:49 -050011import sys
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -070012
13from chromite.lib import cros_build_lib
14from chromite.lib import cros_test_lib
15from chromite.lib import osutils
Mike Frysinger03b983f2020-02-21 02:31:49 -050016from chromite.scripts import cros_generate_os_release
17
18
19assert sys.version_info >= (3, 6), 'This module requires Python 3.6+'
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -070020
21
22class CrosGenerateOsReleaseTest(cros_test_lib.TempDirTestCase):
23 """Tests GenerateOsRelease."""
24
25 def setUp(self):
26 # Use a fresh tempdir as the root for each test case.
Mike Frysinger80de5012019-08-01 14:10:53 -040027 self.osrelease = os.path.join(self.tempdir, 'etc', 'os-release')
28 self.osreleased = os.path.join(self.tempdir, 'etc', 'os-release.d')
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -070029 osutils.SafeMakedirs(self.osreleased)
30
31 def testOnlyOsRelease(self):
32 """Tests the script without /etc/os-release."""
Mike Frysinger80de5012019-08-01 14:10:53 -040033 osutils.WriteFile(os.path.join(self.osreleased, 'TEST'), 'hello')
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -070034 cros_generate_os_release.GenerateOsRelease(self.tempdir)
Mike Frysinger2d589a12019-08-25 14:15:12 -040035 self.assertEqual('TEST=hello\n', osutils.ReadFile(self.osrelease))
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -070036
37 def testOnlyOsReleaseD(self):
38 """Tests the script without /etc/os-release.d."""
39 osutils.RmDir(self.osreleased)
Mike Frysinger80de5012019-08-01 14:10:53 -040040 osutils.WriteFile(self.osrelease, 'TEST=bonjour\n')
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -070041
42 cros_generate_os_release.GenerateOsRelease(self.tempdir)
Mike Frysinger2d589a12019-08-25 14:15:12 -040043 self.assertEqual('TEST=bonjour\n', osutils.ReadFile(self.osrelease))
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -070044
45 def testFailOnDuplicate(self):
46 """Tests with a field set both in os-release and os-release.d/."""
Mike Frysinger80de5012019-08-01 14:10:53 -040047 osutils.WriteFile(os.path.join(self.osreleased, 'TEST'), 'hello')
48 osutils.WriteFile(self.osrelease, 'TEST=bonjour')
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -070049
50 self.assertRaises(cros_build_lib.DieSystemExit,
51 cros_generate_os_release.GenerateOsRelease, self.tempdir)
52
53 def testNormal(self):
54 """Normal scenario: both os-release and os-release.d are present."""
Mike Frysinger80de5012019-08-01 14:10:53 -040055 osutils.WriteFile(os.path.join(self.osreleased, 'TEST1'), 'hello')
56 osutils.WriteFile(self.osrelease, 'TEST2=bonjour')
Bertrand SIMONNET83ee6ce2014-10-06 14:20:10 -070057
Mike Frysinger80de5012019-08-01 14:10:53 -040058 default_params = {'TEST1': 'hello2',
59 'TEST3': 'hola'}
Andrey Ulanov2568e172016-05-04 17:25:52 -070060
61 cros_generate_os_release.GenerateOsRelease(self.tempdir,
62 default_params=default_params)
63 output = osutils.ReadFile(self.osrelease).splitlines()
64 output.sort()
Mike Frysinger2d589a12019-08-25 14:15:12 -040065 self.assertEqual(['TEST1=hello',
66 'TEST2=bonjour',
67 'TEST3=hola'],
68 output)