1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // 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
9 namespace {
10
11 const char kPrettyName[] = "PRETTY_NAME";
12
TEST(LinuxUtilTest,ParseEtcOsReleaseFile)13 TEST(LinuxUtilTest, ParseEtcOsReleaseFile) {
14 const char kOsRelease[] = R"X(
15 NAME=Fedora
16 VERSION="30 (Workstation Edition\)\"
17 ID=fedora
18 VERSION_ID=30
19 VERSION_CODENAME=""
20 PLATFORM_ID="platform:f30
21 PRETTY_NAME="Fedora 30 (Workstation Edition)"
22 ANSI_COLOR="0;34"
23 LOGO=fedora-logo-icon
24 CPE_NAME="cpe:/o:fedoraproject:fedora:30"
25 HOME_URL="https://fedoraproject.org/"
26 DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f30/system-administrators-guide/"
27 SUPPORT_URL="https://fedoraproject.org/wiki/Communicating_and_getting_help"
28 BUG_REPORT_URL="https://bugzilla.redhat.com/"
29 REDHAT_BUGZILLA_PRODUCT="Fedora"
30 REDHAT_BUGZILLA_PRODUCT_VERSION=30
31 REDHAT_SUPPORT_PRODUCT="Fedora"
32 REDHAT_SUPPORT_PRODUCT_VERSION=30
33 PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy"
34 VARIANT="Workstation Edition"
35 VARIANT_ID=workstation)X";
36
37 const char kOsReleaseMissingPrettyName[] = R"(
38 NAME=Fedora
39 VERSION='30 (Workstation Edition)'
40 VARIANT_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
77