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