1 |
+ |
(* |
2 |
+ |
* Firebird Interface (fbintf) Test suite. This program is used to |
3 |
+ |
* test the Firebird Pascal Interface and provide a semi-automated |
4 |
+ |
* pass/fail check for each test. |
5 |
+ |
* |
6 |
+ |
* The contents of this file are subject to the Initial Developer's |
7 |
+ |
* Public License Version 1.0 (the "License"); you may not use this |
8 |
+ |
* file except in compliance with the License. You may obtain a copy |
9 |
+ |
* of the License here: |
10 |
+ |
* |
11 |
+ |
* http://www.firebirdsql.org/index.php?op=doc&id=idpl |
12 |
+ |
* |
13 |
+ |
* Software distributed under the License is distributed on an "AS |
14 |
+ |
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or |
15 |
+ |
* implied. See the License for the specific language governing rights |
16 |
+ |
* and limitations under the License. |
17 |
+ |
* |
18 |
+ |
* The Initial Developer of the Original Code is Tony Whyman. |
19 |
+ |
* |
20 |
+ |
* The Original Code is (C) 2016 Tony Whyman, MWA Software |
21 |
+ |
* (http://www.mwasoftware.co.uk). |
22 |
+ |
* |
23 |
+ |
* All Rights Reserved. |
24 |
+ |
* |
25 |
+ |
* Contributor(s): ______________________________________. |
26 |
+ |
* |
27 |
+ |
*) |
28 |
+ |
|
29 |
|
unit Test11; |
30 |
+ |
{$IFDEF MSWINDOWS} |
31 |
+ |
{$DEFINE WINDOWS} |
32 |
+ |
{$ENDIF} |
33 |
|
|
34 |
< |
{$mode objfpc}{$H+} |
34 |
> |
{$IFDEF FPC} |
35 |
> |
{$mode delphi} |
36 |
|
{$codepage utf8} |
37 |
+ |
{$ENDIF} |
38 |
|
|
39 |
|
{Test 11: Services API} |
40 |
|
|
58 |
|
interface |
59 |
|
|
60 |
|
uses |
61 |
< |
Classes, SysUtils, TestManager, IB; |
61 |
> |
Classes, SysUtils, TestApplication, FBTestApp, IB; |
62 |
|
|
63 |
|
type |
64 |
|
|
65 |
|
{ TTest11 } |
66 |
|
|
67 |
< |
TTest11 = class(TTestBase) |
67 |
> |
TTest11 = class(TFBTestBase) |
68 |
|
private |
69 |
< |
procedure GetStatistics(Service: IServiceManager; DBName: string); |
70 |
< |
procedure BackupRestore(Service: IServiceManager; DBName: string); |
69 |
> |
procedure GetStatistics(Service: IServiceManager; DBName: AnsiString); |
70 |
> |
procedure BackupRestore(Service: IServiceManager; DBName: AnsiString); |
71 |
|
public |
72 |
< |
function TestTitle: string; override; |
73 |
< |
procedure RunTest(CharSet: string; SQLDialect: integer); override; |
72 |
> |
function TestTitle: AnsiString; override; |
73 |
> |
procedure RunTest(CharSet: AnsiString; SQLDialect: integer); override; |
74 |
|
end; |
75 |
|
|
76 |
|
implementation |
77 |
|
|
78 |
|
{ TTest11 } |
79 |
|
|
80 |
< |
procedure TTest11.GetStatistics(Service: IServiceManager; DBName: string); |
80 |
> |
procedure TTest11.GetStatistics(Service: IServiceManager; DBName: AnsiString); |
81 |
|
var Req: ISRB; |
82 |
|
Results: IServiceQueryResults; |
83 |
|
begin |
191 |
|
writeln(OutFile); |
192 |
|
end; |
193 |
|
|
194 |
< |
procedure TTest11.BackupRestore(Service: IServiceManager; DBName: string); |
194 |
> |
procedure TTest11.BackupRestore(Service: IServiceManager; DBName: AnsiString); |
195 |
|
var Req: ISRB; |
196 |
|
Results: IServiceQueryResults; |
197 |
|
BakFile: TFileStream; |
200 |
|
SQPB: ISQPB; |
201 |
|
bytesWritten: integer; |
202 |
|
bytesAvailable: integer; |
203 |
< |
i: integer; |
171 |
< |
RestoreDBName: string; |
203 |
> |
RestoreDBName: AnsiString; |
204 |
|
Attachment: IAttachment; |
205 |
|
DPB: IDPB; |
206 |
|
begin |
223 |
|
QueryResultsItem := Results.Find(isc_info_svc_to_eof); |
224 |
|
if QueryResultsItem <> nil then |
225 |
|
bytesWritten := QueryResultsItem.CopyTo(BakFile,0); |
226 |
< |
until (bytesWritten = 0) or not WriteServiceQueryResult(Results); |
226 |
> |
until ((bytesWritten = 0) and (Results.Find(isc_info_svc_timeout) = nil)) |
227 |
> |
or not WriteServiceQueryResult(Results); |
228 |
|
writeln(OutFile,'Local Backup Complete'); |
229 |
|
finally |
230 |
|
BakFile.Free; |
236 |
|
|
237 |
|
{Local Restore} |
238 |
|
writeln(OutFile,'Local Restore'); |
239 |
< |
RestoreDBName := Owner.GetNewDatabaseName; |
207 |
< |
i := Pos(':',RestoreDBName); |
208 |
< |
if i > 0 then |
209 |
< |
system.Delete(RestoreDBName,1,i); |
239 |
> |
RestoreDBName := ExtractDBName(Owner.GetNewDatabaseName); |
240 |
|
Req := Service.AllocateSRB; |
241 |
|
Req.Add(isc_action_svc_restore); |
242 |
|
Req.Add(isc_spb_dbname).AsString := RestoreDBName; |
254 |
|
SQPB := Service.AllocateSQPB; |
255 |
|
if ReqLength > 0 then |
256 |
|
bytesWritten := SQPB.Add(isc_info_svc_line).CopyFrom(BakFile,ReqLength); |
257 |
< |
bytesAvailable -= bytesWritten; |
257 |
> |
bytesAvailable := bytesAvailable - bytesWritten; |
258 |
|
Req := Service.AllocateSRB; |
259 |
|
Req.Add(isc_info_svc_stdin); |
260 |
|
Req.Add(isc_info_svc_line); |
283 |
|
writeln(OutFile,'Database Dropped'); |
284 |
|
end; |
285 |
|
|
286 |
< |
function TTest11.TestTitle: string; |
286 |
> |
function TTest11.TestTitle: AnsiString; |
287 |
|
begin |
288 |
|
Result := 'Test 11: Services API'; |
289 |
|
end; |
290 |
|
|
291 |
< |
procedure TTest11.RunTest(CharSet: string; SQLDialect: integer); |
291 |
> |
procedure TTest11.RunTest(CharSet: AnsiString; SQLDialect: integer); |
292 |
|
var SPB: ISPB; |
293 |
|
Service: IServiceManager; |
294 |
< |
I: integer; |
295 |
< |
ServerName: string; |
266 |
< |
DBName: string; |
294 |
> |
ServerName: AnsiString; |
295 |
> |
DBName: AnsiString; |
296 |
|
begin |
297 |
|
if not FirebirdAPI.HasServiceAPI then Exit; |
298 |
|
|
299 |
< |
ServerName := Owner.GetEmployeeDatabaseName; |
300 |
< |
I := Pos(':',ServerName); |
272 |
< |
if i > 0 then |
273 |
< |
DBName := system.copy(ServerName,i+1,length(ServerName) - 2); |
274 |
< |
system.Delete(ServerName,i,Length(ServerName)-i+1); |
299 |
> |
DBName := ExtractDBName(Owner.GetEmployeeDatabaseName); |
300 |
> |
ServerName := Owner.Server; |
301 |
|
|
302 |
|
SPB := FirebirdAPI.AllocateSPB; |
303 |
|
SPB.Add(isc_spb_user_name).setAsString(Owner.GetUserName); |
304 |
|
SPB.Add(isc_spb_password).setAsString(Owner.GetPassword); |
305 |
|
Service := FirebirdAPI.GetServiceManager(ServerName,TCP,SPB); |
306 |
+ |
PrintSPB(Service.getSPB); |
307 |
|
|
308 |
|
GetStatistics(Service,DBName); |
309 |
|
BackupRestore(Service,DBName); |