tctestsql.pas 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690
  1. unit tctestsql;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, fpcunit, testregistry, tsutils, tsdb, tstypes, sqldb, pqconnection;
  6. type
  7. { TTestSQLCase }
  8. { TTestBaseSQLCase }
  9. TTestBaseSQLCase = class(TTestCase)
  10. Protected
  11. function CreateResultData(out aData: TTestRunData; out aResult: TTestResultData; DateOffset: Integer = 0): Int64;
  12. function PreparePlatform(var aData: TTestRunData): Integer;
  13. procedure CreateSource(const aFileName : String);
  14. procedure DeleteSource(const aFileName: String);
  15. procedure AssertTestRunData(aQry: TSQLQuery; aData: TTestRunData);
  16. function GetSQL: TTestSQL; virtual; abstract;
  17. property SQL : TTestSQL Read GetSQL;
  18. end;
  19. TTestSQLCase = class(TTestBaseSQLCase)
  20. const
  21. SQLTestResultFilter = '(TR_ID=%d) and (TR_TESTRUN_FK=%d) and (TR_TEST_FK=%d) and (TR_OK=''%s'') and (TR_SKIP=''%s'') and (TR_RESULT=%d) and (TR_LOG=''%s'')';
  22. private
  23. protected
  24. function GetSQL: TTestSQL; override;
  25. protected
  26. procedure SetUp; override;
  27. procedure TearDown; override;
  28. published
  29. procedure TestHookUp;
  30. procedure TestAddCPU;
  31. procedure TestAddOS;
  32. procedure TestAddVersion;
  33. procedure TestAddCategory;
  34. procedure TestAddTest;
  35. Procedure TestUpdateTest;
  36. procedure TestAddPlatform;
  37. Procedure TestAddRun;
  38. procedure TestUpdateRun;
  39. Procedure TestAddTestResult;
  40. Procedure TestAddTestResultTwice;
  41. Procedure TestUpdateTestResult;
  42. Procedure TestAddLastResult;
  43. Procedure TestAddLastResultTwice;
  44. Procedure TestGetLastTestResult;
  45. Procedure TestAddPreviousResult;
  46. Procedure TestAddPreviousResultTwice;
  47. procedure TestGetCPUID;
  48. procedure TestGetOSID;
  49. procedure TestGetCategoryID;
  50. procedure TestGetVersionID;
  51. procedure TestGetTestID;
  52. procedure TestGetRunID;
  53. procedure TestHistoryNoHistory;
  54. procedure TestHistoryWithHistory;
  55. Procedure TestGetPreviousTestRun;
  56. Procedure TestGetNextTestRun;
  57. end;
  58. implementation
  59. uses tsstring, tcsetup;
  60. { TTestBaseSQLCase }
  61. procedure TTestBaseSQLCase.DeleteSource(const aFileName: String);
  62. begin
  63. if FileExists(aFilename+'.pp') then
  64. if not DeleteFile(aFilename+'.pp') then
  65. Fail('Failed to delete '+aFileName+'.pp');
  66. end;
  67. procedure TTestBaseSQLCase.CreateSource(const aFileName: String);
  68. var
  69. Src : TStrings;
  70. begin
  71. Src:=TStringList.Create;
  72. try
  73. Src.Add('program '+aFileName+';');
  74. Src.Add('begin');
  75. Src.Add('end.');
  76. Src.SaveToFile(afileName+'.pp');
  77. finally
  78. Src.Free;
  79. end;
  80. end;
  81. function TTestBaseSQLCase.PreparePlatform(var aData : TTestRunData) : Integer;
  82. begin
  83. aData.CategoryID:=SQL.GetCategoryID('x');
  84. if aData.CategoryID=-1 then
  85. aData.CategoryID:=SQL.AddCategory('x');
  86. aData.OSID:=SQL.GetOSID('y');
  87. if aData.OSID=-1 then
  88. aData.OSID:=SQL.AddOS('y');
  89. aData.CPUID:=SQL.GetCPUID('z');
  90. if aData.CPUID=-1 then
  91. aData.CPUID:=SQL.AddCPU('z');
  92. aData.VersionID:=SQL.GetVersionID('w');
  93. if aData.VersionID=-1 then
  94. aData.VersionID:=SQL.AddVersion('w',Date);
  95. aData.config:='v';
  96. aData.machine:='w';
  97. Result:=SQL.GetPlatformID(aData,False);
  98. if Result=-1 then
  99. Result:=SQL.AddPlatform(aData);
  100. end;
  101. procedure TTestBaseSQLCase.AssertTestRunData(aQry : TSQLQuery; aData : TTestRunData);
  102. var
  103. St : TTestStatus;
  104. begin
  105. With aQry,aData do
  106. begin
  107. AssertEquals('Date',DATE,FieldByName('TU_DATE').AsDateTime);
  108. AssertEquals('Platform',PlatformID,FieldByName('TU_PLATFORM_FK').AsInteger);
  109. AssertEquals('Submitter',Submitter,FieldByName('TU_SUBMITTER').AsString);
  110. For St in TTestStatus do
  111. AssertEquals(StatusText[St],StatusCount[st],FieldByName(SQLField[ST]).AsInteger);
  112. AssertEquals('CompilerDate',CompilerDate,FieldByName('TU_COMPILERDATE').AsString);
  113. AssertEquals('CompilerFullVersion',CompilerFullVersion,FieldByName('TU_COMPILERFULLVERSION').AsString);
  114. AssertEquals('CompilerRevision',CompilerRevision,FieldByName('TU_COMPILERREVISION').AsString);
  115. AssertEquals('TestsRevision',TestsRevision,FieldByName('TU_TESTSREVISION').AsString);
  116. AssertEquals('RTLRevision',RTLRevision,FieldByName('TU_RTLREVISION').AsString);
  117. AssertEquals('PackagesRevision',PackagesRevision,FieldByName('TU_PACKAGESREVISION').AsString);
  118. end;
  119. end;
  120. function TTestBaseSQLCase.CreateResultData(out aData: TTestRunData; out aResult: TTestResultData; DateOffset: Integer): Int64;
  121. begin
  122. aData:=Default(TTestRunData);
  123. aData.PlatformID:=PreparePlatform(aData);
  124. aData.Date:=Date-DateOffset;
  125. aData.RunID:=SQL.AddRun(aData);
  126. aResult:=Default(TTestResultData);
  127. aResult.RunID:=aData.RunID;
  128. aResult.PlatformID:=aData.PlatformID;
  129. aResult.Date:=Date-DateOffset;
  130. CreateSource('x');
  131. if SQL.GetTestID('x.pp')=-1 then
  132. aResult.TestID:=SQL.AddTest('x.pp',False)
  133. else
  134. aResult.TestID:=SQL.GetTestID('x.pp');
  135. aResult.TestResult:=stSuccessCompilationFailed;
  136. aResult.Log:='xyz';
  137. With aData do
  138. begin
  139. Result:=SQL.AddTestResult(aResult);
  140. aResult.ID:=Result;
  141. end;
  142. end;
  143. { TTestSQLCase }
  144. procedure TTestSQLCase.TestHookUp;
  145. begin
  146. AssertEquals('Empty testos',0,TDBHelper.CountRecords('TESTOS'));
  147. AssertEquals('Empty TESTCPU',0,TDBHelper.CountRecords('TESTCPU'));
  148. AssertEquals('Empty TESTCATEGORY',0,TDBHelper.CountRecords('TESTCATEGORY'));
  149. AssertEquals('Empty TESTVERSION',0,TDBHelper.CountRecords('TESTVERSION'));
  150. AssertEquals('Empty TESTPLATFORM',0,TDBHelper.CountRecords('TESTPLATFORM'));
  151. AssertEquals('Empty TESTRUN',0,TDBHelper.CountRecords('TESTRUN'));
  152. AssertEquals('Empty TESTS',0,TDBHelper.CountRecords('TESTS'));
  153. AssertEquals('Empty TESTRESULTS',0,TDBHelper.CountRecords('TESTRESULTS'));
  154. AssertEquals('Empty TESTLASTRESULTS',0,TDBHelper.CountRecords('TESTLASTRESULTS'));
  155. AssertEquals('Empty TESTPREVIOUSRESULTS',0,TDBHelper.CountRecords('TESTPREVIOUSRESULTS'));
  156. end;
  157. procedure TTestSQLCase.TestAddCPU;
  158. var
  159. lID : Int64;
  160. begin
  161. lID:=SQL.AddCPU('x');
  162. AssertEquals('exists',1,TDBHelper.CountRecords('TESTCPU',Format('(TC_ID=%d) and (tc_name=''x'')',[lID])));
  163. end;
  164. procedure TTestSQLCase.TestAddOS;
  165. var
  166. lID : Int64;
  167. begin
  168. lID:=SQL.AddOS('x');
  169. AssertEquals('exists',1,TDBHelper.CountRecords('TESTOS',Format('(TO_ID=%d) and (to_name=''x'')',[lID])));
  170. end;
  171. procedure TTestSQLCase.TestAddVersion;
  172. var
  173. lID : Int64;
  174. begin
  175. lID:=SQL.AddVersion('x',date);
  176. AssertEquals('exists',1,TDBHelper.CountRecords('TESTVERSION',Format('(Tv_ID=%d) and (tv_version=''x'')',[lID])));
  177. end;
  178. procedure TTestSQLCase.TestAddCategory;
  179. var
  180. lID : Int64;
  181. begin
  182. lID:=SQL.AddCategory('x');
  183. AssertEquals('exists',1,TDBHelper.CountRecords('TESTCATEGORY',Format('(TA_ID=%d) and (ta_name=''x'')',[lID])));
  184. end;
  185. procedure TTestSQLCase.TestAddTest;
  186. var
  187. lID : Integer;
  188. begin
  189. CreateSource('x');
  190. lID:=SQL.AddTest('x.pp',False);
  191. AssertEquals('exists',1,TDBHelper.CountRecords('TESTS',Format('(T_ID=%d) and (t_name=''x.pp'')',[lID])));
  192. end;
  193. procedure TTestSQLCase.TestUpdateTest;
  194. var
  195. lInfo : TTestInfo;
  196. lID : Integer;
  197. lFilter : string;
  198. begin
  199. lID:=SQL.AddTest('x.pp',False);
  200. lInfo:=Default(TTestInfo);
  201. With lInfo do
  202. begin
  203. Name:='name'; // Will not be changed
  204. CPU:='cpu';
  205. OS:='os';
  206. Version:='version';
  207. AddDate:=Date-1; // Will not be changed
  208. Graph:=True;
  209. Interactive:=True;
  210. Result:=123;
  211. Fail:=True;
  212. ReCompile:=True;
  213. NoRun:=True;
  214. NeedLibrary:=True;
  215. KnownRunError:=456;
  216. Known:=True;
  217. Note:='note';
  218. Description:='description';
  219. Source:='source';
  220. Opts:='opts';
  221. DelOptions:='deloptions';
  222. SkipCPU:='skipcpu';
  223. SkipEmu:='skipemu';
  224. NeedTarget:='needtarget';
  225. SkipTarget:='skiptarget';
  226. MaxVersion:='maxversion';
  227. KnownRunNote:='knownrunnote';
  228. KnownCompileNote:='knowncompilenote';
  229. RecompileOpt:='recompileopt';
  230. KnownCompileError:=789;
  231. NeededAfter:=True;
  232. IsKnownRunError:=True;
  233. Timeout:=543;
  234. Category:='category';
  235. Files:='files';
  236. ConfigFileSrc:='configfilesrc';
  237. ConfigFileDst:='configfiledst';
  238. WpoParas:='wpoparas';
  239. WpoPasses:=321;
  240. DelFiles:='delfiles';
  241. ExpectMsgs:=[1,2,3];
  242. end;
  243. SQL.UpdateTest(lID,lInfo,'xyz');
  244. // Construct filter with the values we expect.
  245. lFilter := Format('(T_ID = %d) AND ',[lID])
  246. + '(T_Name = ''x.pp'') AND '
  247. + '(T_CPU = ''cpu'') AND '
  248. + '(T_OS = ''os'') AND '
  249. + '(T_Version = ''version'') AND '
  250. + '(T_AddDate = '''+TTestSQL.SQLDate(Date)+''') AND '
  251. + '(T_Graph = ''t'') AND '
  252. + '(T_Interactive = ''t'') AND '
  253. + '(T_Result = 123) AND '
  254. + '(T_Fail = ''t'') AND '
  255. + '(T_ReCompile = ''t'') AND '
  256. + '(T_NoRun = ''t'') AND '
  257. + '(T_NeedLibrary = ''t'') AND '
  258. + '(T_KnownRunError = 456) AND '
  259. + '(T_Known = ''t'') AND '
  260. + '(T_Note = ''note'') AND '
  261. + '(T_Description = ''description'') AND '
  262. + '(T_Source = ''source'') AND '
  263. + '(T_Opts = ''opts'') AND '
  264. + '(T_DELOPTS =''deloptions'') AND '
  265. + '(T_SKIPCPU = ''skipcpu'') AND '
  266. + '(T_NEEDTARGET = ''needtarget'') AND '
  267. + '(T_MAXVERSION = ''maxversion'') AND '
  268. + '(T_KNOWNRUNNOTE = ''knownrunnote'') AND '
  269. + '(T_KNOWNCOMPILENOTE = ''knowncompilenote'') AND '
  270. + '(T_RECOMPILEOPT = ''recompileopt'') AND '
  271. + '(T_KNOWNCOMPILEERROR = 789) AND '
  272. + '(T_NEEDEDAFTER = ''t'') AND '
  273. + '(T_ISKNOWNRUNERROR = ''t'') AND '
  274. + '(T_Timeout = 543) AND '
  275. + '(T_CATEGORY = ''category'') AND '
  276. + '(T_FILES = ''files'') AND '
  277. + '(T_CONFIGFILESRC = ''configfilesrc'') AND '
  278. + '(T_CONFIGFILEDST = ''configfiledst'') AND '
  279. + '(T_WPOPARAS = ''wpoparas'') AND '
  280. + '(T_WPOPASSES = 321) AND '
  281. + '(T_DELFILES = ''delfiles'') AND '
  282. + '(T_EXPECTMSGS = ''1,2,3'')' ;
  283. // We should have 1 record with this filter
  284. AssertEquals('Updated',1,TDBHelper.CountRecords('TESTS',lFilter));
  285. end;
  286. procedure TTestSQLCase.TestAddPlatform;
  287. const
  288. SQLFilter = '(TP_ID=%d) and (TP_OS_FK=%d) and (TP_CPU_FK=%d) '+
  289. 'and (TP_VERSION_FK=%d) and (TP_CONFIG=''%s'') and (TP_MACHINE=''%s'')';
  290. var
  291. lData : TTestRunData;
  292. lID : integer;
  293. Flt : String;
  294. begin
  295. lData:=Default(TTestRunData);
  296. lID:=PreparePlatform(lData);
  297. With lData do
  298. flt:=Format(SQLFilter,[lID,OSID,CPUID,VersionID,Config,Machine]);
  299. AssertEquals('Platform',1,TDBHelper.CountRecords('TESTPLATFORM',Flt));
  300. end;
  301. procedure TTestSQLCase.TestAddRun;
  302. var
  303. lData : TTestRunData;
  304. lID : Int64;
  305. Qry : TSQLQuery;
  306. begin
  307. lData:=Default(TTestRunData);
  308. lData.PlatformID:=PreparePlatform(lData);
  309. With lData do
  310. begin
  311. machine:='a';
  312. submitter:='b';
  313. description:='c';
  314. Date:=Sysutils.Date;
  315. CompilerDate:='ymd';
  316. CompilerFullVersion:='1.2';
  317. CompilerRevision:='1.3';
  318. TestsRevision:='1.4';
  319. RTLRevision:='1.5';
  320. PackagesRevision:='1.6';
  321. end;
  322. lID:=SQL.AddRun(lData);
  323. Qry:=TDBHelper.CreateQuery(Format('Select * from testrun where (tu_id=%d)',[lID]));
  324. try
  325. Qry.Open;
  326. AssertFalse('Have data',Qry.IsEmpty);
  327. AssertTestRunData(Qry,lData);
  328. finally
  329. Qry.Free;
  330. end;
  331. end;
  332. procedure TTestSQLCase.TestAddTestResult;
  333. var
  334. lData : TTestRunData;
  335. lResult : TTestResultData;
  336. lID : Int64;
  337. flt : String;
  338. OK,Skip : Boolean;
  339. begin
  340. lID:=CreateResultData(lData,lResult);
  341. OK:=TestOK[lResult.TestResult];
  342. Skip:=TestSkipped[lResult.TestResult];
  343. With lResult do
  344. flt:=Format(SQLTestResultFilter,[lID,RunID,TestID,Bools[OK],Bools[Skip],Ord(TestResult),Log]);
  345. AssertEquals('Platform',1,TDBHelper.CountRecords('TESTRESULTS',Flt));
  346. end;
  347. procedure TTestSQLCase.TestAddTestResultTwice;
  348. var
  349. lData : TTestRunData;
  350. lResult : TTestResultData;
  351. lID,lID2 : Int64;
  352. flt : String;
  353. OK,Skip : Boolean;
  354. begin
  355. CreateResultData(lData,lResult);
  356. OK:=TestOK[lResult.TestResult];
  357. Skip:=TestSkipped[lResult.TestResult];
  358. lID:=SQL.AddTestResult(lResult);
  359. // Change result
  360. lResult.TestResult:=stFailedToCompile;
  361. lResult.Log:='xyza';
  362. OK:=TestOK[lResult.TestResult];
  363. Skip:=TestSkipped[lResult.TestResult];
  364. // Insert again...
  365. lID2:=SQL.AddTestResult(lResult);
  366. AssertEquals('Same ID',lID,lID2);
  367. flt:=Format(SQLTestResultFilter,[lID,lResult.RunID,lResult.TestID,Bools[OK],Bools[Skip],Ord(lResult.TestResult),lResult.Log]);
  368. AssertEquals('Result',1,TDBHelper.CountRecords('TESTRESULTS',Flt));
  369. end;
  370. procedure TTestSQLCase.TestUpdateTestResult;
  371. var
  372. lData : TTestRunData;
  373. lResult : TTestResultData;
  374. lID2,lID : Int64;
  375. flt : String;
  376. OK,Skip : Boolean;
  377. begin
  378. lID:=CreateResultData(lData,lResult);
  379. // Change result
  380. lResult.ID:=lID;
  381. lResult.TestResult:=stFailedToCompile;
  382. lResult.Log:='xyza';
  383. OK:=TestOK[lResult.TestResult];
  384. Skip:=TestSkipped[lResult.TestResult];
  385. // Update
  386. lID2:=SQL.UpdateTestResult(lResult);
  387. AssertEquals('Same ID',lID,lID2);
  388. flt:=Format(SQLTestResultFilter,[lID,lResult.RunID,lResult.TestID,Bools[OK],Bools[Skip],Ord(lResult.TestResult),lResult.Log]);
  389. AssertEquals('Result',1,TDBHelper.CountRecords('TESTRESULTS',Flt));
  390. end;
  391. procedure TTestSQLCase.TestAddLastResult;
  392. var
  393. lData : TTestRunData;
  394. lResult : TTestResultData;
  395. lID : Int64;
  396. flt : String;
  397. begin
  398. lID:=CreateResultData(lData,lResult);
  399. AssertTrue('Add',SQL.AddLastResult(lResult.TestID,lData.PlatformID,lID));
  400. flt:=Format('(TL_TEST_FK=%d) and (TL_PLATFORM_FK=%d) and (TL_TESTRESULTS_FK=%d)',[lResult.TestID,lData.PlatformID,lID]);
  401. AssertEquals('Result',1,TDBHelper.CountRecords('TESTLASTRESULTS',Flt));
  402. end;
  403. procedure TTestSQLCase.TestAddLastResultTwice;
  404. var
  405. lData : TTestRunData;
  406. lResult : TTestResultData;
  407. lID,lID2 : Integer;
  408. flt : string;
  409. begin
  410. lID:=CreateResultData(lData,lResult,1);
  411. AssertTrue('Add',SQL.AddLastResult(lResult.TestID,lData.PlatformID,lID));
  412. lID2:=CreateResultData(lData,lResult,0);
  413. AssertTrue('Add',SQL.AddLastResult(lResult.TestID,lData.PlatformID,lID2));
  414. flt:=Format('(TL_TEST_FK=%d) and (TL_PLATFORM_FK=%d) and (TL_TESTRESULTS_FK=%d)',[lResult.TestID,lData.PlatformID,lID2]);
  415. AssertEquals('Result',1,TDBHelper.CountRecords('TESTLASTRESULTS',Flt));
  416. end;
  417. procedure TTestSQLCase.TestGetLastTestResult;
  418. var
  419. lData : TTestRunData;
  420. lResult2,lResult : TTestResultData;
  421. lID : Integer;
  422. begin
  423. lID:=CreateResultData(lData,lResult,1);
  424. AssertTrue('Add',SQL.AddLastResult(lResult.TestID,lData.PlatformID,lID));
  425. lResult2:=SQL.GetLastTestResult(lResult.TestID,lData.PlatformID);
  426. AssertEquals('ID',lID,lResult2.ID);
  427. AssertEquals('Run',lResult.RunID,lResult2.RunID);
  428. AssertTrue('Status',lResult.TestResult=lResult2.TestResult);
  429. AssertEquals('Log',lResult.Log,lResult2.Log);
  430. AssertEquals('Date',Date-1,lResult2.Date);
  431. end;
  432. procedure TTestSQLCase.TestAddPreviousResult;
  433. var
  434. lData : TTestRunData;
  435. lResult : TTestResultData;
  436. lID : Int64;
  437. flt : String;
  438. begin
  439. lID:=CreateResultData(lData,lResult);
  440. AssertTrue('Add',SQL.AddPreviousResult(lResult.TestID,lData.PlatformID,lID));
  441. flt:=Format('(TPR_TEST_FK=%d) and (TPR_PLATFORM_FK=%d) and (TPR_TESTRESULTS_FK=%d)',[lResult.TestID,lData.PlatformID,lID]);
  442. AssertEquals('Result',1,TDBHelper.CountRecords('TESTPREVIOUSRESULTS',Flt));
  443. end;
  444. procedure TTestSQLCase.TestAddPreviousResultTwice;
  445. var
  446. lData : TTestRunData;
  447. lResult : TTestResultData;
  448. lID,lID2 : Integer;
  449. flt : string;
  450. begin
  451. lID:=CreateResultData(lData,lResult,1);
  452. AssertTrue('Add',SQL.AddPreviousResult(lResult.TestID,lData.PlatformID,lID));
  453. lID2:=CreateResultData(lData,lResult,0);
  454. AssertTrue('Add',SQL.AddPreviousResult(lResult.TestID,lData.PlatformID,lID2));
  455. flt:=Format('(TPR_TEST_FK=%d) and (TPR_PLATFORM_FK=%d) and (TPR_TESTRESULTS_FK=%d)',[lResult.TestID,lData.PlatformID,lID2]);
  456. AssertEquals('Result',1,TDBHelper.CountRecords('TESTPREVIOUSRESULTS',Flt));
  457. end;
  458. procedure TTestSQLCase.TestUpdateRun;
  459. var
  460. lData : TTestRunData;
  461. St : TTestStatus;
  462. Qry : TSQLQuery;
  463. begin
  464. lData:=Default(TTestRunData);
  465. lData.PlatformID:=PreparePlatform(lData);
  466. lData.RunID:=SQL.AddRun(lData);
  467. for St in TTestStatus do
  468. lData.StatusCount[st]:=(Ord(st)+1)*100;
  469. AssertTrue('Update',SQL.UpdateTestRun(lData));
  470. Qry:=TDBHelper.CreateQuery(Format('Select * from testrun where (tu_id=%d)',[lData.RunID]));
  471. try
  472. Qry.Open;
  473. AssertFalse('Have data',Qry.IsEmpty);
  474. AssertTestRunData(Qry,lData);
  475. finally
  476. Qry.Free;
  477. end;
  478. end;
  479. procedure TTestSQLCase.TestGetCPUID;
  480. begin
  481. TDBHelper.ExecSQL('INSERT INTO TESTCPU VALUES (1,''x'')');
  482. TDBHelper.ExecSQL('INSERT INTO TESTCPU VALUES (2,''y'')');
  483. AssertEquals('Count',2,TDBHelper.CountRecords('TESTCPU'));
  484. AssertEquals('Get x',1,SQL.GetCPUID('x'));
  485. AssertEquals('Get y',2,SQL.GetCPUID('y'));
  486. AssertEquals('Get z',-1,SQL.GetCPUID('z'));
  487. end;
  488. procedure TTestSQLCase.TestGetOSID;
  489. begin
  490. TDBHelper.ExecSQL('INSERT INTO TESTOS VALUES (1,''x'')');
  491. TDBHelper.ExecSQL('INSERT INTO TESTOS VALUES (2,''y'')');
  492. AssertEquals('Count',2,TDBHelper.CountRecords('TESTOS'));
  493. AssertEquals('Get x',1,SQL.GetOSID('x'));
  494. AssertEquals('Get y',2,SQL.GetOSID('y'));
  495. AssertEquals('Get z',-1,SQL.GetOSID('z'));
  496. end;
  497. procedure TTestSQLCase.TestGetCategoryID;
  498. begin
  499. TDBHelper.ExecSQL('INSERT INTO TESTCategory VALUES (1,''x'')');
  500. TDBHelper.ExecSQL('INSERT INTO TESTCategory VALUES (2,''y'')');
  501. AssertEquals('Count',2,TDBHelper.CountRecords('TESTCategory'));
  502. AssertEquals('Get x',1,SQL.GetCategoryID('x'));
  503. AssertEquals('Get y',2,SQL.GetCategoryID('y'));
  504. AssertEquals('Get z',-1,SQL.GetCategoryID('z'));
  505. end;
  506. procedure TTestSQLCase.TestGetVersionID;
  507. begin
  508. TDBHelper.ExecSQL('INSERT INTO TESTVERSION (TV_ID,TV_VERSION) VALUES (1,''x'')');
  509. TDBHelper.ExecSQL('INSERT INTO TESTVERSION (TV_ID,TV_VERSION) VALUES (2,''y'')');
  510. AssertEquals('Count',2,TDBHelper.CountRecords('TESTVERSION'));
  511. AssertEquals('Get x',1,SQL.GetVersionID('x'));
  512. AssertEquals('Get y',2,SQL.GetVersionID('y'));
  513. AssertEquals('Get z',-1,SQL.GetVersionID('z'));
  514. end;
  515. procedure TTestSQLCase.TestGetTestID;
  516. begin
  517. TDBHelper.ExecSQL('INSERT INTO TESTS (T_ID,T_NAME,T_ADDDATE) VALUES (1,''x.pp'',CURRENT_TIMESTAMP)');
  518. TDBHelper.ExecSQL('INSERT INTO TESTS (T_ID,T_NAME,T_ADDDATE) VALUES (2,''y.pp'',CURRENT_TIMESTAMP)');
  519. AssertEquals('Count',2,TDBHelper.CountRecords('TESTS'));
  520. AssertEquals('Get x',1,SQL.GetTestID('x.pp'));
  521. AssertEquals('Get y',2,SQL.GetTestID('y.pp'));
  522. AssertEquals('Get z',-1,SQL.GetCategoryID('z.pp'));
  523. end;
  524. procedure TTestSQLCase.TestGetRunID;
  525. var
  526. lData : TTestRunData;
  527. lPlatformID : integer;
  528. lRunID : Int64;
  529. begin
  530. lData:=Default(TTestRunData);
  531. lPlatformID:=PreparePlatform(lData);
  532. lData.PlatformID:=lPlatFormID;
  533. lData.Date:=Date;
  534. lRunID:=SQL.AddRun(lData);
  535. AssertEquals('Get run id',lRunID,SQL.GetRunID(lData));
  536. end;
  537. function TTestSQLCase.GetSQL: TTestSQL;
  538. begin
  539. Result:=TDBHelper.SQL;
  540. end;
  541. procedure TTestSQLCase.SetUp;
  542. begin
  543. TDBHelper.ClearAllTables;
  544. SQL.TestSrcDir:='./';
  545. end;
  546. procedure TTestSQLCase.TearDown;
  547. begin
  548. TDBHelper.MaybeRollback;
  549. DeleteSource('x');
  550. end;
  551. procedure TTestSQLCase.TestHistoryNoHistory;
  552. Var
  553. lData : TTestRunData;
  554. lResultID : Int64;
  555. begin
  556. AssertEquals('count TESTRUNHISTORY before',0,TDBHelper.CountRecords('TESTRUNHISTORY'));
  557. lData:=Default(TTestRunData);
  558. lData.PlatformID:=PreparePlatform(lData);
  559. lData.Date:=Date;
  560. lResultID:=SQL.AddRun(lData);
  561. AssertEquals('count TESTRUN', 1, TDBHelper.CountRecords('TESTRUN',Format('(TU_ID=%d)',[lResultID])));
  562. AssertEquals('count TESTRUNHISTORY after',0,TDBHelper.CountRecords('TESTRUNHISTORY'));
  563. end;
  564. procedure TTestSQLCase.TestHistoryWithHistory;
  565. Var
  566. lData : TTestRunData;
  567. lResult1ID,lResult2ID : Int64;
  568. lFilter : String;
  569. begin
  570. AssertEquals('count TESTRUNHISTORY before',0,TDBHelper.CountRecords('TESTRUNHISTORY'));
  571. lData:=Default(TTestRunData);
  572. lData.PlatformID:=PreparePlatform(lData);
  573. lData.Date:=Date-1;
  574. lResult1ID:=SQL.AddRun(lData);
  575. AssertEquals('count TESTRUN', 1, TDBHelper.CountRecords('TESTRUN',Format('(TU_ID=%d)',[lResult1ID])));
  576. AssertEquals('count TESTRUNHISTORY after',0,TDBHelper.CountRecords('TESTRUNHISTORY'));
  577. lData.Date:=Date;
  578. lResult2ID:=SQL.AddRun(lData);
  579. AssertEquals('count TESTRUN', 1, TDBHelper.CountRecords('TESTRUN',Format('(TU_ID=%d)',[lResult2ID])));
  580. lFilter:=Format('(TH_ID_FK=%d) and (TH_PREVIOUS_FK=%d)',[lResult2ID,lResult1ID]);
  581. AssertEquals('count TESTRUNHISTORY after',1,TDBHelper.CountRecords('TESTRUNHISTORY',lFilter));
  582. end;
  583. procedure TTestSQLCase.TestGetPreviousTestRun;
  584. begin
  585. TDBHelper.ExecSQL('INSERT INTO TESTRUNHISTORY VALUES (2,1)');
  586. TDBHelper.ExecSQL('INSERT INTO TESTRUNHISTORY VALUES (3,2)');
  587. TDBHelper.ExecSQL('INSERT INTO TESTRUNHISTORY VALUES (4,3)');
  588. AssertEquals('First',-1,SQL.GetPreviousRunID(1));
  589. AssertEquals('Second',1,SQL.GetPreviousRunID(2));
  590. AssertEquals('third',2,SQL.GetPreviousRunID(3));
  591. AssertEquals('last',3,SQL.GetPreviousRunID(4));
  592. end;
  593. procedure TTestSQLCase.TestGetNextTestRun;
  594. begin
  595. TDBHelper.ExecSQL('INSERT INTO TESTRUNHISTORY VALUES (2,1)');
  596. TDBHelper.ExecSQL('INSERT INTO TESTRUNHISTORY VALUES (3,2)');
  597. TDBHelper.ExecSQL('INSERT INTO TESTRUNHISTORY VALUES (4,3)');
  598. AssertEquals('First',2,SQL.GetNextRunID(1));
  599. AssertEquals('Second',3,SQL.GetNextRunID(2));
  600. AssertEquals('third',4,SQL.GetNextRunID(3));
  601. AssertEquals('last',-1,SQL.GetNextRunID(4));
  602. end;
  603. initialization
  604. RegisterTestDecorator(TDBDecorator,TTestSQLCase);
  605. end.