ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/testsuite/Test28.pas
Revision: 323
Committed: Thu Feb 25 12:14:35 2021 UTC (3 years, 8 months ago) by tony
Content type: text/x-pascal
File size: 5867 byte(s)
Log Message:
Fixed Merged

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 Test28;
28
29 {$mode objfpc}{$H+}
30
31 {Test 28: Create Local Database from Script}
32
33 { Description
34 }
35
36 interface
37
38 uses
39 Classes, SysUtils, TestApplication, IBXTestBase, IB, IBCMLocalDBSupport,
40 IBExtract, IBSQL;
41
42 const
43 aTestID = '28';
44 aTestTitle = 'Create Local Database from Script';
45
46 type
47
48 { TTest28 }
49
50 TTest28 = class(TIBXTestBase)
51 private
52 FLocalDB: TIBCMLocalDBSupport;
53 FExtract: TIBExtract;
54 procedure HandleExtractLine(Sender: TObject; start, count: integer);
55 procedure HandleGetDBVersionNo(Sender: TObject; var VersionNo: integer);
56 procedure HandleLogMessage(Sender: TObject; Msg: string);
57 procedure GetSharedDirectory(Sender: TObject; var SharedDataDir: string);
58 procedure InsertRecord;
59 protected
60 procedure CreateObjects(Application: TTestApplication); override;
61 function GetTestID: AnsiString; override;
62 function GetTestTitle: AnsiString; override;
63 procedure InitTest; override;
64 public
65 procedure RunTest(CharSet: AnsiString; SQLDialect: integer); override;
66 end;
67
68
69 implementation
70
71 { TTest28 }
72
73 procedure TTest28.HandleExtractLine(Sender: TObject; start, count: integer);
74 var i: integer;
75 begin
76 for i := 0 to count - 1 do
77 writeln(OutFile,FExtract.Items[start + i]);
78 end;
79
80 procedure TTest28.HandleGetDBVersionNo(Sender: TObject; var VersionNo: integer);
81 begin
82 VersionNo := 0;
83 IBTransaction.Active := true;
84 try
85 with TIBSQL.Create(nil) do
86 try
87 Database := IBDatabase;
88 Transaction := IBTransaction;
89 SQL.Text := 'Select * From RDB$RELATIONS Where RDB$RELATION_NAME = ''DBVERSIONINFO''';
90 ExecQuery;
91 try
92 if EOF then Exit;
93 finally
94 Close;
95 end;
96 finally
97 Free
98 end;
99
100 with TIBSQL.Create(nil) do
101 try
102 Database := IBDatabase;
103 Transaction := IBTransaction;
104 SQL.Text := 'Select VersionNo From DBVersionInfo';
105 ExecQuery;
106 try
107 VersionNo := FieldByName('VersionNo').AsInteger;
108 finally
109 Close;
110 end;
111 finally
112 Free;
113 end;
114 finally
115 IBTransaction.Commit;
116 end;
117 end;
118
119 procedure TTest28.HandleLogMessage(Sender: TObject; Msg: string);
120 begin
121 writeln(OutFile,Msg);
122 end;
123
124 procedure TTest28.GetSharedDirectory(Sender: TObject; var SharedDataDir: string
125 );
126 begin
127 SharedDataDir := 'resources/Test28';
128 end;
129
130 procedure TTest28.InsertRecord;
131 begin
132 with TIBSQL.Create(nil) do
133 try
134 Database := IBDatabase;
135 Transaction := IBTransaction;
136 Transaction.Active := true;
137 SQL.Text := 'INSERT INTO IBDATASETTEST (KeyField,PlainText) Values(Gen_ID(AGenerator,1),''Test'')';
138 ExecQuery;
139 Transaction.Commit;
140 finally
141 Free;
142 end;
143 end;
144
145 procedure TTest28.CreateObjects(Application: TTestApplication);
146 begin
147 inherited CreateObjects(Application);
148 FLocalDB := TIBCMLocalDBSupport.Create(Application);
149 FLocalDB.Database := IBDatabase;
150 FLocalDB.VendorName := 'MWA Software';
151 FLocalDB.OnGetDBVersionNo := @HandleGetDBVersionNo;
152 FLocalDB.OnLogMessage := @HandleLogMessage;
153 FLocalDB.OnGetSharedDataDir := @GetSharedDirectory;
154 FExtract := TIBExtract.Create(Application);
155 FExtract.Database := IBDatabase;
156 FExtract.Transaction := IBTransaction;
157 FExtract.OnExtractLines := @HandleExtractLine;
158 end;
159
160 function TTest28.GetTestID: AnsiString;
161 begin
162 Result := aTestID;
163 end;
164
165 function TTest28.GetTestTitle: AnsiString;
166 begin
167 Result := aTestTitle;
168 end;
169
170 procedure TTest28.InitTest;
171 begin
172 IBDatabase.DatabaseName := 'nemo';
173 FLocalDB.DatabaseName := ExtractDBName(Owner.GetNewDatabaseName);
174 FLocalDB.EmptyDBArchive := 'schema.sql';
175 FLocalDB.RequiredVersionNo := 1;
176 ReadWriteTransaction;
177 end;
178
179 procedure TTest28.RunTest(CharSet: AnsiString; SQLDialect: integer);
180 var BackupFileName: string;
181 begin
182 IBDatabase.Connected := true;
183 try
184 writeln(Outfile,'Show schema for ',IBDatabase.DatabaseName);
185 FExtract.ExtractObject(eoDatabase,'',[etGrantsToUser,etData]);
186
187 InsertRecord;
188 writeln(Outfile,'Now test out an upgrade failure');
189 IBDatabase.connected := false;
190 FLocalDB.RequiredVersionNo := 2;
191 FLocalDB.UpgradeConfFile := 'upgrade.conf';
192 try
193 IBDatabase.connected := true;
194 except on E:Exception do
195 begin
196 writeln(Outfile,'Upgrade failed (as expected): ',E.Message);
197 FLocalDB.RequiredVersionNo := 1;
198 IBDatabase.Connected := true;
199 end;
200 end;
201 writeln(Outfile,'Schema after failed upgrade is');
202 FExtract.ExtractObject(eoDatabase,'',[etGrantsToUser,etData]);
203 writeln(Outfile,'Save and Restore Tests');
204 InsertRecord;
205 BackupFileName := Owner.GetBackupFileName;
206 FLocalDB.SaveDatabase(BackupFileName);
207 InsertRecord;
208 FLocalDB.RestoreDatabase(BackupFileName);
209 writeln(Outfile,'Database after restore');
210 FExtract.ExtractObject(eoDatabase,'',[etGrantsToUser,etData]);
211 finally
212 IBDatabase.DropDatabase;
213 end;
214 end;
215
216 initialization
217 RegisterTest(TTest28);
218
219 end.
220