public static DnsResourceData NextDnsResourceData(this Random random, DnsType type) { switch (type) { case DnsType.A: return(new DnsResourceDataIpV4(random.NextIpV4Address())); case DnsType.Ns: case DnsType.Md: case DnsType.MailForwarder: case DnsType.CName: case DnsType.Mailbox: case DnsType.MailGroup: case DnsType.MailRename: case DnsType.Ptr: case DnsType.NetworkServiceAccessPointPointer: case DnsType.DName: return(new DnsResourceDataDomainName(random.NextDnsDomainName())); case DnsType.StartOfAuthority: return(new DnsResourceDataStartOfAuthority(random.NextDnsDomainName(), random.NextDnsDomainName(), random.NextUInt(), random.NextUInt(), random.NextUInt(), random.NextUInt(), random.NextUInt())); case DnsType.Null: return(new DnsResourceDataAnything(random.NextDataSegment(random.Next(65536)))); case DnsType.Wks: return(new DnsResourceDataWellKnownService(random.NextIpV4Address(), random.NextEnum <IpV4Protocol>(), random.NextDataSegment(random.Next(10)))); case DnsType.HInfo: return(new DnsResourceDataHostInformation(random.NextDataSegment(random.Next(10)), random.NextDataSegment(random.Next(10)))); case DnsType.MInfo: return(new DnsResourceDataMailingListInfo(random.NextDnsDomainName(), random.NextDnsDomainName())); case DnsType.MailExchange: return(new DnsResourceDataMailExchange(random.NextUShort(), random.NextDnsDomainName())); case DnsType.Txt: case DnsType.Spf: return(new DnsResourceDataText(((Func <DataSegment>)(() => random.NextDataSegment(random.Next(10)))).GenerateArray(10).AsReadOnly())); case DnsType.ResponsiblePerson: return(new DnsResourceDataResponsiblePerson(random.NextDnsDomainName(), random.NextDnsDomainName())); case DnsType.AfsDatabase: return(new DnsResourceDataAfsDatabase(random.NextEnum <DnsAfsDatabaseSubtype>(), random.NextDnsDomainName())); case DnsType.X25: return(new DnsResourceDataString(random.NextDataSegment(random.Next(10)))); case DnsType.Isdn: return(random.NextBool() ? new DnsResourceDataIsdn(random.NextDataSegment(random.Next(10))) : new DnsResourceDataIsdn(random.NextDataSegment(random.Next(10)), random.NextDataSegment(random.Next(10)))); case DnsType.RouteThrough: return(new DnsResourceDataRouteThrough(random.NextUShort(), random.NextDnsDomainName())); case DnsType.NetworkServiceAccessPoint: return(new DnsResourceDataNetworkServiceAccessPoint(random.NextDataSegment(1 + random.Next(10)), random.NextUInt48(), random.NextByte())); case DnsType.Signature: case DnsType.ResourceRecordSignature: return(new DnsResourceDataSignature(random.NextEnum <DnsType>(), random.NextEnum <DnsAlgorithm>(), random.NextByte(), random.NextUInt(), random.NextUInt(), random.NextUInt(), random.NextUShort(), random.NextDnsDomainName(), random.NextDataSegment(random.Next(100)))); case DnsType.Key: return(new DnsResourceDataKey(random.NextBool(), random.NextBool(), random.NextBool(), random.NextBool(), random.NextBool(), random.NextBool(), random.NextEnum <DnsKeyNameType>(), random.NextFlags <DnsKeySignatoryAttributes>(), random.NextEnum <DnsKeyProtocol>(), random.NextEnum <DnsAlgorithm>(), random.NextBool() ? (ushort?)random.NextUShort() : null, random.NextDataSegment(random.Next(100)))); case DnsType.PointerX400: return(new DnsResourceDataX400Pointer(random.NextUShort(), random.NextDnsDomainName(), random.NextDnsDomainName())); case DnsType.GPos: return(new DnsResourceDataGeographicalPosition((random.NextInt(-90, 90) * random.NextDouble()).ToString("0.##########"), (random.NextInt(-180, 180) * random.NextDouble()).ToString("0.##########"), (random.NextInt(-500, 50000) * random.NextDouble()).ToString("0.##########"))); case DnsType.Aaaa: return(new DnsResourceDataIpV6(random.NextIpV6Address())); case DnsType.Loc: return(new DnsResourceDataLocationInformation(random.NextByte(), (ulong)(random.NextInt(0, 10) * Math.Pow(10, random.NextInt(0, 10))), (ulong)(random.NextInt(0, 10) * Math.Pow(10, random.NextInt(0, 10))), (ulong)(random.NextInt(0, 10) * Math.Pow(10, random.NextInt(0, 10))), random.NextUInt(), random.NextUInt(), random.NextUInt())); case DnsType.NextDomain: byte[] typeBitmap = random.NextBytes(random.Next(DnsResourceDataNextDomain.MaxTypeBitmapLength + 1)); if (typeBitmap.Length > 0 && typeBitmap[typeBitmap.Length - 1] == 0) { typeBitmap[typeBitmap.Length - 1] = random.NextByte(1, 256); } return(new DnsResourceDataNextDomain(random.NextDnsDomainName(), new DataSegment(typeBitmap))); case DnsType.EId: case DnsType.NimrodLocator: case DnsType.DynamicHostConfigurationId: return(new DnsResourceDataAnything(random.NextDataSegment(random.Next(32)))); case DnsType.ServerSelection: return(new DnsResourceDataServerSelection(random.NextUShort(), random.NextUShort(), random.NextUShort(), random.NextDnsDomainName())); case DnsType.AtmA: return(new DnsResourceDataAtmAddress(random.NextEnum <DnsAtmAddressFormat>(), random.NextDataSegment(random.Next(100)))); case DnsType.NaPtr: IEnumerable <byte> possibleFlags = Enumerable.Range('0', '9' - '0' + 1).Concat(Enumerable.Range('a', 'z' - 'a' + 1)).Concat(Enumerable.Range('A', 'Z' - 'A' + 1)).Select(value => (byte)value); return(new DnsResourceDataNamingAuthorityPointer( random.NextUShort(), random.NextUShort(), new DataSegment(FuncExtensions.GenerateArray(() => random.NextValue(possibleFlags.ToArray()), 10)), random.NextDataSegment(random.Next(100)), random.NextDataSegment(random.Next(100)), random.NextDnsDomainName())); case DnsType.KeyExchanger: return(new DnsResourceDataKeyExchanger(random.NextUShort(), random.NextDnsDomainName())); case DnsType.Cert: return(new DnsResourceDataCertificate(random.NextEnum <DnsCertificateType>(), random.NextUShort(), random.NextEnum <DnsAlgorithm>(), random.NextDataSegment(random.Next(100)))); case DnsType.A6: byte prefixLength = random.NextByte(DnsResourceDataA6.MaxPrefixLength + 1); UInt128 addressSuffixValue = random.NextUInt128() >> prefixLength; if (prefixLength < DnsResourceDataA6.MaxPrefixLength) { addressSuffixValue = (addressSuffixValue >> 1) + (UInt128.One << (127 - prefixLength)); } return(new DnsResourceDataA6(prefixLength, new IpV6Address(addressSuffixValue), random.NextDnsDomainName())); case DnsType.Sink: return(new DnsResourceDataSink(random.NextEnum <DnsSinkCoding>(), random.NextByte(), random.NextDataSegment(random.Next(100)))); case DnsType.Opt: return(new DnsResourceDataOptions(random.NextDnsOptions())); case DnsType.Apl: return(new DnsResourceDataAddressPrefixList( ((Func <DnsAddressPrefix>) (() => new DnsAddressPrefix(random.NextEnum <AddressFamily>(), random.NextByte(), random.NextBool(), random.NextDataSegment(random.Next(0, 128))))).GenerateArray(random.Next(10)))); case DnsType.DelegationSigner: case DnsType.Cds: case DnsType.TrustAnchor: case DnsType.DnsSecLookAsideValidation: return(new DnsResourceDataDelegationSigner(random.NextUShort(), random.NextEnum <DnsAlgorithm>(), random.NextEnum <DnsDigestType>(), random.NextDataSegment(random.Next(50)))); case DnsType.SshFingerprint: return(new DnsResourceDataSshFingerprint(random.NextEnum <DnsFingerprintPublicKeyAlgorithm>(), random.NextEnum <DnsFingerprintType>(), random.NextDataSegment(random.Next(20)))); case DnsType.IpSecKey: return(new DnsResourceDataIpSecKey(random.NextByte(), random.NextDnsGateway(), random.NextEnum <DnsPublicKeyAlgorithm>(), random.NextDataSegment(random.Next(100)))); case DnsType.NSec: return(new DnsResourceDataNextDomainSecure(random.NextDnsDomainName(), random.NextDnsTypeArray(random.Next(100)))); case DnsType.DnsKey: return(new DnsResourceDataDnsKey(random.NextBool(), random.NextBool(), random.NextBool(), random.NextByte(), random.NextEnum <DnsAlgorithm>(), random.NextDataSegment(random.Next(100)))); case DnsType.NSec3: return(new DnsResourceDataNextDomainSecure3(random.NextEnum <DnsSecNSec3HashAlgorithm>(), random.NextFlags <DnsSecNSec3Flags>(), random.NextUShort(), random.NextDataSegment(random.Next(10)), random.NextDataSegment(10), random.NextDnsTypeArray(random.Next(100)))); case DnsType.NSec3Parameters: return(new DnsResourceDataNextDomainSecure3Parameters(random.NextEnum <DnsSecNSec3HashAlgorithm>(), random.NextFlags <DnsSecNSec3Flags>(), random.NextUShort(), random.NextDataSegment(random.Next(10)))); case DnsType.Hip: return(new DnsResourceDataHostIdentityProtocol(random.NextDataSegment(random.NextInt(0, 100)), random.NextEnum <DnsPublicKeyAlgorithm>(), random.NextDataSegment(random.NextInt(0, 100)), ((Func <DnsDomainName>)(() => random.NextDnsDomainName())).GenerateArray(random.NextInt(0, 10)))); case DnsType.NInfo: return(new DnsResourceDataNInfo(((Func <DataSegment>)(() => random.NextDataSegment(random.NextInt(1, 10)))).GenerateArray(10).AsReadOnly())); case DnsType.RKey: return(new DnsResourceDataRKey(random.NextUShort(), random.NextByte(), random.NextEnum <DnsAlgorithm>(), random.NextDataSegment(random.NextInt(0, 100)))); case DnsType.TrustAnchorLink: return(new DnsResourceDataTrustAnchorLink(random.NextDnsDomainName(), random.NextDnsDomainName())); case DnsType.TKey: return(new DnsResourceDataTransactionKey(random.NextDnsDomainName(), random.NextUInt(), random.NextUInt(), random.NextEnum <DnsTransactionKeyMode>(), random.NextEnum <DnsResponseCode>(), random.NextDataSegment(random.NextInt(0, 100)), random.NextDataSegment(random.NextInt(0, 100)))); case DnsType.TransactionSignature: return(new DnsResourceDataTransactionSignature(random.NextDnsDomainName(), random.NextUInt48(), random.NextUShort(), random.NextDataSegment(random.NextInt(0, 100)), random.NextUShort(), random.NextEnum <DnsResponseCode>(), random.NextDataSegment(random.NextInt(0, 100)))); case DnsType.Uri: return(new DnsResourceDataUri(random.NextUShort(), random.NextUShort(), ((Func <DataSegment>)(() => random.NextDataSegment(random.NextInt(0, 100)))).GenerateArray(random.NextInt(0, 10)))); case DnsType.CertificationAuthorityAuthorization: return(new DnsResourceDataCertificationAuthorityAuthorization(random.NextFlags <DnsCertificationAuthorityAuthorizationFlags>(), random.NextDataSegment(random.NextInt(0, 16)), random.NextDataSegment(random.NextInt(0, 100)))); default: return(new DnsResourceDataAnything(random.NextDataSegment(random.Next(100)))); } }
public void GenerateArrayNullTest() { Assert.IsNotNull(FuncExtensions.GenerateArray <int>(null, 100)); Assert.Fail(); }