ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/testsuite/Test21.pas
Revision: 345
Committed: Mon Aug 23 14:22:29 2021 UTC (2 years, 7 months ago) by tony
Content type: text/x-pascal
File size: 5060 byte(s)
Log Message:
Merged into public release

File Contents

# Content
1 (*
2 * IBX Test suite. This program is used to test the IBX non-visual
3 * components and provides a semi-automated pass/fail check for each test.
4 *
5 * The contents of this file are subject to the Initial Developer's
6 * Public License Version 1.0 (the "License"); you may not use this
7 * file except in compliance with the License. You may obtain a copy
8 * of the License here:
9 *
10 * http://www.firebirdsql.org/index.php?op=doc&id=idpl
11 *
12 * Software distributed under the License is distributed on an "AS
13 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
14 * implied. See the License for the specific language governing rights
15 * and limitations under the License.
16 *
17 * The Initial Developer of the Original Code is Tony Whyman.
18 *
19 * The Original Code is (C) 2021 Tony Whyman, MWA Software
20 * (http://www.mwasoftware.co.uk).
21 *
22 * All Rights Reserved.
23 *
24 * Contributor(s): ______________________________________.
25 *
26 *)
27 unit Test21;
28
29 {$mode objfpc}{$H+}
30
31 {Test 21: Big dataset test}
32
33 { create a 100,000 record database.
34 read it back and check for errors using an MD5 message digest.
35 }
36
37 interface
38
39 uses
40 Classes, SysUtils, TestApplication, IBXTestBase, IB, IBSQL;
41
42 const
43 aTestID = '21';
44 aTestTitle = 'Big dataset test';
45
46 type
47
48 { TTest21 }
49
50 TTest21 = class(TIBXTestBase)
51 private
52 FIBSQL: TIBSQL;
53 function StuffDatabase: TMsgHash;
54 function ReadDatabase: TMsgHash;
55 protected
56 procedure CreateObjects(Application: TTestApplication); override;
57 function GetTestID: AnsiString; override;
58 function GetTestTitle: AnsiString; override;
59 procedure InitTest; override;
60 public
61 procedure RunTest(CharSet: AnsiString; SQLDialect: integer); override;
62 end;
63
64
65 implementation
66
67 uses DateUtils;
68
69 const
70 testText = 'The quick brown fox jumped over the lazy dog';
71 RecordCount = 100000;
72
73 { TTest21 }
74
75 function TTest21.StuffDatabase: TMsgHash;
76 var i: integer;
77 HashString: AnsiString;
78 Started: TDateTime;
79 begin
80 Started := Now;
81 Result := TMsgHash.CreateMsgHash;
82 writeln(Outfile,'Loading data into database table. Started at ',DateTimeToStr(Started));
83 IBTransaction.Active := true;
84 for i := 1 to RecordCount do
85 with FIBSQL do
86 begin
87 Params[0].AsInteger := i;
88 Params[1].AsString := DateTimeToStr(Now) + testText + testText + testText + testText;
89 Params[2].AsDateTime := Now;
90 HashString := Params[0].Asstring + Params[1].AsString + DateTimeToStr(Params[2].AsDateTime);
91 ExecQuery;
92 Result.AddText(HashString);
93 end;
94 IBTransaction.Commit;
95 Result.Finalise;
96 writeln(OutFile, 'Data load completed at ',DateTimeToStr(Now), ' Elapsed Time = ',
97 (MilliSecondsBetween(Now,Started)),' ms, ',RecordCount,' records loaded');
98 writeln(Outfile,' Message Hash = ',Result.Digest);
99 end;
100
101 function TTest21.ReadDatabase: TMsgHash;
102 var Started: TDateTime;
103 HashString: AnsiString;
104 Count: integer;
105 begin
106 Result := TMsgHash.CreateMsgHash;
107 IBTransaction.Active := true;
108 Started := Now;
109 Count := 0;
110 writeln(Outfile,'Database Read started at ',DateTimeToStr(Started));
111 with IBQuery do
112 begin
113 Active := true;
114 while not EOF do
115 begin
116 Inc(Count);
117 HashString := Fields[0].AsString + Fields[1].AsString + DateTimeToStr(Fields[2].AsDateTime);
118 Result.AddText(HashString);
119 Next;
120 end;
121 end;
122 writeln(OutFile, 'Read Dataset completed at ',DateTimeToStr(Now), ' Elapsed Time = ',
123 (MilliSecondsBetween(Now,Started)), ' ms, ',Count,' records read');
124 Result.Finalise;
125 writeln(Outfile,' Message Hash = ',Result.Digest);
126 end;
127
128 procedure TTest21.CreateObjects(Application: TTestApplication);
129 begin
130 inherited CreateObjects(Application);
131 FIBSQL := TIBSQL.Create(Application);
132 with FIBSQL do
133 begin
134 Database := IBDatabase;
135 Transaction := IBTransaction;
136 SQL.Text := 'Insert into LotsOfData(RowID,Mytext,theDate) Values(?,?,?)';
137 ParamCheck := false;
138 end;
139 IBQuery.SQL.Text := 'Select RowID,MyText,theDate from LotsOfData';
140 end;
141
142 function TTest21.GetTestID: AnsiString;
143 begin
144 Result := aTestID;
145 end;
146
147 function TTest21.GetTestTitle: AnsiString;
148 begin
149 Result := aTestTitle;
150 end;
151
152 procedure TTest21.InitTest;
153 begin
154 IBDatabase.DatabaseName := Owner.GetNewDatabaseName;
155 IBDatabase.CreateIfNotExists := true;
156 ReadWriteTransaction;
157 end;
158
159 procedure TTest21.RunTest(CharSet: AnsiString; SQLDialect: integer);
160 var InHash,OutHash: TMsgHash;
161 begin
162 IBDatabase.CreateDatabase;
163 try
164 InHash := StuffDatabase; {This creates a database holding a large 100,000 record table}
165 try
166 OutHash := ReadDatabase;
167 try
168 if InHash.SameHash(OutHash) then
169 writeln(Outfile,'Test Completed successfully')
170 else
171 writeln(Outfile,'Test failed. Message checksum error');
172 writeln(Outfile,DateTimeToStr(Now),' Test ',aTestID,' passes as long as the checksums are identical');
173 finally
174 OutHash.Free;
175 end;
176 finally
177 Inhash.Free;
178 end;
179 finally
180 IBDatabase.DropDatabase;
181 end;
182 end;
183
184 initialization
185 RegisterTest(TTest21);
186
187 end.
188