• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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