Skip to content

Commit 86b533b

Browse files
committed
Fixed #307 - Internet.UserAgent() sometimes generated invalid user agent strings that could not be parsed by System.Net.Http.HttpRequestMessage.Headers.
1 parent 7414424 commit 86b533b

File tree

4 files changed

+39
-16
lines changed

4 files changed

+39
-16
lines changed

HISTORY.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## v30.0.1-beta-3
2+
Release Date: 2020-06-29
3+
4+
* Issue 307: Fixed `Internet.UserAgent()` sometimes generating invalid user agent strings that could not be parsed by `System.Net.Http.HttpRequestMessage.Headers`.
5+
16
## v30.0.1-beta-2
27
Release Date: 2020-06-20
38

Source/Bogus.Tests/Bogus.Tests.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
<ItemGroup>
2020
<ProjectReference Include="..\Bogus\Bogus.csproj" />
2121
</ItemGroup>
22+
<ItemGroup>
23+
<Reference Include="System.Net.Http" />
24+
</ItemGroup>
2225
<ItemGroup>
2326
<None Update="Rantionary-3.0.17.rantpkg">
2427
<CopyToOutputDirectory>Always</CopyToOutputDirectory>

Source/Bogus.Tests/DataSetTests/InternetTests.cs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
1-
using System.Linq;
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using System.Linq;
25
using Bogus.DataSets;
36
using FluentAssertions;
47
using Xunit;
8+
using Xunit.Abstractions;
59
using Z.ExtensionMethods;
610

711
namespace Bogus.Tests.DataSetTests
812
{
913
public class InternetTests : SeededTest
1014
{
11-
public InternetTests()
15+
private readonly ITestOutputHelper console;
16+
17+
public InternetTests(ITestOutputHelper console)
1218
{
19+
this.console = console;
1320
internet = new Internet();
1421
}
1522

@@ -149,13 +156,19 @@ public void can_make_email_with_custom_options()
149156
email.Should().Be("cowboy.Beatty30@yahoo.com");
150157
}
151158

152-
153159
[Fact]
154160
public void can_pick_random_browser()
155161
{
156-
Enumerable.Range(1, 200).Select(
157-
i => internet.UserAgent())
158-
.Dump();
162+
var userAgents = Enumerable.Range(1, 1_000)
163+
.Select(i => internet.UserAgent())
164+
.ToArray();
165+
166+
var req = new System.Net.Http.HttpRequestMessage();
167+
foreach( var userAgent in userAgents )
168+
{
169+
Action act = () => req.Headers.Add("User-Agent", userAgent);
170+
act.ShouldNotThrow();
171+
}
159172
}
160173

161174
[Theory]

Source/Bogus/Vendor/UserAgentGenerator.cs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -173,34 +173,36 @@ internal string BrowserAgent(string browser, string arch)
173173
{
174174
var safari = VersionString("safari");
175175
var os_ver = (arch == "mac")
176-
? "(Macintosh; " + RandomProc("mac") + " Mac OS X " + VersionString("osx", "_") + ") "
176+
? "(Macintosh; " + RandomProc("mac") + " Mac OS X " + VersionString("osx", "_") + ")"
177177
: (arch == "win")
178178
? "(Windows; U; Windows NT " + VersionString("nt") + ")"
179-
: "(X11; Linux " + RandomProc(arch);
179+
: "(X11; Linux " + RandomProc(arch) + ")";
180180

181181
return "Mozilla/5.0 " + os_ver + " AppleWebKit/" + safari + " (KHTML, like Gecko) Chrome/" + VersionString("chrome") + " Safari/" + safari;
182182
}
183183
if( browser == "opera" )
184184
{
185-
var presto_ver = " Presto/" + VersionString("presto") + " Version/" + VersionString("presto2") + ")";
186185
var os_ver = (arch == "win")
187-
? "(Windows NT " + VersionString("nt") + "; U; " + RandomLanguage() + presto_ver
186+
? "(Windows NT " + VersionString("nt") + "; U; " + RandomLanguage() +")"
188187
: (arch == "lin")
189-
? "(X11; Linux " + RandomProc(arch) + "; U; " + RandomLanguage() + presto_ver
190-
: "(Macintosh; Intel Mac OS X " + VersionString("osx") + " U; " + RandomLanguage() + " Presto/" +
191-
VersionString("presto") + " Version/" + VersionString("presto2") + ")";
188+
? "(X11; Linux " + RandomProc(arch) + "; U; " + RandomLanguage()+ ")"
189+
: "(Macintosh; Intel Mac OS X " + VersionString("osx") + " U; " + RandomLanguage() + ")";
192190

193-
return "Opera/" + this.Random.Number(9, 14) + "." + this.Random.Number(0, 99) + " " + os_ver;
191+
var majorVersion = this.Random.Number(9, 14) + "." + this.Random.Number(0, 99);
192+
193+
var presto_ver = "Presto/" + VersionString("presto") + " Version/" + VersionString("presto2");
194+
195+
return "Opera/" + majorVersion + " " + os_ver + " " + presto_ver;
194196
}
195197
if( browser == "safari" )
196198
{
197199
var safari = VersionString("safari");
198200
var ver = this.Random.Number(4, 7) + "." + this.Random.Number(0, 1) + "." + this.Random.Number(0, 10);
199201
var os_ver = (arch == "mac")
200-
? "(Macintosh; " + RandomProc("mac") + " Mac OS X " + VersionString("osx", "_") + " rv:" + this.Random.Number(2, 6) + ".0; " + RandomLanguage() + ") "
202+
? "(Macintosh; " + RandomProc("mac") + " Mac OS X " + VersionString("osx", "_") + " rv:" + this.Random.Number(2, 6) + ".0; " + RandomLanguage() + ")"
201203
: "(Windows; U; Windows NT " + VersionString("nt") + ")";
202204

203-
return "Mozilla/5.0 " + os_ver + "AppleWebKit/" + safari + " (KHTML, like Gecko) Version/" + ver + " Safari/" + safari;
205+
return "Mozilla/5.0 " + os_ver + " AppleWebKit/" + safari + " (KHTML, like Gecko) Version/" + ver + " Safari/" + safari;
204206
}
205207
if( browser == "iexplorer" )
206208
{

0 commit comments

Comments
 (0)