2019-03-08 22:06:45 +03:00
|
|
|
#!/usr/bin/env python3
|
2019-06-20 02:58:25 +03:00
|
|
|
# Copyright (c) Facebook, Inc. and its affiliates.
|
2019-03-08 22:06:45 +03:00
|
|
|
#
|
2019-06-20 02:58:25 +03:00
|
|
|
# This software may be used and distributed according to the terms of the
|
|
|
|
# GNU General Public License version 2.
|
2019-03-08 22:06:45 +03:00
|
|
|
|
|
|
|
import typing
|
|
|
|
|
2020-03-25 21:44:05 +03:00
|
|
|
from eden.fs.cli.config import EdenInstance
|
|
|
|
from eden.fs.cli.doctor import check_os
|
|
|
|
from eden.fs.cli.doctor.test.lib.fake_eden_instance import FakeEdenInstance
|
|
|
|
from eden.fs.cli.doctor.test.lib.testcase import DoctorTestBase
|
2019-03-08 22:06:45 +03:00
|
|
|
|
|
|
|
|
|
|
|
class OperatingSystemsCheckTest(DoctorTestBase):
|
|
|
|
def setUp(self) -> None:
|
|
|
|
test_config = {
|
|
|
|
"doctor.minimum-kernel-version": "4.11.3-67",
|
2019-04-06 03:05:09 +03:00
|
|
|
"doctor.known-bad-kernel-versions": "TODO,TEST",
|
2019-03-08 22:06:45 +03:00
|
|
|
}
|
|
|
|
tmp_dir = self.make_temporary_directory()
|
|
|
|
self.instance = FakeEdenInstance(tmp_dir, config=test_config)
|
|
|
|
|
|
|
|
def test_kernel_version_split(self) -> None:
|
|
|
|
test_versions = (
|
|
|
|
("1", (1, 0, 0, 0)),
|
|
|
|
("1.2", (1, 2, 0, 0)),
|
|
|
|
("1.2.3", (1, 2, 3, 0)),
|
|
|
|
("1.2.3.4", (1, 2, 3, 4)),
|
|
|
|
("1.2.3-4", (1, 2, 3, 4)),
|
|
|
|
("1.2.3.4-abc", (1, 2, 3, 4)),
|
|
|
|
("1.2.3-4.abc", (1, 2, 3, 4)),
|
|
|
|
("1.2.3.4-abc.def", (1, 2, 3, 4)),
|
|
|
|
("1.2.3-4.abc-def", (1, 2, 3, 4)),
|
|
|
|
)
|
|
|
|
for test_version, expected in test_versions:
|
|
|
|
with self.subTest(test_version=test_version):
|
|
|
|
result = check_os._parse_os_kernel_version(test_version)
|
|
|
|
self.assertEquals(result, expected)
|
|
|
|
|
|
|
|
def test_kernel_version_min(self) -> None:
|
|
|
|
# Each of these are ((test_value, expected_result), ...)
|
|
|
|
min_kernel_versions_tests = (
|
|
|
|
("4.6.7-73_fbk21_3608_gb5941a6", True),
|
|
|
|
("4.6", True),
|
|
|
|
("4.11", True),
|
|
|
|
("4.11.3", True),
|
|
|
|
("4.11.3.66", True),
|
2019-04-06 03:05:09 +03:00
|
|
|
("4.11.3-52_fbk13", True),
|
2019-03-08 22:06:45 +03:00
|
|
|
("4.11.3-77_fbk20_4162_g6e876878d18e", False),
|
|
|
|
("4.11.3-77", False),
|
|
|
|
)
|
|
|
|
for fake_release, expected in min_kernel_versions_tests:
|
|
|
|
with self.subTest(fake_release=fake_release):
|
|
|
|
result = check_os._os_is_kernel_version_too_old(
|
|
|
|
typing.cast(EdenInstance, self.instance), fake_release
|
|
|
|
)
|
|
|
|
self.assertIs(result, expected)
|
|
|
|
|
|
|
|
def test_bad_kernel_versions(self) -> None:
|
2019-04-06 03:05:09 +03:00
|
|
|
kernel_versions_tests = {
|
|
|
|
"999.2.3-4_TEST": True,
|
|
|
|
"777.1_TODO": True,
|
|
|
|
"4.16.18-151_fbk13": False,
|
|
|
|
}
|
|
|
|
for release, is_bad in kernel_versions_tests.items():
|
|
|
|
with self.subTest(release=release):
|
2019-03-08 22:06:45 +03:00
|
|
|
result = check_os._os_is_bad_release(
|
2019-04-06 03:05:09 +03:00
|
|
|
typing.cast(EdenInstance, self.instance), release
|
2019-03-08 22:06:45 +03:00
|
|
|
)
|
2019-04-06 03:05:09 +03:00
|
|
|
self.assertEqual(result, is_bad)
|
2019-03-08 22:06:45 +03:00
|
|
|
|
|
|
|
def test_custom_kernel_names(self) -> None:
|
|
|
|
custom_name = "4.16.18-custom_byme_3744_g7833bc918498"
|
|
|
|
instance = typing.cast(EdenInstance, self.instance)
|
|
|
|
self.assertFalse(check_os._os_is_kernel_version_too_old(instance, custom_name))
|
|
|
|
self.assertFalse(check_os._os_is_bad_release(instance, custom_name))
|