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

File Contents

# User Rev Content
1 tony 323 (*
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 tony 315 unit Test12;
28    
29     {$mode objfpc}{$H+}
30    
31     {Test 12 Test use of Services Connection}
32    
33     { Tests out the Services Interface for functions:
34     1. Show Server Properties
35     2. Show Database Stats
36     3. Show Server Log
37     4. Validate Database
38     5. Database Sweep
39     6. User List Handling (Show users, create user, Edit user, Delete User)
40     7. Shutdown DB and bring back online
41     8. Client side backup/restore
42     9. Server Side Backup/restore
43     10. Limbo Transaction Resolution.
44     11. Show Database Properties
45     12. Update Database Properties
46     13. Create, Remove and Activate a Shadow File.
47     }
48    
49     interface
50    
51     uses
52     Classes, SysUtils, TestApplication, IBXTestBase, DB, IB, IBXServices,
53     IBDatabaseInfo, IBQuery, IBSQL, IBDatabase;
54    
55     const
56     aTestID = '12';
57     aTestTitle = 'Test use of Services Connection';
58    
59     type
60    
61     { TTest12 }
62    
63     TTest12 = class(TIBXTestBase)
64     private
65     FIBConfigService: TIBXConfigService;
66     FIBXServicesConnection: TIBXServicesConnection;
67     FIBLogService: TIBXLogService;
68     FIBOnlineValidationService: TIBXOnlineValidationService;
69     FIBServerProperties: TIBXServerProperties;
70     FIBStatisticalService: TIBXStatisticalService;
71     FIBValidationService: TIBXValidationService;
72     FIBXSecurityService: TIBXSecurityService;
73     FUserList: TIBXServicesUserList;
74     FBackupService: TIBXClientSideBackupService;
75     FRestoreService: TIBXClientSideRestoreService;
76     FSSBackupService: TIBXServerSideBackupService;
77     FSSRestoreService: TIBXServerSideRestoreService;
78     FLimboTransactionsList: TIBXServicesLimboTransactionsList;
79     FLimboTransResolutionService: TIBXLimboTransactionResolutionService;
80     FIBDatabaseInfo: TIBDatabaseInfo;
81     FIBShadowDatabase: TIBDatabase;
82     function IsDatabaseOnline (DBName: AnsiString): boolean;
83     function IsShadowDatabase(DBName: AnsiString): boolean;
84     procedure ShowServerProperties;
85     procedure ShowStatistics;
86     procedure ShowServerLog;
87     procedure ValidateDatabase;
88     procedure UserListHandling;
89     procedure DBUpDown;
90     procedure DatabaseSweepDB;
91     procedure BackupRestore;
92     procedure SSBackupRestore;
93     procedure LimboTransactionResolution;
94     procedure DatabasePropertiesTests;
95     procedure ShowDatabaseProperties;
96     procedure CreateShadow;
97     procedure RemoveShadow;
98     procedure ShowShadowFiles;
99     procedure ActivateShadow;
100     protected
101     procedure CreateObjects(Application: TTestApplication); override;
102     function GetTestID: AnsiString; override;
103     function GetTestTitle: AnsiString; override;
104     procedure InitTest; override;
105     procedure ProcessResults; override;
106     public
107     destructor Destroy; override;
108     procedure RunTest(CharSet: AnsiString; SQLDialect: integer); override;
109     end;
110    
111    
112     implementation
113    
114     uses IBUtils;
115    
116     const First2 = 2;
117    
118     { TTest12 }
119    
120     function TTest12.IsDatabaseOnline(DBName: AnsiString): boolean;
121     var Lines: TStringList;
122     i: integer;
123     line: string;
124     begin
125     {Scan header page to see if database is online }
126     Result := true;
127     with TIBXStatisticalService.Create(nil) do
128     try
129     ServicesConnection := FIBXServicesConnection;
130     DatabaseName := DBName;
131     Options := [HeaderPages];
132     Lines := TStringList.Create;
133     try
134     Execute(Lines);
135     for i := 0 to Lines.Count - 1 do
136     begin
137     line := Lines[i];
138     if (Pos('Attributes',Line) <> 0) and ((Pos('database shutdown',Line) <> 0)
139     or (Pos('multi-user maintenance',Line) <> 0)) then
140     begin
141     Result := false;
142     break;
143     end;
144    
145     end;
146     finally
147     Lines.Free;
148     end
149     finally
150     Free
151     end;
152     end;
153    
154     function TTest12.IsShadowDatabase(DBName: AnsiString): boolean;
155     var Lines: TStringList;
156     i: integer;
157     line: string;
158     begin
159     {Scan header page to see if database is a shadow}
160     Result := false;
161     with TIBXStatisticalService.Create(nil) do
162     try
163     ServicesConnection := FIBXServicesConnection;
164     DatabaseName := DBName;
165     Options := [HeaderPages];
166     Lines := TStringList.Create;
167     try
168     Execute(Lines);
169     for i := 0 to Lines.Count - 1 do
170     begin
171     line := Lines[i];
172     if (Pos('Attributes',Line) <> 0) and (Pos('shadow',Line) <> 0) then
173     begin
174     Result := true;
175     break;
176     end;
177    
178     end;
179     finally
180     Lines.Free;
181     end
182     finally
183     Free
184     end;
185     end;
186    
187     procedure TTest12.ShowServerProperties;
188     var i: integer;
189     begin
190     with FIBServerProperties, FIBXServicesConnection do
191     begin
192     writeln(OutFile,'Firebird Library PathName = ' + FirebirdAPI.GetFBLibrary.GetLibraryFilePath);
193     writeln(OutFile,'Connect String = ',FIBXServicesConnection.ConnectString);
194     writeln(OutFile,'Server Version = ' + VersionInfo.ServerVersion);
195     writeln(OutFile,'Server Implementation = ' + VersionInfo.ServerImplementation);
196     writeln(OutFile,'Service Version = ' + IntToStr(VersionInfo.ServiceVersion));
197     writeln(OutFile,Format('Firebird Release = %d.%d.%d (Build no. %d)',[ServerVersionNo[1],
198     ServerVersionNo[2],
199     ServerVersionNo[3],
200     ServerVersionNo[4]]));
201     writeln(OutFile,'No. of attachments = ' + IntToStr(DatabaseInfo.NoOfAttachments));
202     writeln(OutFile,'No. of databases = ' + IntToStr(DatabaseInfo.NoOfDatabases));
203     for i := 0 to DatabaseInfo.NoOfDatabases - 1 do
204     writeln(OutFile,'DB Name = ' + DatabaseInfo.DbName[i]);
205     writeln(OutFile,'Base Location = ' + ConfigParams.BaseLocation);
206     writeln(OutFile,'Lock File Location = ' + ConfigParams.LockFileLocation);
207     writeln(OutFile,'Security Database Location = ' + ConfigParams.SecurityDatabaseLocation);
208     writeln(OutFile,'Message File Location = ' + ConfigParams.MessageFileLocation);
209     for i := Low(ConfigParams.ConfigFileParams) to High(ConfigParams.ConfigFileParams) do
210     writeln(OutFile,ConfigParams.ConfigFileParams[i]);
211     for i := Low(ConfigParams.ConfigFileData.ConfigFileKey) to High(ConfigParams.ConfigFileData.ConfigFileKey) do
212     writeln(OutFile,Format('%d=%s',[ConfigParams.ConfigFileData.ConfigFileKey[i],ConfigParams.ConfigFileData.ConfigFileValue[i]]));
213     end;
214     end;
215    
216     procedure TTest12.ShowStatistics;
217     var S: TStringList;
218     begin
219     writeln(OutFile,'Database Statistics for ' + FIBStatisticalService.DatabaseName);
220     S := TStringList.Create;
221     try
222     FIBStatisticalService.Execute(S);
223     WriteStrings(S);
224     finally
225     S.Free;
226     end;
227     end;
228    
229     procedure TTest12.ShowServerLog;
230     var S: TStringList;
231     begin
232     writeln(OutFile,'Server Log');
233     S := TStringList.Create;
234     try
235     FIBLogService.Execute(S);
236     WriteStrings(S,First2);
237     finally
238     S.Free;
239     end;
240     end;
241    
242     procedure TTest12.ValidateDatabase;
243     var S: TStringList;
244     begin
245     S := TStringList.Create;
246     try
247     writeln(OutFile,'Online Validation');
248     FIBOnlineValidationService.Execute(S);
249     WriteStrings(S);
250     S.Clear;
251     writeln(OutFile,'Normal Validation');
252     FIBConfigService.ShutDownDatabase(Forced,0);
253     try
254     FIBValidationService.Options := [ValidateFull];
255     FIBValidationService.Execute(S);
256     finally
257     FIBConfigService.BringDatabaseOnline;
258     end;
259     WriteStrings(S);
260     finally
261     S.Free;
262     end;
263     writeln(OutFile,'Validation Completed');
264     end;
265    
266     procedure TTest12.UserListHandling;
267     begin
268     writeln(Outfile,' Current User List');
269     FUserList.Active := true;
270     PrintDataSet(FUserList);
271     writeln(Outfile,'Add user');
272     with FUserList do
273     begin
274     Append;
275     FieldByName('SEC$USER_NAME').AsString := 'Test12Tester';
276     FieldByName('SEC$PASSWORD').AsString := 'LetMeIn';
277     FieldByName('SEC$LAST_NAME').AsString := 'Tester';
278     Post;
279     end;
280     writeln(Outfile,'Updated User List');
281     PrintDataSet(FUserList);
282     writeln(Outfile,'Close and re-open user list');
283     FUserList.Active := false;
284     FUserList.Active := true;
285     PrintDataSet(FUserList);
286     writeln(Outfile,'Modify the new user');
287     if FUserList.Locate('SEC$USER_NAME','Test12Tester',[loCaseInsensitive]) then
288     with FUserList do
289     begin
290     Edit;
291     FieldByName('SEC$FIRST_NAME').AsString := 'The';
292     Post;
293     PrintDataSet(FUserList);
294     writeln(Outfile,'Close and re-open user list');
295     Active := false;
296     Active := true;
297     PrintDataSet(FUserList);
298     end
299     else
300     writeln(Outfile,'Added user not found');
301     writeln(Outfile,'Now delete the new user');
302     if FUserList.Locate('SEC$USER_NAME','Test12Tester',[loCaseInsensitive]) then
303     FUserList.Delete;
304     FUserList.Active := false;
305     FUserList.Active := true;
306     writeln(Outfile,'Updated User List');
307     PrintDataSet(FUserList);
308     FUserList.Active := false;
309     end;
310    
311     procedure TTest12.DBUpDown;
312     begin
313     writeln(OutFile,'Employee Database is Online = ',IsDatabaseOnline(FIBConfigService.DatabaseName));
314     FIBConfigService.ShutDownDatabase(Forced,0);
315     writeln(OutFile,'Employee Database is Online = ',IsDatabaseOnline(FIBConfigService.DatabaseName));
316     FIBConfigService.BringDatabaseOnline;
317     writeln(OutFile,'Employee Database is Online = ',IsDatabaseOnline(FIBConfigService.DatabaseName));
318     end;
319    
320     procedure TTest12.DatabaseSweepDB;
321     var S: TStringList;
322     begin
323     writeln(OutFile,'Database Sweep');
324     FIBValidationService.Options := [SweepDB];
325     S := TStringList.Create;
326     try
327     FIBValidationService.Execute(S);
328     WriteStrings(S);
329     finally
330     S.Free;
331     end;
332     writeln(OutFile,'Database Swept');
333     end;
334    
335     procedure TTest12.BackupRestore;
336     var BackupCount: integer;
337     S: TStringList;
338     begin
339     writeln(OutFile);
340     writeln(OutFile,'Starting Backup');
341     FBackupService.BackupToFile(Owner.GetBackupFileName,BackupCount);
342     writeln(OutFile,Format('Backup Completed - File Size = %d bytes',[BackupCount]));
343     writeln(OutFile,'Restore Started');
344     S := TStringList.Create;
345     try
346     FRestoreService.RestoreFromFile(Owner.GetBackupFileName,S);
347     WriteStrings(S);
348     finally
349     S.Free;
350     end;
351     writeln(Outfile,'Restore Completed');
352     DeleteFile(Owner.GetBackupFileName);
353     end;
354    
355     procedure TTest12.SSBackupRestore;
356     var S: TStringList;
357     ServerDatabase: TIBDatabase;
358     ServerTransaction: TIBTransaction;
359     ServerQuery: TIBQuery;
360     begin
361     writeln(OutFile);
362     writeln(OutFile,'Starting Server Side Backup');
363     S := TStringList.Create;
364     try
365     FSSBackupService.BackupFiles.Add(GetSSBackupFile);
366     FSSBackupService.Verbose := true;
367     FSSBackupService.Execute(S);
368     WriteStrings(S);
369     writeln(OutFile,'Backup Completed');
370     writeln(OutFile,'Restore Started');
371     FSSRestoreService.BackupFiles.Assign(FSSBackupService.BackupFiles);
372     FSSRestoreService.Execute(S);
373     WriteStrings(S);
374     finally
375     S.Free;
376     end;
377     writeln(Outfile,'Restore Completed');
378     ServerDatabase := TIBDatabase.Create(Owner);
379     ServerTransaction := TIBTransaction.Create(Owner);
380     ServerQuery := TIBQuery.Create(Owner);
381     try
382     with FIBXServicesConnection do
383     ServerDatabase.DatabaseName := MakeConnectString(ServerName,FSSRestoreService.DatabaseFiles[0],Protocol,PortNo);
384     ServerDatabase.FirebirdLibraryPathName := Owner.ClientLibraryPath;
385     ServerDatabase.LoginPrompt := false;
386     ServerDatabase.Params.Assign(IBDatabase.Params);
387     ServerTransaction.DefaultDatabase := ServerDatabase;
388     ServerTransaction.Params.Assign(IBTransaction.Params);
389     ServerDatabase.DefaultTransaction := ServerTransaction;
390     ServerQuery.Database := ServerDatabase;
391     ServerQuery.SQL.Text := 'Select * From EMPLOYEE Order by EMP_NO';
392     ServerDatabase.Connected := true;
393     try
394     ServerTransaction.Active := true;
395     ServerQuery.Active := true;
396     writeln(OutFile,'Show the EMPLOYEE Table from the restored database');
397     PrintDataset(ServerQuery);
398     finally
399     ServerDatabase.DropDatabase;
400     end;
401     finally
402     ServerQuery.Free;
403     ServerTransaction.Free;
404     ServerDatabase.Free;
405     end;
406     end;
407    
408     procedure TTest12.LimboTransactionResolution;
409     var S: TStrings;
410     begin
411     writeln(Outfile,'Show Limbo Transactions');
412     S := TStringList.Create;
413     try
414     FLimboTransactionsList.Active := true;
415     PrintDataSet(FLimboTransactionsList);
416     writeln(Outfile,'Call Fix Limbo transactions');
417     FLimboTransactionsList.FixErrors(CommitGlobal,S);
418     WriteStrings(S);
419     finally
420     S.Free;
421     end;
422     end;
423    
424     procedure TTest12.DatabasePropertiesTests;
425     begin
426     writeln(Outfile,'Update properties for ',IBDatabase.DatabaseName);
427     IBDatabase.Connected := false;
428     with FIBConfigService do
429     begin
430     SetNoLinger;
431     SetSweepInterval(10000);
432     SetDBSqlDialect(1);
433     SetPageBuffers(1024);
434     SetAsyncMode(true);
435     SetReserveSpace(false);
436     SetReadOnly(true);
437     end;
438     IBDatabase.Connected := true;
439     ShowDatabaseProperties;
440     end;
441    
442     procedure TTest12.ShowDatabaseProperties;
443     var Linger,
444     ForcedWrites,
445     ReserveSpace: TField;
446     begin
447     with FIBDatabaseInfo do
448     begin
449     writeln(Outfile,'Database Properties for ',DBFileName );
450     writeln(OutFile,'ODS Minor Version = ' + IntToStr(ODSMinorVersion));
451     writeln(OutFile,'ODS Major Version = ' + IntToStr(ODSMajorVersion));
452     writeln(OutFile,'DB SQLDialect = ' + IntToStr(DBSQLDialect));
453     writeln(OutFile,'Page Size = ' + IntToStr(PageSize));
454     writeln(OutFile,'Number of Buffers = ' + IntToStr(NumBuffers));
455     writeln(OutFile,'Version = ' + Version);
456     ShowBoolValue(ForcedWrites,'Forced Writes Enabled','Forced Writes Disabled');
457     writeln(OutFile,'Sweep Interval = ' + IntToStr(SweepInterval));
458     ShowBoolValue(ReadOnly,'Database is Read Only','Database is Read/Write');
459     writeln(Outfile,'Database Online = ',IsDatabaseOnline(DBFileName));
460     writeln(Outfile,'Database is Shadow = ',IsShadowDatabase(DBFileName));
461     end;
462     with TIBQuery.Create(nil) do
463     try
464     Database := FIBDatabaseInfo.Database;
465     Transaction := IBTransaction;
466     Transaction.Active := true;
467     SQL.Text := 'Select * From RDB$Database, MON$Database';
468     Active := true;
469     Linger := FindField('RDB$LINGER');
470     if Linger <> nil then
471     begin
472     if Linger.IsNull then
473     writeln(Outfile,'Linger = 0')
474     else
475     writeln(Outfile,'Linger = ',Linger.AsString);
476     end
477     else
478     writeln(OutFile,'Linger not found');
479     ForcedWrites := FindField('MON$FORCED_WRITES');
480     if ForcedWrites <> nil then
481     ShowBoolValue(ForcedWrites.AsInteger,'Database in Synchronous Mode','Database in Asynchronous Mode')
482     else
483     writeln(Outfile,'Sync State unknown');
484     ReserveSpace := FieldByName('MON$RESERVE_SPACE');
485     if ReserveSpace <> nil then
486     writeln(Outfile,'Reserve Space = ',ReserveSpace.AsBoolean)
487     else
488     writeln(Outfile,'Reserve Space unknown');
489     finally
490     Free
491     end;
492     end;
493    
494     procedure TTest12.CreateShadow;
495     var ShadowFileName: AnsiString;
496     begin
497     ShadowFileName := GetTempFileName;
498     with TIBSQL.Create(nil) do
499     try
500     Database := IBDatabase;
501     Transaction := IBTransaction;
502     ReadWriteTransaction;
503     SQL.Text := 'Create Shadow 1 AUTO ''' + ShadowFileName + '''';
504     Transaction.Active := true;
505     ExecQuery;
506     Transaction.Commit;
507     finally
508     Free
509     end;
510     FIBShadowDatabase.DatabaseName := MakeConnectString('',ShadowFileName,inet);
511     end;
512    
513     procedure TTest12.RemoveShadow;
514     begin
515     with TIBSQL.Create(nil) do
516     try
517     Database := IBDatabase;
518     Transaction := IBTransaction;
519     ReadWriteTransaction;
520     SQL.Text := 'Drop Shadow 1 PRESERVE FILE';
521     Transaction.Active := true;
522     ExecQuery;
523     Transaction.Commit;
524     finally
525     Free
526     end;
527     end;
528    
529     procedure TTest12.ShowShadowFiles;
530     var Qry: TIBQuery;
531     begin
532     Qry := TIBQuery.Create(nil);
533     with Qry do
534     try
535     Database := IBDatabase;
536     Transaction := IBTransaction;
537     SQl.Text := 'Select * From RDB$Files Where RDB$Shadow_Number <> 0 '+
538     'Order by RDB$Shadow_Number, RDB$FILE_SEQUENCE';
539     Transaction.Active := true;
540     Active := true;
541     writeln(Outfile,'Shadow Files');
542     PrintDataSet(Qry);
543     Transaction.Commit;
544     finally
545     Free
546     end;
547     end;
548    
549     procedure TTest12.ActivateShadow;
550     begin
551     FIBConfigService.DatabaseName := FIBShadowDatabase.DatabaseName;
552     writeln(Outfile,'Activating Shadow');
553     FIBConfigService.ActivateShadow;
554     end;
555    
556     procedure TTest12.CreateObjects(Application: TTestApplication);
557     begin
558     inherited CreateObjects(Application);
559     FIBXServicesConnection := TIBXServicesConnection.Create(Application);
560     FIBConfigService := TIBXConfigService.Create(Application);
561     FIBConfigService.ServicesConnection := FIBXServicesConnection;
562     FIBLogService := TIBXLogService.Create(Application);
563     FIBLogService.ServicesConnection := FIBXServicesConnection;
564     FIBOnlineValidationService := TIBXOnlineValidationService.Create(Application);
565     FIBOnlineValidationService.ServicesConnection := FIBXServicesConnection;
566     FIBServerProperties := TIBXServerProperties.Create(Application);
567     FIBServerProperties.ServicesConnection := FIBXServicesConnection;
568     FIBStatisticalService := TIBXStatisticalService.Create(Application);
569     FIBStatisticalService.ServicesConnection := FIBXServicesConnection;
570     FIBValidationService := TIBXValidationService.Create(Application);
571     FIBValidationService.ServicesConnection := FIBXServicesConnection;
572     FIBXSecurityService := TIBXSecurityService.Create(Application);
573     FIBXSecurityService.ServicesConnection := FIBXServicesConnection;
574     FUserList := TIBXServicesUserList.Create(Application);
575     FUserList.Source := FIBXSecurityService;
576     FBackupService := TIBXClientSideBackupService.Create(Application);
577     FBackupService.ServicesConnection := FIBXServicesConnection;
578     FRestoreService := TIBXClientSideRestoreService.Create(Application);
579     FRestoreService.ServicesConnection := FIBXServicesConnection;
580     FSSBackupService := TIBXServerSideBackupService.Create(Application);
581     FSSBackupService.ServicesConnection := FIBXServicesConnection;
582     FSSRestoreService := TIBXServerSideRestoreService.Create(Application);
583     FSSRestoreService.ServicesConnection := FIBXServicesConnection;
584     FLimboTransResolutionService := TIBXLimboTransactionResolutionService.Create(Application);
585     FLimboTransResolutionService.ServicesConnection := FIBXServicesConnection;
586     FLimboTransactionsList := TIBXServicesLimboTransactionsList.Create(Application);
587     FLimboTransactionsList.Source := FLimboTransResolutionService;
588     FIBDatabaseInfo := TIBDatabaseInfo.Create(Application);
589     FIBShadowDatabase := TIBDatabase.Create(Application);
590     end;
591    
592     function TTest12.GetTestID: AnsiString;
593     begin
594     Result := aTestID;
595     end;
596    
597     function TTest12.GetTestTitle: AnsiString;
598     begin
599     Result := aTestTitle;
600     end;
601    
602     procedure TTest12.InitTest;
603     begin
604     IBDatabase.DatabaseName := Owner.GetNewDatabaseName;
605     IBQuery.SQL.Text := 'Select * From EMPLOYEE Order by EMP_NO';
606     FIBXServicesConnection.ServerName := Owner.Server;
607     FIBXServicesConnection.Protocol := TCP;
608     FIBXServicesConnection.PortNo := Owner.PortNo;
609     FIBXServicesConnection.Params.Values['user_name'] := Owner.GetUserName;
610     FIBXServicesConnection.Params.Values['password'] := Owner.GetPassword;
611     FIBXServicesConnection.FirebirdLibraryPathName := Owner.ClientLibraryPath;
612     FIBStatisticalService.Options := [DataPages];
613     FIBStatisticalService.DatabaseName := ExtractDBName(Owner.GetEmployeeDatabaseName);
614     FIBOnlineValidationService.DatabaseName := ExtractDBName(Owner.GetEmployeeDatabaseName);
615     FIBValidationService.DatabaseName := ExtractDBName(Owner.GetEmployeeDatabaseName);
616     FIBConfigService.DatabaseName := ExtractDBName(Owner.GetEmployeeDatabaseName);
617     FBackupService.DatabaseName := ExtractDBName(Owner.GetEmployeeDatabaseName);
618     FBackupService.Options := [IgnoreLimbo];
619     FRestoreService.DatabaseFiles.Add(ExtractDBName(Owner.GetNewDatabaseName));
620     FRestoreService.StatisticsRequested := [bsTotalTime];
621     FSSBackupService.DatabaseName := ExtractDBName(Owner.GetEmployeeDatabaseName);
622     FSSBackupService.Options := [IgnoreLimbo];
623     FSSRestoreService.DatabaseFiles.Add(ExtractDBName(Owner.GetNewDatabaseName));
624     FSSRestoreService.StatisticsRequested := [bsTotalTime];
625     FLimboTransResolutionService.DatabaseName := ExtractDBName(Owner.GetEmployeeDatabaseName);
626     FIBDatabaseInfo.Database := IBDatabase;
627     ReadOnlyTransaction;
628     FIBShadowDatabase.Params.Assign(IBDatabase.Params);
629     end;
630    
631     procedure TTest12.ProcessResults;
632     begin
633     inherited ProcessResults;
634     FIBShadowDatabase.Connected := false;
635     FIBXServicesConnection.Connected := false;
636     end;
637    
638     destructor TTest12.Destroy;
639     begin
640     if FIBShadowDatabase <> nil then
641     FIBShadowDatabase.Connected := false;
642     if FIBXServicesConnection <> nil then
643     FIBXServicesConnection.Connected := false;
644     inherited Destroy;
645     end;
646    
647     procedure TTest12.RunTest(CharSet: AnsiString; SQLDialect: integer);
648     begin
649     FIBXServicesConnection.Connected := true;
650     try
651     ShowServerProperties;
652     ShowStatistics;
653     ShowServerLog;
654     ValidateDatabase;
655     DatabaseSweepDB;
656     UserListHandling;
657     DBUpDown;
658     BackupRestore;
659     writeln(OutFile,'Show the EMPLOYEE Table from the restored database');
660     IBDatabase.Connected := true;
661     try
662     IBTransaction.Active := true;
663     IBQuery.Active := true;
664     PrintDataset(IBQuery);
665     finally
666     IBDatabase.DropDatabase;
667     end;
668     SSBackupRestore;
669     exit;
670     LimboTransactionResolution;
671     IBDatabase.DatabaseName := Owner.GetNewDatabaseName;
672     FIBConfigService.DatabaseName := IBDatabase.DatabaseName;
673     FIBXServicesConnection.Connected := false;
674     writeln(Outfile,'Creating an empty database ',IBDatabase.DatabaseName);
675     IBDatabase.CreateDatabase;
676     try
677     FIBXServicesConnection.Connected := true;
678     ShowDatabaseProperties;
679     DatabasePropertiesTests;
680     finally
681     IBDatabase.DropDatabase;
682     end;
683     writeln(Outfile,'Create and activate a shadow file');
684     IBDatabase.CreateDatabase;
685     try
686     CreateShadow;
687     ShowShadowFiles;
688     RemoveShadow;
689     IBDatabase.Connected := false;
690     writeln(Outfile,FIBShadowDatabase.DatabaseName,' Is Shadow Database = ',IsShadowDatabase(FIBShadowDatabase.DatabaseName));
691     ActivateShadow;
692     writeln(Outfile,FIBShadowDatabase.DatabaseName,' Is Shadow Database = ',IsShadowDatabase(FIBShadowDatabase.DatabaseName));
693     finally
694     IBDatabase.DropDatabase;
695     FIBShadowDatabase.DropDatabase;
696     end;
697     finally
698     FIBXServicesConnection.Connected := false;
699     end;
700     end;
701    
702     initialization
703     RegisterTest(TTest12);
704    
705     end.
706