1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | #include "clang/Driver/Distro.h" |
14 | #include "llvm/Support/VirtualFileSystem.h" |
15 | #include "llvm/Support/raw_ostream.h" |
16 | #include "gtest/gtest.h" |
17 | using namespace clang; |
18 | using namespace clang::driver; |
19 | |
20 | namespace { |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | TEST(DistroTest, DetectUbuntu) { |
27 | llvm::vfs::InMemoryFileSystem UbuntuTrustyFileSystem; |
28 | |
29 | UbuntuTrustyFileSystem.addFile("/etc/debian_version", 0, |
30 | llvm::MemoryBuffer::getMemBuffer("jessie/sid\n")); |
31 | UbuntuTrustyFileSystem.addFile("/etc/lsb-release", 0, |
32 | llvm::MemoryBuffer::getMemBuffer("DISTRIB_ID=Ubuntu\n" |
33 | "DISTRIB_RELEASE=14.04\n" |
34 | "DISTRIB_CODENAME=trusty\n" |
35 | "DISTRIB_DESCRIPTION=\"Ubuntu 14.04 LTS\"\n")); |
36 | UbuntuTrustyFileSystem.addFile("/etc/os-release", 0, |
37 | llvm::MemoryBuffer::getMemBuffer("NAME=\"Ubuntu\"\n" |
38 | "VERSION=\"14.04, Trusty Tahr\"\n" |
39 | "ID=ubuntu\n" |
40 | "ID_LIKE=debian\n" |
41 | "PRETTY_NAME=\"Ubuntu 14.04 LTS\"\n" |
42 | "VERSION_ID=\"14.04\"\n" |
43 | "HOME_URL=\"http://www.ubuntu.com/\"\n" |
44 | "SUPPORT_URL=\"http://help.ubuntu.com/\"\n" |
45 | "BUG_REPORT_URL=\"http://bugs.launchpad.net/ubuntu/\"\n")); |
46 | |
47 | Distro UbuntuTrusty{UbuntuTrustyFileSystem}; |
48 | ASSERT_EQ(Distro(Distro::UbuntuTrusty), UbuntuTrusty); |
49 | ASSERT_TRUE(UbuntuTrusty.IsUbuntu()); |
50 | ASSERT_FALSE(UbuntuTrusty.IsRedhat()); |
51 | ASSERT_FALSE(UbuntuTrusty.IsOpenSUSE()); |
52 | ASSERT_FALSE(UbuntuTrusty.IsDebian()); |
53 | ASSERT_FALSE(UbuntuTrusty.IsGentoo()); |
54 | |
55 | llvm::vfs::InMemoryFileSystem UbuntuYakketyFileSystem; |
56 | UbuntuYakketyFileSystem.addFile("/etc/debian_version", 0, |
57 | llvm::MemoryBuffer::getMemBuffer("stretch/sid\n")); |
58 | UbuntuYakketyFileSystem.addFile("/etc/lsb-release", 0, |
59 | llvm::MemoryBuffer::getMemBuffer("DISTRIB_ID=Ubuntu\n" |
60 | "DISTRIB_RELEASE=16.10\n" |
61 | "DISTRIB_CODENAME=yakkety\n" |
62 | "DISTRIB_DESCRIPTION=\"Ubuntu 16.10\"\n")); |
63 | UbuntuYakketyFileSystem.addFile("/etc/os-release", 0, |
64 | llvm::MemoryBuffer::getMemBuffer("NAME=\"Ubuntu\"\n" |
65 | "VERSION=\"16.10 (Yakkety Yak)\"\n" |
66 | "ID=ubuntu\n" |
67 | "ID_LIKE=debian\n" |
68 | "PRETTY_NAME=\"Ubuntu 16.10\"\n" |
69 | "VERSION_ID=\"16.10\"\n" |
70 | "HOME_URL=\"http://www.ubuntu.com/\"\n" |
71 | "SUPPORT_URL=\"http://help.ubuntu.com/\"\n" |
72 | "BUG_REPORT_URL=\"http://bugs.launchpad.net/ubuntu/\"\n" |
73 | "PRIVACY_POLICY_URL=\"http://www.ubuntu.com/legal/terms-and-policies/privacy-policy\"\n" |
74 | "VERSION_CODENAME=yakkety\n" |
75 | "UBUNTU_CODENAME=yakkety\n")); |
76 | |
77 | Distro UbuntuYakkety{UbuntuYakketyFileSystem}; |
78 | ASSERT_EQ(Distro(Distro::UbuntuYakkety), UbuntuYakkety); |
79 | ASSERT_TRUE(UbuntuYakkety.IsUbuntu()); |
80 | ASSERT_FALSE(UbuntuYakkety.IsRedhat()); |
81 | ASSERT_FALSE(UbuntuYakkety.IsOpenSUSE()); |
82 | ASSERT_FALSE(UbuntuYakkety.IsDebian()); |
83 | ASSERT_FALSE(UbuntuYakkety.IsGentoo()); |
84 | } |
85 | |
86 | TEST(DistroTest, DetectRedhat) { |
87 | llvm::vfs::InMemoryFileSystem Fedora25FileSystem; |
88 | Fedora25FileSystem.addFile("/etc/system-release-cpe", 0, |
89 | llvm::MemoryBuffer::getMemBuffer("cpe:/o:fedoraproject:fedora:25\n")); |
90 | |
91 | Fedora25FileSystem.addFile("/etc/system-release", 0, |
92 | llvm::MemoryBuffer::getMemBuffer("Fedora release 25 (Twenty Five)\n")); |
93 | Fedora25FileSystem.addFile("/etc/redhat-release", 0, |
94 | llvm::MemoryBuffer::getMemBuffer("Fedora release 25 (Twenty Five)\n")); |
95 | Fedora25FileSystem.addFile("/etc/fedora-release", 0, |
96 | llvm::MemoryBuffer::getMemBuffer("Fedora release 25 (Twenty Five)\n")); |
97 | Fedora25FileSystem.addFile("/etc/os-release", 0, |
98 | llvm::MemoryBuffer::getMemBuffer("NAME=Fedora\n" |
99 | "VERSION=\"25 (Twenty Five)\"\n" |
100 | "ID=fedora\n" |
101 | "VERSION_ID=25\n" |
102 | "PRETTY_NAME=\"Fedora 25 (Twenty Five)\"\n" |
103 | "ANSI_COLOR=\"0;34\"\n" |
104 | "CPE_NAME=\"cpe:/o:fedoraproject:fedora:25\"\n" |
105 | "HOME_URL=\"https://fedoraproject.org/\"\n" |
106 | "BUG_REPORT_URL=\"https://bugzilla.redhat.com/\"\n" |
107 | "REDHAT_BUGZILLA_PRODUCT=\"Fedora\"\n" |
108 | "REDHAT_BUGZILLA_PRODUCT_VERSION=25\n" |
109 | "REDHAT_SUPPORT_PRODUCT=\"Fedora\"\n" |
110 | "REDHAT_SUPPORT_PRODUCT_VERSION=25\n" |
111 | "PRIVACY_POLICY_URL=https://fedoraproject.org/wiki/Legal:PrivacyPolicy\n")); |
112 | Distro Fedora25{Fedora25FileSystem}; |
113 | ASSERT_EQ(Distro(Distro::Fedora), Fedora25); |
114 | ASSERT_FALSE(Fedora25.IsUbuntu()); |
115 | ASSERT_TRUE(Fedora25.IsRedhat()); |
116 | ASSERT_FALSE(Fedora25.IsOpenSUSE()); |
117 | ASSERT_FALSE(Fedora25.IsDebian()); |
118 | ASSERT_FALSE(Fedora25.IsGentoo()); |
119 | |
120 | llvm::vfs::InMemoryFileSystem CentOS7FileSystem; |
121 | CentOS7FileSystem.addFile("/etc/system-release-cpe", 0, |
122 | llvm::MemoryBuffer::getMemBuffer("cpe:/o:centos:centos:7\n")); |
123 | |
124 | CentOS7FileSystem.addFile("/etc/system-release", 0, |
125 | llvm::MemoryBuffer::getMemBuffer("CentOS Linux release 7.2.1511 (Core) \n")); |
126 | CentOS7FileSystem.addFile("/etc/redhat-release", 0, |
127 | llvm::MemoryBuffer::getMemBuffer("CentOS Linux release 7.2.1511 (Core) \n")); |
128 | CentOS7FileSystem.addFile("/etc/centos-release", 0, |
129 | llvm::MemoryBuffer::getMemBuffer("CentOS Linux release 7.2.1511 (Core) \n")); |
130 | CentOS7FileSystem.addFile("/etc/centos-release-upstream", 0, |
131 | llvm::MemoryBuffer::getMemBuffer("Derived from Red Hat Enterprise Linux 7.2 (Source)\n")); |
132 | CentOS7FileSystem.addFile("/etc/os-release", 0, |
133 | llvm::MemoryBuffer::getMemBuffer("NAME=\"CentOS Linux\"\n" |
134 | "VERSION=\"7 (Core)\"\n" |
135 | "ID=\"centos\"\n" |
136 | "ID_LIKE=\"rhel fedora\"\n" |
137 | "VERSION_ID=\"7\"\n" |
138 | "PRETTY_NAME=\"CentOS Linux 7 (Core)\"\n" |
139 | "ANSI_COLOR=\"0;31\"\n" |
140 | "CPE_NAME=\"cpe:/o:centos:centos:7\"\n" |
141 | "HOME_URL=\"https://www.centos.org/\"\n" |
142 | "BUG_REPORT_URL=\"https://bugs.centos.org/\"\n" |
143 | "\n" |
144 | "CENTOS_MANTISBT_PROJECT=\"CentOS-7\"\n" |
145 | "CENTOS_MANTISBT_PROJECT_VERSION=\"7\"\n" |
146 | "REDHAT_SUPPORT_PRODUCT=\"centos\"\n" |
147 | "REDHAT_SUPPORT_PRODUCT_VERSION=\"7\"\n")); |
148 | |
149 | Distro CentOS7{CentOS7FileSystem}; |
150 | ASSERT_EQ(Distro(Distro::RHEL7), CentOS7); |
151 | ASSERT_FALSE(CentOS7.IsUbuntu()); |
152 | ASSERT_TRUE(CentOS7.IsRedhat()); |
153 | ASSERT_FALSE(CentOS7.IsOpenSUSE()); |
154 | ASSERT_FALSE(CentOS7.IsDebian()); |
155 | ASSERT_FALSE(CentOS7.IsGentoo()); |
156 | } |
157 | |
158 | TEST(DistroTest, DetectOpenSUSE) { |
159 | llvm::vfs::InMemoryFileSystem OpenSUSELeap421FileSystem; |
160 | OpenSUSELeap421FileSystem.addFile("/etc/SuSE-release", 0, |
161 | llvm::MemoryBuffer::getMemBuffer("openSUSE 42.1 (x86_64)\n" |
162 | "VERSION = 42.1\n" |
163 | "CODENAME = Malachite\n" |
164 | "# /etc/SuSE-release is deprecated and will be removed in the future, use /etc/os-release instead\n")); |
165 | OpenSUSELeap421FileSystem.addFile("/etc/os-release", 0, |
166 | llvm::MemoryBuffer::getMemBuffer("NAME=\"openSUSE Leap\"\n" |
167 | "VERSION=\"42.1\"\n" |
168 | "VERSION_ID=\"42.1\"\n" |
169 | "PRETTY_NAME=\"openSUSE Leap 42.1 (x86_64)\"\n" |
170 | "ID=opensuse\n" |
171 | "ANSI_COLOR=\"0;32\"\n" |
172 | "CPE_NAME=\"cpe:/o:opensuse:opensuse:42.1\"\n" |
173 | "BUG_REPORT_URL=\"https://bugs.opensuse.org\"\n" |
174 | "HOME_URL=\"https://opensuse.org/\"\n" |
175 | "ID_LIKE=\"suse\"\n")); |
176 | |
177 | Distro OpenSUSELeap421{OpenSUSELeap421FileSystem}; |
178 | ASSERT_EQ(Distro(Distro::OpenSUSE), OpenSUSELeap421); |
179 | ASSERT_FALSE(OpenSUSELeap421.IsUbuntu()); |
180 | ASSERT_FALSE(OpenSUSELeap421.IsRedhat()); |
181 | ASSERT_TRUE(OpenSUSELeap421.IsOpenSUSE()); |
182 | ASSERT_FALSE(OpenSUSELeap421.IsDebian()); |
183 | ASSERT_FALSE(OpenSUSELeap421.IsGentoo()); |
184 | |
185 | llvm::vfs::InMemoryFileSystem OpenSUSE132FileSystem; |
186 | OpenSUSE132FileSystem.addFile("/etc/SuSE-release", 0, |
187 | llvm::MemoryBuffer::getMemBuffer("openSUSE 13.2 (x86_64)\n" |
188 | "VERSION = 13.2\n" |
189 | "CODENAME = Harlequin\n" |
190 | "# /etc/SuSE-release is deprecated and will be removed in the future, use /etc/os-release instead\n")); |
191 | OpenSUSE132FileSystem.addFile("/etc/os-release", 0, |
192 | llvm::MemoryBuffer::getMemBuffer("NAME=openSUSE\n" |
193 | "VERSION=\"13.2 (Harlequin)\"\n" |
194 | "VERSION_ID=\"13.2\"\n" |
195 | "PRETTY_NAME=\"openSUSE 13.2 (Harlequin) (x86_64)\"\n" |
196 | "ID=opensuse\n" |
197 | "ANSI_COLOR=\"0;32\"\n" |
198 | "CPE_NAME=\"cpe:/o:opensuse:opensuse:13.2\"\n" |
199 | "BUG_REPORT_URL=\"https://bugs.opensuse.org\"\n" |
200 | "HOME_URL=\"https://opensuse.org/\"\n" |
201 | "ID_LIKE=\"suse\"\n")); |
202 | |
203 | Distro OpenSUSE132{OpenSUSE132FileSystem}; |
204 | ASSERT_EQ(Distro(Distro::OpenSUSE), OpenSUSE132); |
205 | ASSERT_FALSE(OpenSUSE132.IsUbuntu()); |
206 | ASSERT_FALSE(OpenSUSE132.IsRedhat()); |
207 | ASSERT_TRUE(OpenSUSE132.IsOpenSUSE()); |
208 | ASSERT_FALSE(OpenSUSE132.IsDebian()); |
209 | ASSERT_FALSE(OpenSUSE132.IsGentoo()); |
210 | |
211 | llvm::vfs::InMemoryFileSystem SLES10FileSystem; |
212 | SLES10FileSystem.addFile("/etc/SuSE-release", 0, |
213 | llvm::MemoryBuffer::getMemBuffer("SUSE Linux Enterprise Server 10 (x86_64)\n" |
214 | "VERSION = 10\n" |
215 | "PATCHLEVEL = 4\n")); |
216 | SLES10FileSystem.addFile("/etc/lsb_release", 0, |
217 | llvm::MemoryBuffer::getMemBuffer("LSB_VERSION=\"core-2.0-noarch:core-3.0-noarch:core-2.0-x86_64:core-3.0-x86_64\"\n")); |
218 | |
219 | |
220 | Distro SLES10{SLES10FileSystem}; |
221 | ASSERT_EQ(Distro(Distro::UnknownDistro), SLES10); |
222 | ASSERT_FALSE(SLES10.IsUbuntu()); |
223 | ASSERT_FALSE(SLES10.IsRedhat()); |
224 | ASSERT_FALSE(SLES10.IsOpenSUSE()); |
225 | ASSERT_FALSE(SLES10.IsDebian()); |
226 | ASSERT_FALSE(SLES10.IsGentoo()); |
227 | } |
228 | |
229 | TEST(DistroTest, DetectDebian) { |
230 | llvm::vfs::InMemoryFileSystem DebianJessieFileSystem; |
231 | DebianJessieFileSystem.addFile("/etc/debian_version", 0, |
232 | llvm::MemoryBuffer::getMemBuffer("8.6\n")); |
233 | DebianJessieFileSystem.addFile("/etc/os-release", 0, |
234 | llvm::MemoryBuffer::getMemBuffer("PRETTY_NAME=\"Debian GNU/Linux 8 (jessie)\"\n" |
235 | "NAME=\"Debian GNU/Linux\"\n" |
236 | "VERSION_ID=\"8\"\n" |
237 | "VERSION=\"8 (jessie)\"\n" |
238 | "ID=debian\n" |
239 | "HOME_URL=\"http://www.debian.org/\"\n" |
240 | "SUPPORT_URL=\"http://www.debian.org/support\"\n" |
241 | "BUG_REPORT_URL=\"https://bugs.debian.org/\"\n")); |
242 | |
243 | Distro DebianJessie{DebianJessieFileSystem}; |
244 | ASSERT_EQ(Distro(Distro::DebianJessie), DebianJessie); |
245 | ASSERT_FALSE(DebianJessie.IsUbuntu()); |
246 | ASSERT_FALSE(DebianJessie.IsRedhat()); |
247 | ASSERT_FALSE(DebianJessie.IsOpenSUSE()); |
248 | ASSERT_TRUE(DebianJessie.IsDebian()); |
249 | ASSERT_FALSE(DebianJessie.IsGentoo()); |
250 | |
251 | llvm::vfs::InMemoryFileSystem DebianStretchSidFileSystem; |
252 | DebianStretchSidFileSystem.addFile("/etc/debian_version", 0, |
253 | llvm::MemoryBuffer::getMemBuffer("stretch/sid\n")); |
254 | DebianStretchSidFileSystem.addFile("/etc/os-release", 0, |
255 | llvm::MemoryBuffer::getMemBuffer("PRETTY_NAME=\"Debian GNU/Linux stretch/sid\"\n" |
256 | "NAME=\"Debian GNU/Linux\"\n" |
257 | "ID=debian\n" |
258 | "HOME_URL=\"http://www.debian.org/\"\n" |
259 | "SUPPORT_URL=\"http://www.debian.org/support\"\n" |
260 | "BUG_REPORT_URL=\"https://bugs.debian.org/\"\n")); |
261 | |
262 | Distro DebianStretchSid{DebianStretchSidFileSystem}; |
263 | ASSERT_EQ(Distro(Distro::DebianStretch), DebianStretchSid); |
264 | ASSERT_FALSE(DebianStretchSid.IsUbuntu()); |
265 | ASSERT_FALSE(DebianStretchSid.IsRedhat()); |
266 | ASSERT_FALSE(DebianStretchSid.IsOpenSUSE()); |
267 | ASSERT_TRUE(DebianStretchSid.IsDebian()); |
268 | ASSERT_FALSE(DebianStretchSid.IsGentoo()); |
269 | } |
270 | |
271 | TEST(DistroTest, DetectExherbo) { |
272 | llvm::vfs::InMemoryFileSystem ExherboFileSystem; |
273 | ExherboFileSystem.addFile("/etc/exherbo-release", 0, |
274 | llvm::MemoryBuffer::getMemBuffer("")); |
275 | ExherboFileSystem.addFile("/etc/os-release", 0, |
276 | llvm::MemoryBuffer::getMemBuffer("NAME=\"Exherbo\"\n" |
277 | "PRETTY_NAME=\"Exherbo Linux\"\n" |
278 | "ID=\"exherbo\"\n" |
279 | "ANSI_COLOR=\"0;32\"\n" |
280 | "HOME_URL=\"https://www.exherbo.org/\"\n" |
281 | "SUPPORT_URL=\"irc://irc.freenode.net/#exherbo\"\n" |
282 | "BUG_REPORT_URL=\"https://bugs.exherbo.org/\"\n")); |
283 | |
284 | Distro Exherbo{ExherboFileSystem}; |
285 | ASSERT_EQ(Distro(Distro::Exherbo), Exherbo); |
286 | ASSERT_FALSE(Exherbo.IsUbuntu()); |
287 | ASSERT_FALSE(Exherbo.IsRedhat()); |
288 | ASSERT_FALSE(Exherbo.IsOpenSUSE()); |
289 | ASSERT_FALSE(Exherbo.IsDebian()); |
290 | ASSERT_FALSE(Exherbo.IsGentoo()); |
291 | } |
292 | |
293 | TEST(DistroTest, DetectArchLinux) { |
294 | llvm::vfs::InMemoryFileSystem ArchLinuxFileSystem; |
295 | ArchLinuxFileSystem.addFile("/etc/arch-release", 0, |
296 | llvm::MemoryBuffer::getMemBuffer("")); |
297 | ArchLinuxFileSystem.addFile("/etc/os-release", 0, |
298 | llvm::MemoryBuffer::getMemBuffer("NAME=\"Arch Linux\"\n" |
299 | "ID=arch\n" |
300 | "PRETTY_NAME=\"Arch Linux\"\n" |
301 | "ANSI_COLOR=\"0;36\"\n" |
302 | "HOME_URL=\"https://www.archlinux.org/\"\n" |
303 | "SUPPORT_URL=\"https://bbs.archlinux.org/\"\n" |
304 | "BUG_REPORT_URL=\"https://bugs.archlinux.org/\"\n")); |
305 | |
306 | Distro ArchLinux{ArchLinuxFileSystem}; |
307 | ASSERT_EQ(Distro(Distro::ArchLinux), ArchLinux); |
308 | ASSERT_FALSE(ArchLinux.IsUbuntu()); |
309 | ASSERT_FALSE(ArchLinux.IsRedhat()); |
310 | ASSERT_FALSE(ArchLinux.IsOpenSUSE()); |
311 | ASSERT_FALSE(ArchLinux.IsDebian()); |
312 | ASSERT_FALSE(ArchLinux.IsGentoo()); |
313 | } |
314 | |
315 | TEST(DistroTest, DetectGentoo) { |
316 | llvm::vfs::InMemoryFileSystem GentooFileSystem; |
317 | GentooFileSystem.addFile( |
318 | "/etc/gentoo-release", 0, |
319 | llvm::MemoryBuffer::getMemBuffer("Gentoo Base System release 2.6")); |
320 | GentooFileSystem.addFile( |
321 | "/etc/os-release", 0, |
322 | llvm::MemoryBuffer::getMemBuffer( |
323 | "NAME=Gentoo\n" |
324 | "ID=gentoo\n" |
325 | "PRETTY_NAME=\"Gentoo/Linux\"\n" |
326 | "ANSI_COLOR=\"1;32\"\n" |
327 | "HOME_URL=\"https://www.gentoo.org/\"\n" |
328 | "SUPPORT_URL=\"https://www.gentoo.org/support/\"\n" |
329 | "BUG_REPORT_URL=\"https://bugs.gentoo.org/\"\n")); |
330 | |
331 | Distro Gentoo{GentooFileSystem}; |
332 | ASSERT_EQ(Distro(Distro::Gentoo), Gentoo); |
333 | ASSERT_FALSE(Gentoo.IsUbuntu()); |
334 | ASSERT_FALSE(Gentoo.IsRedhat()); |
335 | ASSERT_FALSE(Gentoo.IsOpenSUSE()); |
336 | ASSERT_FALSE(Gentoo.IsDebian()); |
337 | ASSERT_TRUE(Gentoo.IsGentoo()); |
338 | } |
339 | |
340 | } |
341 | |