blob: f9119ff17d917e4d383153fb7aecf9f69f018ef6 [file] [log] [blame]
Avi Drissmane4622aa2022-09-08 20:36:061// Copyright 2019 The Chromium Authors
Tomas Popela5b9b01f2019-09-10 19:42:312// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/linux_util.h"
6
7#include "testing/gtest/include/gtest/gtest.h"
8
9namespace {
10
11const char kPrettyName[] = "PRETTY_NAME";
12
13TEST(LinuxUtilTest, ParseEtcOsReleaseFile) {
14 const char kOsRelease[] = R"X(
15NAME=Fedora
16VERSION="30 (Workstation Edition\)\"
17ID=fedora
18VERSION_ID=30
19VERSION_CODENAME=""
20PLATFORM_ID="platform:f30
21PRETTY_NAME="Fedora 30 (Workstation Edition)"
22ANSI_COLOR="0;34"
23LOGO=fedora-logo-icon
24CPE_NAME="cpe:/o:fedoraproject:fedora:30"
25HOME_URL="https://fedoraproject.org/"
26DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f30/system-administrators-guide/"
27SUPPORT_URL="https://fedoraproject.org/wiki/Communicating_and_getting_help"
28BUG_REPORT_URL="https://bugzilla.redhat.com/"
29REDHAT_BUGZILLA_PRODUCT="Fedora"
30REDHAT_BUGZILLA_PRODUCT_VERSION=30
31REDHAT_SUPPORT_PRODUCT="Fedora"
32REDHAT_SUPPORT_PRODUCT_VERSION=30
33PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy"
34VARIANT="Workstation Edition"
35VARIANT_ID=workstation)X";
36
37 const char kOsReleaseMissingPrettyName[] = R"(
38NAME=Fedora
39VERSION='30 (Workstation Edition)'
40VARIANT_ID=workstation)";
41
42 std::string value =
43 base::GetKeyValueFromOSReleaseFileForTesting(kOsRelease, kPrettyName);
44 EXPECT_EQ(value, "Fedora 30 (Workstation Edition)");
45 // Missing key in the file
46 value = base::GetKeyValueFromOSReleaseFileForTesting(
47 kOsReleaseMissingPrettyName, kPrettyName);
48 EXPECT_EQ(value, "");
49 // Value quoted with single ticks
50 value = base::GetKeyValueFromOSReleaseFileForTesting(
51 kOsReleaseMissingPrettyName, "VERSION");
52 EXPECT_EQ(value, "30 (Workstation Edition)");
53 // Empty file
54 value = base::GetKeyValueFromOSReleaseFileForTesting("", kPrettyName);
55 EXPECT_EQ(value, "");
56 // Misspelled key
57 value =
58 base::GetKeyValueFromOSReleaseFileForTesting(kOsRelease, "PRETY_NAME");
59 EXPECT_EQ(value, "");
60 // Broken key=value format
61 value = base::GetKeyValueFromOSReleaseFileForTesting("A/B", kPrettyName);
62 EXPECT_EQ(value, "");
63 // Empty values
64 value =
65 base::GetKeyValueFromOSReleaseFileForTesting("PRETTY_NAME=", kPrettyName);
66 EXPECT_EQ(value, "");
67 value = base::GetKeyValueFromOSReleaseFileForTesting("PRETTY_NAME=\"\"",
68 kPrettyName);
69 EXPECT_EQ(value, "");
70 // Only one key=value in the whole file
71 value = base::GetKeyValueFromOSReleaseFileForTesting("PRETTY_NAME=\"Linux\"",
72 kPrettyName);
73 EXPECT_EQ(value, "Linux");
74}
75
76} // namespace