Skip to content

Commit

Permalink
Add Min/Max to IPv4, IPv6 and MAC addresses generation (#6)
Browse files Browse the repository at this point in the history
* RandomizerIPv4Address

* ipv6

* MAC

* fix RandomizerIPv4Address

* refactor
  • Loading branch information
StefH committed Nov 20, 2018
1 parent c33764d commit 63529c4
Show file tree
Hide file tree
Showing 32 changed files with 241 additions and 60 deletions.
30 changes: 27 additions & 3 deletions src/ConsoleAppClassic/MainTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,27 @@ public static void Run()
var randomizerCity = RandomizerFactory.GetRandomizer(new FieldOptionsCity());
string city = randomizerCity.Generate();
Write(randomizerCity, city);
string cityUpper = randomizerCity.Generate(true);
Write(randomizerCity, cityUpper);

var randomizerCountry = RandomizerFactory.GetRandomizer(new FieldOptionsCountry());
string country = randomizerCountry.Generate();
Write(randomizerCountry, country);

var randomizerMAC = RandomizerFactory.GetRandomizer(new FieldOptionsMACAddress { Min = "00-11-22-33-44-55", Max = "aa-bb-cc-dd-ee-ff", Separator = "-" });
string mac = randomizerMAC.Generate();
Write(randomizerMAC, mac);

var randomizerIPv4 = RandomizerFactory.GetRandomizer(new FieldOptionsIPv4Address { Min = "127.0.2.233", Max = "128.190.255.244" });
string ipv4 = randomizerIPv4.Generate();
Write(randomizerIPv4, ipv4);

var randomizerIPv6 = RandomizerFactory.GetRandomizer(new FieldOptionsIPv6Address { Min = "0000:0001:0000:0000:0020:ff00:0042:8000", Max = "2001:0db8:0120:0000:0030:ff00:aa42:8329" });
string ipv6 = randomizerIPv6.Generate();
Write(randomizerIPv6, ipv6);
string ipv6Lower = randomizerIPv6.Generate(false);
Write(randomizerIPv6, ipv6Lower);

var randomizerTimeSpan = RandomizerFactory.GetRandomizer(new FieldOptionsTimeSpan { From = TimeSpan.FromDays(1), To = TimeSpan.FromDays(7) });
TimeSpan? ts = randomizerTimeSpan.Generate();
Write(randomizerTimeSpan, ts);
Expand All @@ -27,7 +43,7 @@ public static void Run()
string tsC = randomizerTimeSpanC.GenerateAsString();
Write(randomizerTimeSpanC, tsC);

var randomizerDateTime = RandomizerFactory.GetRandomizer(new FieldOptionsDateTime { From = DateTime.Today.AddDays(-1888) });
var randomizerDateTime = RandomizerFactory.GetRandomizer(new FieldOptionsDateTime { From = DateTime.Today.AddYears(-1) });
DateTime? date = randomizerDateTime.Generate();
Write(randomizerDateTime, date);
string dateAsString = randomizerDateTime.GenerateAsString();
Expand All @@ -45,10 +61,18 @@ public static void Run()
string firstname = randomizerFirstName.Generate();
Write(randomizerFirstName, firstname);

var randomizerLastName = RandomizerFactory.GetRandomizer(new FieldOptionsLastName());
string lastname = randomizerLastName.Generate();
Write(randomizerLastName, lastname);

var randomizerBoolean = RandomizerFactory.GetRandomizer(new FieldOptionsBoolean());
bool? b = randomizerBoolean.Generate();
Write(randomizerBoolean, b);

var randomizerByte = RandomizerFactory.GetRandomizer(new FieldOptionsByte());
byte? bt = randomizerByte.Generate();
Write(randomizerByte, bt);

var randomizerShort = RandomizerFactory.GetRandomizer(new FieldOptionsShort());
short? sh = randomizerShort.Generate();
Write(randomizerShort, sh);
Expand All @@ -75,7 +99,7 @@ public static void Run()
string guidAsString = randomizerGuid.GenerateAsString();
Write(randomizerGuid, guidAsString);

var randomizerStringList = RandomizerFactory.GetRandomizer(new FieldOptionsStringList { Values = new[] { "1", "b" }.ToList() });
var randomizerStringList = RandomizerFactory.GetRandomizer(new FieldOptionsStringList { Values = new[] { "1", "b", "c" }.ToList() });
string stringListValue = randomizerStringList.Generate();
Write(randomizerStringList, stringListValue);

Expand Down Expand Up @@ -114,7 +138,7 @@ public static void Run()
private static void Write<T>(object randomizer, T value)
{
Type genericType = randomizer.GetType().GetTypeInfo().GenericTypeArguments.FirstOrDefault();
Console.WriteLine("{0}{1} --> '{2}'", randomizer.GetType().Name, genericType != null ? $"[{genericType}]" : string.Empty, value);
Console.WriteLine("{0}{1} --> '{2}'", randomizer.GetType().Name, genericType != null ? $"[{genericType.Name}]" : string.Empty, value);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ public override void SetOptionsAndUpdateControls(FieldOptionsMACAddress options)
{
base.SetOptionsAndUpdateControls(options);

chkAddColons.Checked = FieldOptions.AddColons;
chkAddColons.Checked = FieldOptions.Separator == ":";
chkUppercase.Checked = FieldOptions.Uppercase;
}

public override FieldOptionsMACAddress GetFieldOptionsT()
{
FieldOptions = base.GetFieldOptionsT();

FieldOptions.AddColons = chkAddColons.Checked;
FieldOptions.Separator = chkAddColons.Checked ? ":" : string.Empty;
FieldOptions.Uppercase = chkUppercase.Checked;

return FieldOptions;
Expand Down
15 changes: 15 additions & 0 deletions src/RandomDataGenerator/Extensions/StringExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
namespace RandomDataGenerator.Extensions
{
internal static class StringExtensions
{
public static string ToCasedInvariant(this string str, bool toUpper)
{
if (str == null)
{
return null;
}

return toUpper ? str.ToUpperInvariant() : str.ToLowerInvariant();
}
}
}
10 changes: 10 additions & 0 deletions src/RandomDataGenerator/FieldOptions/FieldOptionsByte.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

namespace RandomDataGenerator.FieldOptions
{
public class FieldOptionsByte : FieldOptionsNumber<byte>
{
public override byte Min { get; set; }

public override byte Max { get; set; } = byte.MaxValue;
}
}
4 changes: 2 additions & 2 deletions src/RandomDataGenerator/FieldOptions/FieldOptionsDateTime.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ public class FieldOptionsDateTime : FieldOptionsAbstract, IFieldOptionsDateTime

public string Format { get; set; } = DefaultFormat;

public DateTime From { get; set; } = DateTime.Now.Date;
public DateTime From { get; set; } = DateTime.UtcNow.Date;

public DateTime To { get; set; } = DateTime.Now.AddYears(1).Date;
public DateTime To { get; set; } = DateTime.UtcNow.Date.AddYears(1);

public bool IncludeTime { get; set; } = true;
}
Expand Down
2 changes: 1 addition & 1 deletion src/RandomDataGenerator/FieldOptions/FieldOptionsDouble.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ public class FieldOptionsDouble : FieldOptionsNumber<double>
{
public override double Min { get; set; }

public override double Max { get; set; } = 99999999.0;
public override double Max { get; set; } = double.MaxValue;
}
}
2 changes: 1 addition & 1 deletion src/RandomDataGenerator/FieldOptions/FieldOptionsFloat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ public class FieldOptionsFloat : FieldOptionsNumber<float>
{
public override float Min { get; set; }

public override float Max { get; set; } = 99999999.0F;
public override float Max { get; set; } = float.MaxValue;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@ namespace RandomDataGenerator.FieldOptions
{
public class FieldOptionsIPv4Address : FieldOptionsAbstract, IFieldOptionsString
{
public string Min { get; set; }

public string Max { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,10 @@ namespace RandomDataGenerator.FieldOptions
{
public class FieldOptionsIPv6Address : FieldOptionsAbstract, IFieldOptionsString
{
public bool Uppercase { get; set; }

public string Min { get; set; }

public string Max { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ public class FieldOptionsInteger : FieldOptionsNumber<int>
{
public override int Min { get; set; }

public override int Max { get; set; } = 99999999;
public override int Max { get; set; } = int.MaxValue;
}
}
2 changes: 1 addition & 1 deletion src/RandomDataGenerator/FieldOptions/FieldOptionsLong.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ public class FieldOptionsLong : FieldOptionsNumber<long>
{
public override long Min { get; set; }

public override long Max { get; set; } = 999999999999;
public override long Max { get; set; } = long.MaxValue;
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@

namespace RandomDataGenerator.FieldOptions
namespace RandomDataGenerator.FieldOptions
{
public class FieldOptionsMACAddress : FieldOptionsAbstract, IFieldOptionsString
{
public bool AddColons { get; set; } = true;
public string Separator { get; set; } = ":";

public bool Uppercase { get; set; } = true;

public string Min { get; set; }

public string Max { get; set; }
}
}
12 changes: 0 additions & 12 deletions src/RandomDataGenerator/FieldOptions/FieldOptionsTextPattern.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,5 @@ public class FieldOptionsTextPattern : FieldOptionsAbstract, IFieldOptionsString
/// \ - for character as-is
/// </summary>
public string Pattern { get; set; }

//public bool UseUppercase { get; set; } = true;

//public bool UseLowercase { get; set; } = true;

//public bool UseLetter { get; set; } = true;

//public bool UseNumber { get; set; } = true;

//public bool UseSpace { get; set; } = true;

//public bool UseSpecial { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ public class FieldOptionsTimeSpan : FieldOptionsAbstract, IFieldOptionsTimeSpan

public TimeSpan From { get; set; }

public TimeSpan To { get; set; } = TimeSpan.FromDays(1);
public TimeSpan To { get; set; } = TimeSpan.MaxValue;
}
}
21 changes: 20 additions & 1 deletion src/RandomDataGenerator/Generators/RandomValueGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ internal static class RandomValueGenerator
private static double _storedUniformDeviate;
private static bool _storedUniformDeviateIsGood;

public static Type[] SupportedTypes { get; } = { typeof(bool), typeof(short), typeof(int), typeof(long), typeof(float), typeof(double), typeof(long), typeof(DateTime), typeof(TimeSpan) };
public static Type[] SupportedTypes { get; } = { typeof(bool), typeof(byte), typeof(short), typeof(int), typeof(long), typeof(float), typeof(double), typeof(long), typeof(DateTime), typeof(TimeSpan) };

#region -- Construction/Initialization --

Expand Down Expand Up @@ -73,6 +73,11 @@ public static T Next<T>(T min, T max)
return (T)(object)NextBoolean();
}

if (typeof(T) == typeof(byte))
{
return (T)(object)Next((byte)(object)min, (byte)(object)max);
}

if (typeof(T) == typeof(short))
{
return (T)(object)Next((short)(object)min, (short)(object)max);
Expand Down Expand Up @@ -111,6 +116,20 @@ public static T Next<T>(T min, T max)
throw new NotSupportedException($"The type '{typeof(T)}' cannot be used.");
}

/// <summary>
/// Returns byte in the range [min, max)
/// </summary>
public static byte Next(byte min, byte max)
{
if (max <= min)
{
throw new ArgumentException("Max must be greater than min.");
}

double rn = (max * 1.0 - min * 1.0) * _rnf.NextDouble() + min * 1.0;
return Convert.ToByte(rn);
}

/// <summary>
/// Returns Int16 in the range [min, max)
/// </summary>
Expand Down
2 changes: 1 addition & 1 deletion src/RandomDataGenerator/RandomDataGenerator.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<Version>1.0.3.0</Version>
<Version>1.0.4.0</Version>
<AssemblyTitle>Random Data Generator</AssemblyTitle>
<Title>Random Data Generator</Title>
<PackageDescription>This is a configurable generator to create random data like Lorum Ipsum Text, Words, Text Patterns, First/Last Names, IP-Addresses, Guids, DateTime and more.</PackageDescription>
Expand Down
2 changes: 2 additions & 0 deletions src/RandomDataGenerator/Randomizers/IRandomizerString.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,7 @@
public interface IRandomizerString
{
string Generate();

string Generate(bool upperCase);
}
}
8 changes: 7 additions & 1 deletion src/RandomDataGenerator/Randomizers/RandomizerCity.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using RandomDataGenerator.FieldOptions;
using RandomDataGenerator.Extensions;
using RandomDataGenerator.FieldOptions;
using RandomDataGenerator.Generators;
using RandomDataGenerator.TextData;

Expand All @@ -17,5 +18,10 @@ public string Generate()
{
return IsNull() ? null : _generator.Generate();
}

public string Generate(bool upperCase)
{
return Generate().ToCasedInvariant(upperCase);
}
}
}
8 changes: 7 additions & 1 deletion src/RandomDataGenerator/Randomizers/RandomizerCountry.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using RandomDataGenerator.FieldOptions;
using RandomDataGenerator.Extensions;
using RandomDataGenerator.FieldOptions;
using RandomDataGenerator.Generators;
using RandomDataGenerator.TextData;

Expand All @@ -17,5 +18,10 @@ public string Generate()
{
return IsNull() ? null : _generator.Generate();
}

public string Generate(bool upperCase)
{
return Generate().ToCasedInvariant(upperCase);
}
}
}
5 changes: 5 additions & 0 deletions src/RandomDataGenerator/Randomizers/RandomizerEmailAddress.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,5 +52,10 @@ public string Generate()

return $"{firstName}.{lastname}@{company}.{domain}";
}

public string Generate(bool upperCase)
{
return Generate().ToCasedInvariant(upperCase);
}
}
}
6 changes: 6 additions & 0 deletions src/RandomDataGenerator/Randomizers/RandomizerFirstName.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using RandomDataGenerator.Extensions;
using RandomDataGenerator.FieldOptions;
using RandomDataGenerator.Generators;
using RandomDataGenerator.TextData;
Expand Down Expand Up @@ -37,5 +38,10 @@ public string Generate()

return _genderSetGenerators[maleOrFemale].Generate();
}

public string Generate(bool upperCase)
{
return Generate().ToCasedInvariant(upperCase);
}
}
}
6 changes: 6 additions & 0 deletions src/RandomDataGenerator/Randomizers/RandomizerFullName.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using RandomDataGenerator.Extensions;
using RandomDataGenerator.FieldOptions;
using RandomDataGenerator.Generators;
using RandomDataGenerator.TextData;
Expand Down Expand Up @@ -44,5 +45,10 @@ public string Generate()

return $"{firstName} {lastname}";
}

public string Generate(bool upperCase)
{
return Generate().ToCasedInvariant(upperCase);
}
}
}
4 changes: 2 additions & 2 deletions src/RandomDataGenerator/Randomizers/RandomizerGuid.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using RandomDataGenerator.Extensions;
using RandomDataGenerator.FieldOptions;

namespace RandomDataGenerator.Randomizers
Expand Down Expand Up @@ -26,8 +27,7 @@ public string GenerateAsString()
return null;
}

string guid = Guid.NewGuid().ToString();
return Options.Uppercase ? guid.ToUpperInvariant() : guid.ToLowerInvariant();
return Guid.NewGuid().ToString().ToCasedInvariant(Options.Uppercase);
}
}
}
Loading

0 comments on commit 63529c4

Please sign in to comment.