ronin-web-user_agents 0.1.0.beta1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/spec/chrome_spec.rb DELETED
@@ -1,511 +0,0 @@
1
- require 'spec_helper'
2
- require 'ronin/web/user_agents/chrome'
3
-
4
- describe Ronin::Web::UserAgents::Chrome do
5
- describe ".build" do
6
- let(:chrome_version) { '100.0.4758.80' }
7
-
8
- context "when given `os: :windows`" do
9
- let(:os) { :windows }
10
-
11
- context "but os_version: is not given" do
12
- it do
13
- expect {
14
- subject.build(chrome_version: chrome_version, os: os)
15
- }.to raise_error(ArgumentError,"os: #{os.inspect} also requires an os_version: value")
16
- end
17
- end
18
-
19
- Ronin::Web::UserAgents::OS::Windows::VERSIONS.each do |version_id,version_string|
20
- context "when given `os_version: #{version_id.inspect}`" do
21
- let(:os_version) { version_id }
22
- let(:windows_version) { version_string }
23
-
24
- it "must include 'Windows NT #{version_string}' in the extensions" do
25
- expect(
26
- subject.build(
27
- chrome_version: chrome_version,
28
- os: os,
29
- os_version: os_version
30
- )
31
- ).to eq("Mozilla/5.0 (Windows NT #{windows_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
32
- end
33
-
34
- Ronin::Web::UserAgents::OS::Windows::ARCHES.each do |arch_id,arch_string|
35
-
36
- context "and when `arch: #{arch_id.inspect}` is given" do
37
- let(:arch) { arch_id }
38
- let(:windows_arch) { arch_string }
39
-
40
- if arch_id
41
- it "must appned '#{arch_string}' after the Windows version" do
42
- expect(
43
- subject.build(
44
- chrome_version: chrome_version,
45
- os: os,
46
- os_version: os_version,
47
- arch: arch
48
- )
49
- ).to eq("Mozilla/5.0 (Windows NT #{windows_version}; #{windows_arch}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
50
- end
51
-
52
- context "and when given the `chrome_version:` keyword argument" do
53
- let(:chrome_version) { '1.2.3' }
54
-
55
- it "must use the specified `chrome_version:` value" do
56
- expect(
57
- subject.build(
58
- chrome_version: chrome_version,
59
- os: os,
60
- os_version: os_version,
61
- arch: arch
62
- )
63
- ).to eq("Mozilla/5.0 (Windows NT #{windows_version}; #{windows_arch}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
64
- end
65
- end
66
- else # `arch: nil` edge-case
67
- it "must not appned any additional fields" do
68
- expect(
69
- subject.build(
70
- chrome_version: chrome_version,
71
- os: os,
72
- os_version: os_version,
73
- arch: arch
74
- )
75
- ).to eq("Mozilla/5.0 (Windows NT #{windows_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
76
- end
77
-
78
- context "and when given the `chrome_version:` keyword argument" do
79
- let(:chrome_version) { '1.2.3' }
80
-
81
- it "must use the specified `chrome_version:` value" do
82
- expect(
83
- subject.build(
84
- chrome_version: chrome_version,
85
- os: os,
86
- os_version: os_version,
87
- arch: arch
88
- )
89
- ).to eq("Mozilla/5.0 (Windows NT #{windows_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
90
- end
91
- end
92
- end
93
- end
94
- end
95
-
96
- context "and when given the `chrome_version:` keyword argument" do
97
- let(:chrome_version) { '1.2.3' }
98
-
99
- it "must use the specified `chrome_version:` value" do
100
- expect(
101
- subject.build(
102
- chrome_version: chrome_version,
103
- os: os,
104
- os_version: os_version
105
- )
106
- ).to eq("Mozilla/5.0 (Windows NT #{windows_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
107
- end
108
- end
109
- end
110
- end
111
- end
112
-
113
- context "when given `os: :macos`" do
114
- let(:os) { :macos }
115
-
116
- Ronin::Web::UserAgents::OS::MacOS::VERSIONS_UNDERSCORED.each do |version,underscored_version|
117
- context "and when given `os_version: '#{version}'`" do
118
- let(:os_version) { version }
119
-
120
- it "must include 'Macintosh; Intel Mac OS X #{underscored_version}' in the extensions" do
121
- expect(
122
- subject.build(
123
- chrome_version: chrome_version,
124
- os: os,
125
- os_version: os_version
126
- )
127
- ).to eq("Mozilla/5.0 (Macintosh; Intel Mac OS X #{underscored_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
128
- end
129
-
130
- context "when given `chrome_version: ...`" do
131
- let(:chrome_version) { '1.2.3' }
132
-
133
- it "must use the specified `chrome_version:` value" do
134
- expect(
135
- subject.build(
136
- chrome_version: chrome_version,
137
- os: os,
138
- os_version: os_version
139
- )
140
- ).to eq("Mozilla/5.0 (Macintosh; Intel Mac OS X #{underscored_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
141
- end
142
- end
143
- end
144
- end
145
-
146
- context "and when given an unknown `os_version:` value" do
147
- let(:os_version) { '12.0.0' }
148
- let(:underscored_version) { os_version.tr('.','_') }
149
-
150
- it "must include 'Macintosh; Intel Mac OS X X_Y_Z' in the extensions" do
151
- expect(
152
- subject.build(
153
- chrome_version: chrome_version,
154
- os: os,
155
- os_version: os_version
156
- )
157
- ).to eq("Mozilla/5.0 (Macintosh; Intel Mac OS X #{underscored_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
158
- end
159
-
160
- context "and when given the `chrome_version:` keyword argument" do
161
- let(:chrome_version) { '1.2.3' }
162
-
163
- it "must use the specified `chrome_version:` value" do
164
- expect(
165
- subject.build(
166
- chrome_version: chrome_version,
167
- os: os,
168
- os_version: os_version
169
- )
170
- ).to eq("Mozilla/5.0 (Macintosh; Intel Mac OS X #{underscored_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
171
- end
172
- end
173
- end
174
-
175
- context "but `os_version:` is not given" do
176
- it do
177
- expect {
178
- subject.build(chrome_version: chrome_version, os: os)
179
- }.to raise_error(ArgumentError,"os: #{os.inspect} also requires an os_version: value")
180
- end
181
- end
182
- end
183
-
184
- context "when given `os: :linux`" do
185
- let(:os) { :linux }
186
-
187
- context "but `arch:` is not given" do
188
- it do
189
- expect {
190
- subject.build(chrome_version: chrome_version, os: os)
191
- }.to raise_error(ArgumentError,"os: #{os.inspect} also requires an arch: value")
192
- end
193
- end
194
-
195
- Ronin::Web::UserAgents::OS::Linux::ARCHES.each do |arch_id,arch_string|
196
- context "when given `arch: #{arch_id.inspect}`" do
197
- let(:arch) { arch_id }
198
- let(:linux_arch) { arch_string }
199
-
200
- it "must add 'Linux #{arch_string}' to the extensions" do
201
- expect(
202
- subject.build(
203
- chrome_version: chrome_version,
204
- os: os,
205
- arch: arch
206
- )
207
- ).to eq("Mozilla/5.0 (X11; Linux #{linux_arch}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
208
- end
209
-
210
- Ronin::Web::UserAgents::OS::Linux::DISTROS.each do |distro_id,distro_string|
211
- context "and when given `linux_distro: #{distro_id.inspect}" do
212
- if distro_id
213
- let(:linux_distro) { distro_string }
214
-
215
- it "must add the '; #{distro_string}' to the extensions" do
216
- expect(
217
- subject.build(
218
- chrome_version: chrome_version,
219
- os: os,
220
- linux_distro: linux_distro,
221
- arch: arch
222
- )
223
- ).to eq("Mozilla/5.0 (X11; #{linux_distro}; Linux #{linux_arch}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
224
- end
225
- else # `linux_distro: nil` edge-case
226
- it "must omit the Linux Distro from the extensions" do
227
- expect(
228
- subject.build(
229
- chrome_version: chrome_version,
230
- os: os,
231
- arch: arch
232
- )
233
- ).to eq("Mozilla/5.0 (X11; Linux #{linux_arch}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
234
- end
235
- end
236
- end
237
- end
238
-
239
- context "and when given the `chrome_version:` keyword argument" do
240
- let(:chrome_version) { '1.2.3' }
241
-
242
- it "must use the specified `chrome_version:` value" do
243
- expect(
244
- subject.build(
245
- chrome_version: chrome_version,
246
- os: os,
247
- arch: arch
248
- )
249
- ).to eq("Mozilla/5.0 (X11; Linux #{linux_arch}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
250
- end
251
- end
252
- end
253
- end
254
- end
255
-
256
- context "when given `os: :android`" do
257
- let(:os) { :android }
258
-
259
- context "but os_version: is not given" do
260
- it do
261
- expect {
262
- subject.build(chrome_version: chrome_version, os: os)
263
- }.to raise_error(ArgumentError,"os: #{os.inspect} also requires an os_version: value")
264
- end
265
- end
266
-
267
- context "when given an `os_version:` keyword argument" do
268
- let(:os_version) { '4.0.4' }
269
- let(:android_version) { os_version }
270
-
271
- it "must add 'Linux; Android ...' to the extensions" do
272
- expect(
273
- subject.build(
274
- chrome_version: chrome_version,
275
- os: os,
276
- os_version: os_version
277
- )
278
- ).to eq("Mozilla/5.0 (Linux; Android #{android_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Mobile Safari/537.36")
279
- end
280
-
281
- Ronin::Web::UserAgents::OS::Android::ARCHES.each do |arch_id,arch_string|
282
- context "and when given `arch: #{arch_id.inspect}`" do
283
- let(:arch) { arch_id }
284
- let(:android_arch) { arch_string }
285
-
286
- if arch_id
287
- it "must add 'Linux; #{arch_string}' to the extensions" do
288
- expect(
289
- subject.build(
290
- chrome_version: chrome_version,
291
- os: os,
292
- os_version: os_version,
293
- arch: arch
294
- )
295
- ).to eq("Mozilla/5.0 (Linux; #{android_arch}; Android #{android_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Mobile Safari/537.36")
296
- end
297
-
298
- context "and when given `chrome_version: ...`" do
299
- let(:chrome_version) { '1.2.3' }
300
-
301
- it "must use the specified `chrome_version:` value" do
302
- expect(
303
- subject.build(
304
- chrome_version: chrome_version,
305
- os: os,
306
- os_version: os_version,
307
- arch: arch
308
- )
309
- ).to eq("Mozilla/5.0 (Linux; #{android_arch}; Android #{android_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Mobile Safari/537.36")
310
- end
311
- end
312
- else # `arch: nil` edge-case
313
- it "must omit th Android architecture from the extensions" do
314
- expect(
315
- subject.build(
316
- chrome_version: chrome_version,
317
- os: os,
318
- os_version: os_version,
319
- arch: arch
320
- )
321
- ).to eq("Mozilla/5.0 (Linux; Android #{android_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Mobile Safari/537.36")
322
- end
323
-
324
- context "and when given the `chrome_version:` keyword argument" do
325
- let(:chrome_version) { '1.2.3' }
326
-
327
- it "must use the specified `chrome_version:` value" do
328
- expect(
329
- subject.build(
330
- chrome_version: chrome_version,
331
- os: os,
332
- os_version: os_version,
333
- arch: arch
334
- )
335
- ).to eq("Mozilla/5.0 (Linux; Android #{android_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Mobile Safari/537.36")
336
- end
337
- end
338
- end
339
- end
340
- end
341
-
342
- context "when the `android_device:` keyword argument is given" do
343
- let(:android_device) { 'SM-A307FN' }
344
-
345
- it "must include the Android device in the extensions" do
346
- expect(
347
- subject.build(
348
- chrome_version: chrome_version,
349
- os: os,
350
- os_version: os_version,
351
- android_device: android_device
352
- )
353
- ).to eq("Mozilla/5.0 (Linux; Android #{android_version}; #{android_device}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Mobile Safari/537.36")
354
- end
355
- end
356
- end
357
- end
358
-
359
- context "when given `os: :other`" do
360
- let(:os) { :other }
361
-
362
- it do
363
- expect {
364
- subject.build(chrome_version: chrome_version, os: os)
365
- }.to raise_error(ArgumentError,"unsupported os: value (#{os.inspect})")
366
- end
367
- end
368
- end
369
-
370
- describe ".random" do
371
- it "must return a random Chrome User-Agent string" do
372
- expect(subject.random).to match(
373
- %r{^Mozilla/5\.0 \([^\)]+\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
374
- )
375
- end
376
-
377
- it "must generate a new random Chrome User-Agent string each time" do
378
- expect(subject.random).to_not eq(subject.random)
379
- end
380
-
381
- context "when `os: :windows`" do
382
- let(:os) { :windows }
383
-
384
- it "must return a random Windows Chrome User-Agent string" do
385
- expect(subject.random(os: os)).to match(
386
- %r{^Mozilla/5\.0 \(Windows NT \d+(?:\.\d+)*(?:; (?:WOW64|Win64; x64))?\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
387
- )
388
- end
389
-
390
- context "and when given `os_version:`" do
391
- let(:os_version) { 10 }
392
-
393
- it "must return a random Windows Chrome User-Agent string for that version of Windows" do
394
- expect(subject.random(os: os, os_version: os_version)).to match(
395
- %r{^Mozilla/5\.0 \(Windows NT 10\.0(?:; (?:WOW64|Win64; x64))?\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
396
- )
397
- end
398
- end
399
-
400
- context "and when given `arch: :wow64`" do
401
- let(:arch) { :wow64 }
402
-
403
- it "must return a random Windows Chrome User-Agent string for the WOW64 architecture" do
404
- expect(subject.random(os: os, arch: arch)).to match(
405
- %r{^Mozilla/5\.0 \(Windows NT \d+(?:\.\d+)*; WOW64\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
406
- )
407
- end
408
- end
409
-
410
- context "and when given `arch: :win64`" do
411
- let(:arch) { :win64 }
412
-
413
- it "must return a random Windows Chrome User-Agent string for the WOW64 architecture" do
414
- expect(subject.random(os: os, arch: arch)).to match(
415
- %r{^Mozilla/5\.0 \(Windows NT \d+(?:\.\d+)*; Win64; x64\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
416
- )
417
- end
418
- end
419
- end
420
-
421
- context "when `os: :macos` is given" do
422
- let(:os) { :macos }
423
-
424
- it "must return a macOS Chrome User-Agent string" do
425
- expect(subject.random(os: os)).to match(
426
- %r{^Mozilla/5\.0 \(Macintosh; Intel Mac OS X \d+(_\d+){1,2}\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
427
- )
428
- end
429
-
430
- context "and when `os_version:` is given" do
431
- let(:os_version) { '10.11.12' }
432
-
433
- it "must return a macOS Chrome User-Agent string for that macOS version" do
434
- expect(subject.random(os: os, os_version: os_version)).to match(
435
- %r{^Mozilla/5\.0 \(Macintosh; Intel Mac OS X 10_11_12\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
436
- )
437
- end
438
- end
439
- end
440
-
441
- context "when `os: :linux` is given" do
442
- let(:os) { :linux }
443
-
444
- it "must return a Linux Chrome User-Agent string" do
445
- expect(subject.random(os: os)).to match(
446
- %r{^Mozilla/5\.0 \(X11(?:; (?:Ubuntu|Fedora|Arch))?; Linux (?:x86_64|aarch64|i686)\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
447
- )
448
- end
449
-
450
- context "and when `linux_distro:` is given" do
451
- let(:linux_distro) { :ubuntu }
452
-
453
- it "must return a Linux Chrome User-Agent string for that Linux Distro" do
454
- expect(subject.random(os: os, linux_distro: linux_distro)).to match(
455
- %r{^Mozilla/5\.0 \(X11; Ubuntu; Linux (?:x86_64|aarch64|i686)\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
456
- )
457
- end
458
- end
459
-
460
- context "and when `arch:` is given" do
461
- let(:arch) { :arm64 }
462
-
463
- it "must return a Linux Chrome User-Agent string for that architecture" do
464
- expect(subject.random(os: os, arch: arch)).to match(
465
- %r{^Mozilla/5\.0 \(X11(?:; (?:Ubuntu|Fedora|Arch))?; Linux aarch64\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
466
- )
467
- end
468
- end
469
- end
470
-
471
- context "when `os: :android` is given" do
472
- let(:os) { :android }
473
-
474
- it "must return a Android Chrome User-Agent string" do
475
- expect(subject.random(os: os)).to match(
476
- %r{^Mozilla/5\.0 \(Linux(?:; (?:arm|arm_64))?; Android \d+(?:\.\d+)*(?:; [^\(\)]+(?:\([^\)]+\)[^\(\)]+)?)?\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
477
- )
478
- end
479
-
480
- context "and when `os_version:` is given" do
481
- let(:os_version) { '8.1' }
482
-
483
- it "must return a Android Chrome User-Agent string for that Android version" do
484
- expect(subject.random(os: os, os_version: os_version)).to match(
485
- %r{^Mozilla/5\.0 \(Linux(?:; (?:arm|arm_64))?; Android 8\.1(?:; [^\(\)]+(?:\([^\)]+\)[^\(\)]+)?)?\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
486
- )
487
- end
488
- end
489
-
490
- context "and when `arch:` is given" do
491
- let(:arch) { :arm64 }
492
-
493
- it "must return a Linux Chrome User-Agent string for that architecture" do
494
- expect(subject.random(os: os, arch: arch)).to match(
495
- %r{^Mozilla/5\.0 \(Linux; arm_64; Android (?:\d+(?:\.\d+)*)(?:; [^\(\)]+(?:\([^\)]+\)[^\(\)]+)?)?\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
496
- )
497
- end
498
- end
499
-
500
- context "and when `android_device:` is given" do
501
- let(:android_device) { 'SM-A307FN' }
502
-
503
- it "must return a Linux Chrome User-Agent string with that Android device" do
504
- expect(subject.random(os: os, android_device: android_device)).to match(
505
- %r{^Mozilla/5\.0 \(Linux(?:; (?:arm|arm_64))?; Android (?:\d+(?:\.\d+)*); #{android_device}\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
506
- )
507
- end
508
- end
509
- end
510
- end
511
- end