test: store test runs in database

git-svn-id: trunk@16072 -
This commit is contained in:
vincents 2008-08-15 14:56:55 +00:00
parent 985be0ddf3
commit 691dd09934
3 changed files with 105 additions and 153 deletions

View File

@ -21,9 +21,10 @@ Function GetTestID(Name : string) : Integer;
Function GetOSID(Name : String) : Integer; Function GetOSID(Name : String) : Integer;
Function GetCPUID(Name : String) : Integer; Function GetCPUID(Name : String) : Integer;
Function GetCategoryID(Name : String) : Integer; Function GetCategoryID(Name : String) : Integer;
Function GetVersionID(Name : String) : Integer; Function GetFPCVersionID(Name : String) : Integer;
Function GetRunID(OSID, CPUID, VERSIONID : Integer; Date : TDateTime) : Integer; Function GetLAZVersionID(Name : String) : Integer;
Function AddRun(OSID, CPUID, VERSIONID, CATEGORYID : Integer; Date : TDateTime) : Integer; Function GetRunID(OSID, CPUID, FPCVERSIONID, LazVersionID : Integer; Date : TDateTime) : Integer;
Function AddRun(OSID, CPUID, FPCVERSIONID, LazVersionID : Integer; Date : TDateTime) : Integer;
Function AddTest(Name : String; AddSource : Boolean) : Integer; Function AddTest(Name : String; AddSource : Boolean) : Integer;
Function UpdateTest(ID : Integer; Info : TConfig; Source : String) : Boolean; Function UpdateTest(ID : Integer; Info : TConfig; Source : String) : Boolean;
Function AddTestResult(TestID,RunID,TestRes : Integer; Function AddTestResult(TestID,RunID,TestRes : Integer;
@ -191,15 +192,6 @@ begin
Result:=IDQuery(Format(SFromName,[Name])); Result:=IDQuery(Format(SFromName,[Name]));
end; end;
Function GetVersionID(Name : String) : Integer;
Const
SFromName = 'SELECT TV_ID FROM TESTVERSION WHERE (TV_VERSION="%s")';
begin
Result:=IDQuery(Format(SFromName,[Name]));
end;
Function GetCPUID(Name : String) : Integer; Function GetCPUID(Name : String) : Integer;
Const Const
@ -218,25 +210,44 @@ begin
Result:=IDQuery(Format(SFromName,[Name])); Result:=IDQuery(Format(SFromName,[Name]));
end; end;
Function GetRunID(OSID, CPUID, VERSIONID : Integer; Date : TDateTime) : Integer; function GetFPCVersionID(Name: String): Integer;
Const
SFromName = 'SELECT TFV_ID FROM TESTFPCVERSION WHERE (TFV_VERSION="%s")';
begin
Result:=IDQuery(Format(SFromName,[Name]));
end;
function GetLAZVersionID(Name: String): Integer;
Const
SFromName = 'SELECT TLV_ID FROM TESTLAZVERSION WHERE (TLV_VERSION="%s")';
begin
Result:=IDQuery(Format(SFromName,[Name]));
end;
function GetRunID(OSID, CPUID, FPCVERSIONID, LazVersionID: Integer;
Date: TDateTime): Integer;
Const Const
SFromIDS = 'SELECT TU_ID FROM TESTRUN WHERE '+ SFromIDS = 'SELECT TU_ID FROM TESTRUN WHERE '+
' (TU_OS_FK=%d) '+ ' (TU_OS_FK=%d) '+
' AND (TU_CPU_FK=%d) '+ ' AND (TU_CPU_FK=%d) '+
' AND (TU_VERSION_FK=%d) '+ ' AND (TU_FPC_VERSION_FK=%d) '+
' AND (TU_LAZ_VERSION_FK=%d) '+
' AND (TU_DATE="%s")'; ' AND (TU_DATE="%s")';
begin begin
Result:=IDQuery(Format(SFromIDS,[OSID,CPUID,VERSIONID,SQLDate(Date)])); Result:=IDQuery(Format(SFromIDS,[OSID,CPUID,FPCVERSIONID,LazVersionID,SQLDate(Date)]));
end; end;
Function AddRun(OSID, CPUID, VERSIONID, CATEGORYID : Integer; Date : TDateTime) : Integer; Function AddRun(OSID, CPUID, FPCVERSIONID, LazVersionID : Integer; Date : TDateTime) : Integer;
Const Const
SInsertRun = 'INSERT INTO TESTRUN '+ SInsertRun = 'INSERT INTO TESTRUN '+
'(TU_OS_FK,TU_CPU_FK,TU_VERSION_FK,TU_CATEGORY_FK,TU_DATE)'+ '(TU_OS_FK,TU_CPU_FK,TU_FPC_VERSION_FK,TU_LAZ_VERSION_FK,TU_DATE)'+
' VALUES '+ ' VALUES '+
'(%d,%d,%d,%d,"%s")'; '(%d,%d,%d,%d,"%s")';
@ -244,7 +255,7 @@ Var
Res : TQueryResult; Res : TQueryResult;
begin begin
If RunQuery(Format(SInsertRun,[OSID,CPUID,VERSIONID,CATEGORYID,SQLDate(Date)]),Res) then If RunQuery(Format(SInsertRun,[OSID,CPUID,FPCVERSIONID,LazVersionID,SQLDate(Date)]),Res) then
Result:=mysql_insert_id(@connection) Result:=mysql_insert_id(@connection)
else else
Result:=-1; Result:=-1;

View File

@ -4,14 +4,13 @@
<PathDelim Value="\"/> <PathDelim Value="\"/>
<Version Value="6"/> <Version Value="6"/>
<General> <General>
<SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/> <MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/> <TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="2"/>
</General> </General>
<VersionInfo> <VersionInfo>
<ProjectVersion Value=""/> <ProjectVersion Value=""/>
<Language Value=""/>
<CharSet Value=""/>
</VersionInfo> </VersionInfo>
<PublishOptions> <PublishOptions>
<Version Value="2"/> <Version Value="2"/>
@ -25,46 +24,13 @@
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local> </local>
</RunParams> </RunParams>
<Units Count="3"> <Units Count="1">
<Unit0> <Unit0>
<Filename Value="importtestresults.pp"/> <Filename Value="importtestresults.pp"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="importtestresuls"/> <UnitName Value="importtestresults"/>
<CursorPos X="25" Y="20"/>
<TopLine Value="7"/>
<EditorIndex Value="0"/>
<UsageCount Value="20"/>
<Loaded Value="True"/>
</Unit0> </Unit0>
<Unit1>
<Filename Value="teststr.pp"/>
<UnitName Value="teststr"/>
<CursorPos X="45" Y="37"/>
<TopLine Value="8"/>
<EditorIndex Value="1"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit1>
<Unit2>
<Filename Value="testu.pp"/>
<UnitName Value="testu"/>
<CursorPos X="1" Y="37"/>
<TopLine Value="37"/>
<EditorIndex Value="2"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit2>
</Units> </Units>
<JumpHistory Count="2" HistoryIndex="1">
<Position1>
<Filename Value="teststr.pp"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position1>
<Position2>
<Filename Value="testu.pp"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position2>
</JumpHistory>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
<Version Value="5"/> <Version Value="5"/>
@ -73,65 +39,9 @@
<Generate Value="Faster"/> <Generate Value="Faster"/>
</CodeGeneration> </CodeGeneration>
<Other> <Other>
<CustomOptions Value="
"/>
<CompilerPath Value="$(CompPath)"/> <CompilerPath Value="$(CompPath)"/>
</Other> </Other>
</CompilerOptions> </CompilerOptions>
<Debugging>
<BreakPoints Count="11">
<Item1>
<Source Value="..\..\ide\compileroptions.pp"/>
<InitialEnabled Value="False"/>
<Line Value="1695"/>
</Item1>
<Item2>
<Source Value="..\..\ide\ideprocs.pp"/>
<Line Value="1396"/>
</Item2>
<Item3>
<Source Value="..\..\ide\compileroptionsdlg.pp"/>
<Line Value="1656"/>
</Item3>
<Item4>
<Source Value="..\..\lcl\include\fileutil.inc"/>
<InitialEnabled Value="False"/>
<Line Value="210"/>
</Item4>
<Item5>
<Source Value="..\..\ide\condef.pas"/>
<Line Value="148"/>
</Item5>
<Item6>
<Source Value="..\..\lcl\include\treeview.inc"/>
<Line Value="3949"/>
</Item6>
<Item7>
<Source Value="..\..\components\synedit\synedit.pp"/>
<Line Value="6322"/>
</Item7>
<Item8>
<Source Value="..\..\components\synedit\synedit.pp"/>
<Line Value="2189"/>
</Item8>
<Item9>
<Source Value="..\..\ide\editoroptions.pp"/>
<Line Value="3621"/>
</Item9>
<Item10>
<Source Value="..\..\ide\main.pp"/>
<Line Value="3257"/>
</Item10>
<Item11>
<Source Value="..\..\ide\main.pp"/>
<Line Value="3256"/>
</Item11>
</BreakPoints>
<Watches Count="2">
<Item1>
<Expression Value="MainUnitInfo.FSource.FSource"/>
</Item1>
<Item2>
<Expression Value="FOnCompare"/>
</Item2>
</Watches>
</Debugging>
</CONFIG> </CONFIG>

View File

@ -20,7 +20,8 @@
program importtestresults; program importtestresults;
uses uses
sysutils,teststr,testu,tresults,dbtests; sysutils,teststr,testu,tresults,dbtests,
dom, XMLRead;
Var Var
@ -68,8 +69,8 @@ TConfigOpt = (
coLogFile, coLogFile,
coOS, coOS,
coCPU, coCPU,
coCategory, coWidgetset,
coVersion, coFPCVersion,
coDate, coDate,
coSubmitter, coSubmitter,
coMachine, coMachine,
@ -90,8 +91,7 @@ ConfigStrings : Array [TConfigOpt] of string = (
'os', 'os',
'cpu', 'cpu',
'widgetset', 'widgetset',
'category', 'fpcversion',
'version',
'date', 'date',
'submitter', 'submitter',
'machine', 'machine',
@ -102,13 +102,13 @@ ConfigStrings : Array [TConfigOpt] of string = (
); );
ConfigOpts : Array[TConfigOpt] of char ConfigOpts : Array[TConfigOpt] of char
= ('d','h','u','p','l','o','c','w','a','v','t','s','m','C','S','r','V'); = ('d','h','u','p','l','o','c','w', 'v','t','s','m','C','S','r','V');
Var Var
TestOS, TestOS,
TestCPU, TestCPU,
TestVersion, TestFPCVersion,
TestCategory, TestLazVersion,
DatabaseName, DatabaseName,
HostName, HostName,
UserName, UserName,
@ -131,22 +131,21 @@ begin
coLogFile : ResultsFileName:=Value; coLogFile : ResultsFileName:=Value;
coOS : TestOS:=Value; coOS : TestOS:=Value;
coCPU : TestCPU:=Value; coCPU : TestCPU:=Value;
coCategory : TestCategory:=Value; coFPCVersion : TestFPCVersion:=Value;
coVersion : TestVersion:=Value;
coDate : coDate :
begin begin
{ Formated like YYYYMMDDhhmm } { Formated like YYYYMMDDhhmm }
if Length(value)=12 then if Length(value)=12 then
begin begin
year:=StrToInt(Copy(value,1,4)); year:=StrToInt(Copy(value,1,4));
month:=StrToInt(Copy(value,5,2)); month:=StrToInt(Copy(value,5,2));
day:=StrToInt(Copy(Value,7,2)); day:=StrToInt(Copy(Value,7,2));
hour:=StrToInt(Copy(Value,9,2)); hour:=StrToInt(Copy(Value,9,2));
min:=StrToInt(Copy(Value,11,2)); min:=StrToInt(Copy(Value,11,2));
TestDate:=EncodeDate(year,month,day)+EncodeTime(hour,min,0,0); TestDate:=EncodeDate(year,month,day)+EncodeTime(hour,min,0,0);
end end
else else
Verbose(V_Error,'Error in date format, use YYYYMMDDhhmm'); Verbose(V_Error,'Error in date format, use YYYYMMDDhhmm');
end; end;
coSubmitter : Submitter:=Value; coSubmitter : Submitter:=Value;
coMachine : Machine:=Value; coMachine : Machine:=Value;
@ -273,36 +272,58 @@ begin
end; end;
Var Var
Doc: TXMLDocument;
TestCPUID : Integer; TestCPUID : Integer;
TestOSID : Integer; TestOSID : Integer;
TestVersionID : Integer; TestFPCVersionID : Integer;
TestCategoryID : Integer; TestLazVersionID : Integer;
TestRunID : Integer; TestRunID : Integer;
Procedure GetIDs; Procedure GetIDs;
var
EnvNode: TDOMElement;
function GetEnvValue(const Name: string): string;
var
Node: TDomNode;
begin
Node := EnvNode.FindNode(Name);
if not assigned(Node) then
Verbose(V_Error,'No environment element for '+Name);
Result := Node.TextContent;
Verbose(V_Debug,format('Environment: retrieved %s=%s', [Name, Result]));
end;
begin begin
EnvNode := Doc.FirstChild.FindNode('Environment') as TDomElement;
if not Assigned(EnvNode) then
Verbose(V_Error,'No environment element');
TestCPU := GetEnvValue('CPU');
TestCPUID := GetCPUId(TestCPU); TestCPUID := GetCPUId(TestCPU);
If TestCPUID=-1 then If TestCPUID=-1 then
Verbose(V_Error,'NO ID for CPU "'+TestCPU+'" found.'); Verbose(V_Error,'NO ID for CPU "'+TestCPU+'" found.');
TestOS := GetEnvValue('OS');
TestOSID := GetOSID(TestOS); TestOSID := GetOSID(TestOS);
If TestOSID=-1 then If TestOSID=-1 then
Verbose(V_Error,'NO ID for OS "'+TestOS+'" found.'); Verbose(V_Error,'NO ID for OS "'+TestOS+'" found.');
TestCategoryID := GetCategoryID(TestCategory);
If TestCategoryID=-1 then TestFPCVersion := GetEnvValue('FPCVersion');
begin TestFPCVersionID := GetFPCVersionID(TestFPCVersion);
// Verbose(V_Error,'NO ID for Category "'+TestCategory+'" found.'); If TestFPCVersionID=-1 then
TestCategoryID:=1; Verbose(V_Error,'NO ID for fpc version "'+TestFPCVersion+'" found.');
end;
TestVersionID := GetVersionID(TestVersion); TestLazVersion := GetEnvValue('LazVersion');
If TestVersionID=-1 then TestLazVersionID := GetLazVersionID(TestLazVersion);
Verbose(V_Error,'NO ID for version "'+TestVersion+'" found.'); If TestLazVersionID=-1 then
Verbose(V_Error,'NO ID for fpc version "'+TestLazVersion+'" found.');
If (Round(TestDate)=0) then If (Round(TestDate)=0) then
Testdate:=Now; Testdate:=Now;
TestRunID:=GetRunID(TestOSID,TestCPUID,TestVersionID,TestDate); TestRunID:=GetRunID(TestOSID,TestCPUID,TestFPCVersionID,TestLazVersionID, TestDate);
If (TestRunID=-1) then If (TestRunID=-1) then
begin begin
TestRunID:=AddRun(TestOSID,TestCPUID,TestVersionID,TestCategoryID,TestDate); TestRunID:=AddRun(TestOSID,TestCPUID,TestFPCVersionID,TestLazVersionID,TestDate);
If TestRUnID=-1 then If TestRUnID=-1 then
Verbose(V_Error,'Could not insert new testrun record!'); Verbose(V_Error,'Could not insert new testrun record!');
end end
@ -376,8 +397,17 @@ begin
close(logfile); close(logfile);
end; end;
procedure ProcessResultsFile; procedure ProcessResultsFile(FN: String);
begin begin
Verbose(V_Debug,'Start ProcessResultsFile');
if not FileExists(FN) then
Verbose(V_Error,'Results file "'+ResultsFileName+'" does not exist.');
ReadXMLFile(Doc, FN);
GetIDs;
Doc.Free;
Verbose(V_Debug,'End ProcessResultsFile');
end; end;
procedure UpdateTestRun; procedure UpdateTestRun;
@ -389,21 +419,22 @@ procedure UpdateTestRun;
begin begin
qry:='UPDATE TESTRUN SET '; qry:='UPDATE TESTRUN SET ';
for i:=low(TTestStatus) to high(TTestStatus) do //for i:=low(TTestStatus) to high(TTestStatus) do
qry:=qry+format('%s=%d, ',[SQLField[i],StatusCount[i]]); //qry:=qry+format('%s=%d, ',[SQLField[i],StatusCount[i]]);
qry:=qry+format('TU_SUBMITTER="%s", TU_MACHINE="%s", TU_COMMENT="%s", TU_DATE="%s"',[Submitter,Machine,Comment,SqlDate(TestDate)]); qry:=qry+format('TU_SUBMITTER="%s", TU_MACHINE="%s", TU_COMMENT="%s", TU_DATE="%s"',
[Submitter,Machine,Comment,SqlDate(TestDate)]);
qry:=qry+' WHERE TU_ID='+format('%d',[TestRunID]); qry:=qry+' WHERE TU_ID='+format('%d',[TestRunID]);
RunQuery(Qry,res) RunQuery(Qry,res)
end; end;
begin begin
DoVerbose := true;
ProcessConfigFile('dbdigest.cfg'); ProcessConfigFile('dbdigest.cfg');
ProcessCommandLine; ProcessCommandLine;
If ResultsFileName<>'' then If ResultsFileName<>'' then
begin begin
ConnectToDatabase(DatabaseName,HostName,UserName,Password); ConnectToDatabase(DatabaseName,HostName,UserName,Password);
GetIDs;
ProcessResultsFile(ResultsFileName); ProcessResultsFile(ResultsFileName);
UpdateTestRun; UpdateTestRun;
end end