-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSessionCacheUnitTest.pas
119 lines (78 loc) · 3.39 KB
/
SessionCacheUnitTest.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
type
TSessionCacheUnitTest = class(TAbstractUnitTest)
private
Buffer: Pointer;
BufferLen: Integer;
public
constructor Create;
procedure ExecuteTest; override;
destructor Destroy; override;
end;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
constructor TSessionCacheUnitTest.Create;
begin
inherited Create;
Self.Buffer := TMemoryManager.GetMemory(MAX_DNS_PACKET_LEN);
end;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
procedure TSessionCacheUnitTest.ExecuteTest;
var
TimeStamp: TDateTime; InitSeed: Integer; i, j: Integer; OriginalSessionId: Word; RequestHash: TMD5Digest; IPv4Address: TIPv4Address; Port: Word; IsSilentUpdate, IsCacheException: Boolean; const CacheItems = 65536;
begin
TimeStamp := Now;
InitSeed := Round(Frac(TimeStamp) * 8640000.0);
TSessionCache.Initialize;
RandSeed := InitSeed;
for i := 0 to (CacheItems - 1) do begin
BufferLen := Random(MAX_DNS_PACKET_LEN - MIN_DNS_PACKET_LEN + 1) + MIN_DNS_PACKET_LEN; for j := 0 to (BufferLen - 1) do PByteArray(Buffer)^[j] := Random(256);
TSessionCache.InsertIPv4Item(TimeStamp, Word(i), Word(i), TMD5.Compute(Buffer, BufferLen), i, Word(65535 - i), (i mod 2) = 0, (i mod 2) = 1);
end;
RandSeed := InitSeed;
for i := 0 to (CacheItems - 1) do begin
BufferLen := Random(MAX_DNS_PACKET_LEN - MIN_DNS_PACKET_LEN + 1) + MIN_DNS_PACKET_LEN; for j := 0 to (BufferLen - 1) do PByteArray(Buffer)^[j] := Random(256);
if not(TSessionCache.ExtractIPv4Item(TimeStamp, OriginalSessionId, Word(i), RequestHash, IPv4Address, Port, IsSilentUpdate, IsCacheException)) then begin
raise FailedUnitTestException.Create;
end;
if (OriginalSessionId <> i) then begin
raise FailedUnitTestException.Create;
end;
TSessionCache.DeleteItem(Word(i));
if (TMD5.Compare(RequestHash, TMD5.Compute(Buffer, BufferLen)) <> 0) then begin
raise FailedUnitTestException.Create;
end;
if not(TIPv4AddressUtility.AreEqual(IPv4Address, i)) then begin
raise FailedUnitTestException.Create;
end;
if (Port <> Word(65535 - i)) then begin
raise FailedUnitTestException.Create;
end;
if (IsSilentUpdate <> ((i mod 2) = 0)) then begin
raise FailedUnitTestException.Create;
end;
if (IsCacheException <> ((i mod 2) = 1)) then begin
raise FailedUnitTestException.Create;
end;
end;
if TSessionCache.ExtractIPv4Item(TimeStamp, OriginalSessionId, 0, RequestHash, IPv4Address, Port, IsSilentUpdate, IsCacheException) then begin
raise FailedUnitTestException.Create;
end;
TSessionCache.Finalize;
end;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
destructor TSessionCacheUnitTest.Destroy;
begin
TMemoryManager.FreeMemory(Buffer, MAX_DNS_PACKET_LEN);
inherited Destroy;
end;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------