1% Regression tests for Scapy random objects 2 3############ 4############ 5+ Random objects 6 7= RandomEnumeration 8 9ren = RandomEnumeration(0, 7, seed=0x2807, forever=False) 10[x for x in ren] == [5, 0, 2, 7, 6, 3, 1, 4] 11 12= RandIP6 13 14random.seed(0x2807) 15r6 = RandIP6() 16assert r6 == "240b:238f:b53f:b727:d0f9:bfc4:2007:e265" 17assert r6.command() == "RandIP6()" 18 19random.seed(0x2807) 20r6 = RandIP6("2001:db8::-") 21assert r6 == "2001:0db8::b53f" 22assert r6.command() == "RandIP6(ip6template='2001:db8::-')" 23 24r6 = RandIP6("2001:db8::*") 25assert r6 == "2001:0db8::bfc4" 26assert r6.command() == "RandIP6(ip6template='2001:db8::*')" 27 28= RandMAC 29 30random.seed(0x2807) 31rm = RandMAC() 32assert rm == "24:23:b5:b7:d0:bf" 33assert rm.command() == "RandMAC()" 34 35rm = RandMAC("00:01:02:03:04:0-7") 36assert rm == "00:01:02:03:04:01" 37assert rm.command() == "RandMAC(template='00:01:02:03:04:0-7')" 38 39 40= RandOID 41 42random.seed(0x2807) 43rand_obj = RandOID() 44assert rand_obj == "7.222.44.194.276.116.320.6.84.97.31.5.25.20.13.84.104.18" 45assert rand_obj.command() == "RandOID()" 46 47rand_obj = RandOID("1.2.3.*") 48assert rand_obj == "1.2.3.41" 49assert rand_obj.command() == "RandOID(fmt='1.2.3.*')" 50 51rand_obj = RandOID("1.2.3.0-28") 52assert rand_obj == "1.2.3.12" 53assert rand_obj.command() == "RandOID(fmt='1.2.3.0-28')" 54 55rand_obj = RandOID("1.2.3.0-28", depth=RandNumExpo(0.2), idnum=RandNumExpo(0.02)) 56assert rand_obj.command() == "RandOID(fmt='1.2.3.0-28', depth=RandNumExpo(lambd=0.2), idnum=RandNumExpo(lambd=0.02))" 57 58= RandRegExp 59~ not_pyannotate 60 61random.seed(0x2807) 62rex = RandRegExp("[g-v]* @? [0-9]{3} . (g|v)") 63bytes(rex) == b'irrtv @ 517 \xc2\xb8 v' 64assert rex.command() == "RandRegExp(regexp='[g-v]* @? [0-9]{3} . (g|v)')" 65 66rex = RandRegExp("[:digit:][:space:][:word:]") 67assert re.match(b"\\d\\s\\w", bytes(rex)) 68 69= Corrupted(Bytes|Bits) 70 71random.seed(0x2807) 72cb = CorruptedBytes("ABCDE", p=0.5) 73assert cb.command() == "CorruptedBytes(s='ABCDE', p=0.5)" 74assert sane(raw(cb)) in [".BCD)", "&BCDW"] 75 76cb = CorruptedBits("ABCDE", p=0.2) 77assert cb.command() == "CorruptedBits(s='ABCDE', p=0.2)" 78assert sane(raw(cb)) in ["ECk@Y", "QB.P."] 79 80= RandEnumKeys 81random.seed(0x2807) 82rek = RandEnumKeys({'a': 1, 'b': 2, 'c': 3}, seed=0x2807) 83rek.enum.sort() 84assert rek.command() == "RandEnumKeys(enum=['a', 'b', 'c'], seed=10247)" 85r = str(rek) 86assert r == 'a' 87 88= RandSingNum 89random.seed(0x2807) 90rs = RandSingNum(-28, 7) 91assert rs._fix() in [2, 3] 92assert rs.command() == "RandSingNum(mn=-28, mx=7)" 93 94= Rand* 95random.seed(0x2807) 96rss = RandSingString() 97assert rss == "foo.exe:" 98assert rss.command() == "RandSingString()" 99 100random.seed(0x2807) 101rts = RandTermString(4, "scapy") 102assert sane(raw(rts)) in ["...Zscapy", "$#..scapy"] 103assert rts.command() == "RandTermString(size=4, term=b'scapy')" 104 105= RandInt (test __bool__) 106a = "True" if RandNum(False, True) else "False" 107assert a in ["True", "False"] 108 109= Various volatiles 110 111random.seed(0x2807) 112rng = RandNumGamma(1, 42) 113assert rng._fix() in (8, 73) 114assert rng.command() == "RandNumGamma(alpha=1, beta=42)" 115 116random.seed(0x2807) 117rng = RandNumGauss(1, 42) 118assert rng._fix() == 8 119assert rng.command() == "RandNumGauss(mu=1, sigma=42)" 120 121renum = RandEnum(1, 42, seed=0x2807) 122assert renum == 37 123assert renum.command() == "RandEnum(min=1, max=42, seed=10247)" 124 125rp = RandPool((IncrementalValue(), 42), (IncrementalValue(), 0)) 126assert rp == 0 127assert rp.command() == "RandPool((IncrementalValue(), 42), (IncrementalValue(), 0))" 128 129de = DelayedEval("3 + 1") 130assert de == 4 131assert de.command() == "DelayedEval(expr='3 + 1')" 132 133v = IncrementalValue(restart=2) 134assert v == 0 and v == 1 and v == 2 and v == 0 135assert v.command() == "IncrementalValue(restart=2)" 136