ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/testsuite/Test02.pas
Revision: 315
Committed: Thu Feb 25 11:56:36 2021 UTC (3 years, 9 months ago) by tony
Content type: text/x-pascal
File size: 5153 byte(s)
Log Message:
Updated for IBX 4 release

File Contents

# Content
1 unit Test02;
2
3 {$mode objfpc}{$H+}
4
5 {Test 2: Database Event Handlers and Idle disconnect}
6
7 { This test opens and closes a database in order to test the connect/disconnect
8 handlers. The database is re-opened to test disconnect on idle.
9
10 The transaction handlers are also tested, along with Transaction end on idle.
11
12 SQL Dialect Downgrade warning tested.
13 }
14
15 interface
16
17 uses
18 Classes, SysUtils, TestApplication, IBXTestBase, IB;
19
20 const
21 aTestID = '02';
22 aTestTitle = 'Database Event Handlers and Idle disconnect';
23
24 type
25
26 { TTest02 }
27
28 TTest02 = class(TIBXTestBase)
29 private
30 FConnectedAt: TDateTime;
31 FStartedAt: TDateTime;
32 procedure HandleBeforeConnect(Sender: TObject);
33 procedure HandleAfterConnect(Sender: TObject);
34 procedure HandleBeforeDisconnect(Sender: TObject);
35 procedure HandleAfterDisconnect(Sender: TObject);
36 procedure HandleIdleTime(Sender: TObject);
37 procedure HandleDialectDowngradeWarning(Sender: TObject);
38 procedure HandleTransactionStart(Sender: TObject);
39 procedure HandleBeforeTransactionEnd(Sender: TObject);
40 procedure HandleAfterTransactionEnd(Sender: TObject);
41 protected
42 procedure CreateObjects(Application: TTestApplication); override;
43 function GetTestID: AnsiString; override;
44 function GetTestTitle: AnsiString; override;
45 procedure InitTest; override;
46 public
47 procedure RunTest(CharSet: AnsiString; SQLDialect: integer); override;
48 end;
49
50
51 implementation
52
53 uses DateUtils, IBDatabase;
54
55 { TTest02 }
56
57 procedure TTest02.HandleBeforeConnect(Sender: TObject);
58 begin
59 writeln(OutFile,'Before Connect');
60 end;
61
62 procedure TTest02.HandleAfterConnect(Sender: TObject);
63 begin
64 FConnectedAt := Now;
65 writeln(OutFile,'Connected to ' + (Sender as TIBDatabase).DatabaseName);
66 PrintDPB((Sender as TIBDatabase).attachment.getDPB);
67 end;
68
69 procedure TTest02.HandleBeforeDisconnect(Sender: TObject);
70 begin
71 writeln(OutFile,'Before Disconnect');
72 end;
73
74 procedure TTest02.HandleAfterDisconnect(Sender: TObject);
75 begin
76 writeln(OutFile,(Sender as TIBDatabase).DatabaseName,' Disconnected after ',MilliSecondsBetween(FConnectedAt,Now),' ms');
77 end;
78
79 procedure TTest02.HandleIdleTime(Sender: TObject);
80 begin
81 writeln(OutFile,'Idle Timer Expired for ',(Sender as TComponent).Name);
82 end;
83
84 procedure TTest02.HandleDialectDowngradeWarning(Sender: TObject);
85 begin
86 writeln(OutFile,'Warning: SQL Dialect Downgrade of ',(Sender as TIBDatabase).DatabaseName);
87 end;
88
89 procedure TTest02.HandleTransactionStart(Sender: TObject);
90 begin
91 write(OutFile,'Requested ');
92 PrintTPB((Sender as TIBTransaction).TPB);
93 writeln(OutFile,'Transaction Starts');
94 PrintTPB((Sender as TIBTransaction).TransactionIntf.getTPB);
95 FStartedAt := Now;
96 end;
97
98 procedure TTest02.HandleBeforeTransactionEnd(Sender: TObject);
99 begin
100 writeln(OutFile,'Transaction Ending');
101 end;
102
103 procedure TTest02.HandleAfterTransactionEnd(Sender: TObject);
104 begin
105 writeln(OutFile,'Transaction Ended after ',MilliSecondsBetween(FStartedAt,Now),' ms');
106 end;
107
108 procedure TTest02.CreateObjects(Application: TTestApplication);
109 begin
110 inherited CreateObjects(Application);
111 end;
112
113 function TTest02.GetTestID: AnsiString;
114 begin
115 Result := aTestID;
116 end;
117
118 function TTest02.GetTestTitle: AnsiString;
119 begin
120 Result := aTestTitle;
121 end;
122
123 procedure TTest02.InitTest;
124 begin
125 IBDatabase.DatabaseName := Owner.GetEmployeeDatabaseName;
126 IBDatabase.BeforeConnect := @HandleBeforeConnect;
127 IBDatabase.AfterConnect := @HandleAfterConnect;
128 IBDatabase.BeforeDisconnect := @HandleBeforeDisconnect;
129 IBDatabase.AfterDisconnect := @HandleAfterDisconnect;
130 IBDatabase.OnIdleTimer := @HandleIdleTime;
131 IBDatabase.OnDialectDowngradeWarning := @HandleDialectDowngradeWarning;
132 IBTransaction.OnStartTransaction := @HandleTransactionStart;
133 IBTransaction.BeforeTransactionEnd := @HandleBeforeTransactionEnd;
134 IBTransaction.AfterTransactionEnd := @HandleAfterTransactionEnd;
135 IBTransaction.OnIdleTimer := @HandleIdleTime;
136 ReadOnlyTransaction;
137 end;
138
139 procedure TTest02.RunTest(CharSet: AnsiString; SQLDialect: integer);
140 begin
141 IBDatabase.Connected := true;
142 IBDatabase.Connected := false;
143 IBDatabase.IdleTimer := 2000; {miliseconds}
144 IBDatabase.Connected := true;
145 while IBDatabase.Connected do
146 CheckSynchronize(100);
147 writeln(OutFile,'Database Closed');
148
149 writeln(OutFile,'Transaction Events');
150 IBDatabase.Connected := true;
151 IBTransaction.Active := true;
152 IBTransaction.Active := false;
153 writeln(Outfile,'Transaction idle timer test');
154 IBTransaction.IdleTimer := 1000; {millseconds}
155 IBTransaction.Active := true;
156 while IBTransaction.Active do
157 CheckSynchronize(100);
158 IBDatabase.Connected := false;
159
160 writeln(OutFile,'SQL Dialect Downgrade test');
161 IBDatabase.DatabaseName := Owner.GetNewDatabaseName;
162 IBDatabase.CreateIfNotExists := true;
163 IBDatabase.SQLDialect := 1;
164 ReadWriteTransaction;
165 IBDatabase.Connected := true;
166 if IBDatabase.Connected then
167 begin
168 writeln(OutFile,IBDatabase.DatabaseName,' created');
169 IBDatabase.Connected := false;
170 IBDatabase.SQLDialect := 3;
171 IBDatabase.Connected := true;
172 IBDatabase.DropDatabase;
173 end;
174 end;
175
176 initialization
177 RegisterTest(TTest02);
178
179 end.
180