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

File Contents

# Content
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 Test16;
30 {$IFDEF MSWINDOWS}
31 {$DEFINE WINDOWS}
32 {$ENDIF}
33
34 {$IFDEF FPC}
35 {$mode delphi}
36 {$codepage UTF8}
37 {$ENDIF}
38
39 {Test 16: Error handling}
40
41 { This test tests for correct responses to various error conditions:
42
43 - Malformed database name.
44 - Invalid User Name
45 - Invalid password
46 - Invalid Update SQL Statement
47 - Invalid Select SQL
48 - Transaction not started
49 - Invalid parameter by name when should be positional
50 - Invalid server name
51 - invalid user name - logon to server
52 - invalid password
53 }
54
55 interface
56
57 uses
58 Classes, SysUtils, TestApplication, FBTestApp, IB;
59
60 type
61
62 { TTest16 }
63
64 TTest16 = class(TFBTestBase)
65 private
66 procedure DBTests(CharSet: AnsiString; SQLDialect: integer);
67 procedure ServiceTests(CharSet: AnsiString; SQLDialect: integer);
68 public
69 function TestTitle: AnsiString; override;
70 procedure RunTest(CharSet: AnsiString; SQLDialect: integer); override;
71 end;
72
73
74 implementation
75
76 { TTest16 }
77
78 procedure TTest16.DBTests(CharSet: AnsiString; SQLDialect: integer);
79 var DPB: IDPB;
80 Attachment: IAttachment;
81 Transaction: ITransaction;
82 Statement: IStatement;
83 begin
84 DPB := FirebirdAPI.AllocateDPB;
85 DPB.Add(isc_dpb_user_name).setAsString(Owner.GetUserName);
86 DPB.Add(isc_dpb_password).setAsString(Owner.GetPassword);
87 DPB.Add(isc_dpb_lc_ctype).setAsString('UTF8');
88 DPB.Add(isc_dpb_set_db_SQL_dialect).setAsByte(SQLDialect);
89 try
90 writeln(OutFile,'Invalid Database Name Test');
91 Attachment := FirebirdAPI.OpenDatabase('localhost:Malformed Name',DPB);
92 except on E: Exception do
93 writeln(OutFile,'Error Handled: ',E.Message);
94 end;
95 DPB.Find(isc_dpb_user_name).setAsString('Captain Nemo');
96 try
97 writeln(OutFile,'Invalid User Name Test');
98 Attachment := FirebirdAPI.OpenDatabase(Owner.GetEmployeeDatabaseName,DPB);
99 except on E: Exception do
100 writeln(OutFile,'Error Handled: ',E.Message);
101 end;
102 DPB.Find(isc_dpb_user_name).setAsString(Owner.GetUserName);
103 DPB.Find(isc_dpb_password).setAsString('not a pwd');
104 try
105 writeln(OutFile,'Invalid password Test');
106 Attachment := FirebirdAPI.OpenDatabase(Owner.GetEmployeeDatabaseName,DPB);
107 except on E: Exception do
108 writeln(OutFile,'Error Handled: ',E.Message);
109 end;
110 DPB.Find(isc_dpb_password).setAsString(Owner.GetPassword);
111 Attachment := FirebirdAPI.OpenDatabase(Owner.GetEmployeeDatabaseName,DPB);
112 Transaction := Attachment.StartTransaction([isc_tpb_write,isc_tpb_nowait,isc_tpb_concurrency],taRollback);
113 try
114 writeln(OutFile,'Invalid Prepare SQL Test');
115 Statement := Attachment.Prepare(Transaction,'Update Employee Set Unknown_Date = ? Where EMP_NO = ?',3);
116 except on E: Exception do
117 writeln(OutFile,'Error Handled: ',E.Message);
118 end;
119 try
120 writeln(OutFile,'Invalid Open Cursor SQL Test');
121 Attachment.OpenCursorAtStart(Transaction,
122 'Select X,count(*) As Counter from EMPLOYEE',3);
123 except on E: Exception do
124 writeln(OutFile,'Error Handled: ',E.Message);
125 end;
126 Transaction.Rollback;
127 try
128 writeln(OutFile,'Transaction not started Test');
129 Attachment.OpenCursorAtStart(Transaction,
130 'Select count(*) As Counter from EMPLOYEE',3);
131 except on E: Exception do
132 writeln(OutFile,'Error Handled: ',E.Message);
133 end;
134 Transaction.Start;
135 try
136 writeln(OutFile,'Invalid Param SQL Type Test');
137 Statement := Attachment.Prepare(Transaction,'Update Employee Set Hire_Date = ? Where EMP_NO = ?',3);
138 Statement.SQLParams.ByName('EMP_NO').AsDate := EncodeDate(2016,11,5);
139 except on E: Exception do
140 writeln(OutFile,'Error Handled: ',E.Message);
141 end;
142 Transaction.Rollback;
143 Transaction.Start;
144 try
145 writeln(OutFile,'Case sensitive Param SQL Test');
146 Statement := Attachment.PrepareWithNamedParameters(Transaction,'Update Employee Set Hire_Date = :Hire_Date Where emp_no = :emp_no',3,false,true);
147 Statement.SQLParams.ByName('Hire_Date').AsDate := EncodeDate(2016,11,5);
148 Statement.SQLParams.ByName('emp_no').AsInteger := 1;
149 Statement.SQLParams.ByName('EMP_NO').AsInteger := 1;
150 except on E: Exception do
151 writeln(OutFile,'Error Handled: ',E.Message);
152 end;
153 end;
154
155 procedure TTest16.ServiceTests(CharSet: AnsiString; SQLDialect: integer);
156 var SPB: ISPB;
157 Service: IServiceManager;
158 ServerName: AnsiString;
159 DBName: AnsiString;
160 begin
161 if not FirebirdAPI.HasServiceAPI then Exit;
162
163 DBName := ExtractDBName(Owner.GetEmployeeDatabaseName);
164 ServerName := Owner.Server;
165
166 SPB := FirebirdAPI.AllocateSPB;
167 SPB.Add(isc_spb_user_name).setAsString(Owner.GetUserName);
168 SPB.Add(isc_spb_password).setAsString(Owner.GetPassword);
169 try
170 writeln(OutFile,'Invalid Server Name Test');
171 Service := FirebirdAPI.GetServiceManager('unknown',TCP,SPB);
172 except on E: Exception do
173 writeln(OutFile,'Error Handled: ',E.Message);
174 end;
175
176 SPB.Find(isc_spb_user_name).setAsString('Captain Nemo');
177 try
178 writeln(OutFile,'Invalid User Name Test');
179 Service := FirebirdAPI.GetServiceManager(ServerName,TCP,SPB);
180 except on E: Exception do
181 writeln(OutFile,'Error Handled: ',E.Message);
182 end;
183 SPB.Find(isc_spb_user_name).setAsString(Owner.GetUserName);
184 SPB.Find(isc_spb_password).setAsString('Bad pwd');
185 try
186 writeln(OutFile,'Invalid password Test');
187 Service := FirebirdAPI.GetServiceManager(ServerName,TCP,SPB);
188 except on E: Exception do
189 writeln(OutFile,'Error Handled: ',E.Message);
190 end;
191 end;
192
193 function TTest16.TestTitle: AnsiString;
194 begin
195 Result := 'Test 16: Error handling';
196 end;
197
198 procedure TTest16.RunTest(CharSet: AnsiString; SQLDialect: integer);
199 begin
200 DBTests(Charset,SQLDialect);
201 ServiceTests(Charset,SQLDialect);
202 end;
203
204 initialization
205 RegisterTest(TTest16);
206 end.
207