Thread: [Lxr-commits] CVS: lxr-tools/tests MysqlTest.pm, NONE, 1.1 initdb-mysql, NONE, 1.1 AllTests.pm, 1.1
Brought to you by:
ajlittoz
From: Malcolm B. <mb...@us...> - 2009-05-06 22:33:29
|
Update of /cvsroot/lxr/lxr-tools/tests In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv28549 Modified Files: AllTests.pm README lxr.conf Added Files: MysqlTest.pm initdb-mysql Log Message: Add tests for Mysql.pm --- NEW FILE: MysqlTest.pm --- # Test cases for the MySQL backend # Uses the lxr.conf file in the tests directory # Assumes the use of lxr_tests as the test database package MysqlTest; use strict; use Test::Unit; use LXR::Config; use LXR::Index::Mysql; use DBI; use base qw(Test::Unit::TestCase); use vars qw($config); sub new { my $self = shift()->SUPER::new(@_); return $self; } # define tests # Test fileid sub test_fileid { my $self = shift; my $mysql = $self->{'mysql'}; my $dbh = $self->{'dbh'}; my ($id, $id2); # Test generation and matching $id = $mysql->fileid("/lxr/tests/testpath", 1); $self->assert_not_null($id, "Fileid null"); $id2 = $mysql->fileid("/lxr/tests/testpath", 1); $self->assert_equals($id, $id2, "Fileid doesn't match"); $id2 = $mysql->fileid("/lxr/tests/testpath", 2); $self->assert_not_equals($id, $id2, "Match even though revisions different"); $id2 = $mysql->fileid("/lxr/tests/testpath/two", 1); $self->assert_not_equals($id, $id2); # Look in the database for the files my $data; $data = $dbh->selectrow_array("SELECT filename FROM lxr_files WHERE fileid = $id"); $self->assert_equals("/lxr/tests/testpath", $data); $data = $dbh->selectrow_array("SELECT revision FROM lxr_files WHERE fileid = $id"); $self->assert_equals(1, $data); $data = $dbh->selectrow_array("SELECT COUNT(filename) FROM lxr_files"); $self->assert_equals(3, $data, "Wrong number of rows in DB"); } # Tests for the fileindexed getter/setters sub test_fileindexed { my $self = shift; my $mysql = $self->{'mysql'}; my $dbh = $self->{'dbh'}; my $status; # Indexed $status = $mysql->fileindexed(1789); $self->assert_equals(0, $status); $mysql->setfileindexed(1789); $status = $mysql->fileindexed(1789); $self->assert($status, "Indexed should be true"); $mysql->setfileindexed(17890); $status = $mysql->fileindexed(1789); $self->assert($status); $mysql->setfilereferenced(17890); $status = $mysql->fileindexed(17890); $self->assert($status, "Expected indexed to be true"); } sub test_filereferenced { my $self = shift; my $mysql = $self->{'mysql'}; my $dbh = $self->{'dbh'}; my $status; # referenced $status = $mysql->filereferenced(17890); $self->assert(!$status, "Referenced should be false (fixture interference?)"); $status = $mysql->filereferenced(1789); $self->assert(!$status, "Ref should be false"); $mysql->setfilereferenced(1789); $status = $mysql->filereferenced(1789); $self->assert($status); $status = $mysql->fileindexed(1789); $self->assert($status, "Setting referenced should set indexed"); } sub test_creation { my $self = shift; $self->assert($config->dbname =~ /^dbi:mysql:dbname/); $self->assert(defined($self->{'mysql'}), "Failed to create object"); $self->assert($self->{'mysql'}->isa("LXR::Index::Mysql"), "Not a Mysql object"); # Check we have connected to the database $self->assert_not_null($self->{'dbh'}, $DBI::errstr); } # Test symbol insertion and retrieval sub test_symbol { my $self = shift; my ($stat, $symname, $fid1, $fid2, $line, $langid, $type, $relsym); my $dbh = $self->{'dbh'}; my $mysql = $self->{'mysql'}; # Set up some dummy files $fid1 = $mysql->fileid("/lxr/tests/testfile1", "1.0.1"); $fid2 = $mysql->fileid("/a/nother/path/to/a/file/that\'s very/long", "longversionstringhere"); $mysql->setfilerelease($fid1, 1); $mysql->setfilerelease($fid2, 2); # Set up dummy declarations my ($id1, $id2); $id1 = $mysql->decid(1, "struct"); $id2 = $mysql->decid(1, "class"); # Now insert some symbols into the first release $mysql->setsymdeclaration("symbol1", $fid1, 1000, 1, $id1, undef); $mysql->setsymdeclaration("aVeryLongSymbolNameWithWeirdCapsGoesHere", $fid2, 101, 1, $id2, undef); # Check that the declarations are in the database my $data; $data = $dbh->selectall_arrayref("SELECT s.symname, i.line, i.type FROM lxr_indexes as i, lxr_symbols as s WHERE i.symid = s.symid AND i.fileid = $fid1"); $self->assert_equals( "symbol1", $data->[0]->[0]); $self->assert_equals(1000, $data->[0]->[1]); $self->assert_equals($id1, $data->[0]->[2]); $data = $dbh->selectall_arrayref("SELECT s.symname, i.line, i.type FROM lxr_indexes as i, lxr_symbols as s WHERE i.symid=s.symid AND i.fileid = $fid2"); $self->assert_equals("aVeryLongSymbolNameWithWeirdCapsGoesHere", $data->[0]->[0]); $self->assert_equals(101, $data->[0]->[1]); $self->assert_equals($id2, $data->[0]->[2]); # Now use the accessors my @syms; @syms = $mysql->symdeclarations("symbol1", 1); # returns filename, line, declaration, relsym $self->assert_equals("/lxr/tests/testfile1", $syms[0]->[0]); $self->assert_equals(1000, $syms[0]->[1]); $self->assert_equals("struct", $syms[0]->[2]); $self->assert_null($syms[0]->[3]); } # Test reference insertion and retrival sub test_references { my $self = shift; my $mysql = $self->{'mysql'}; my $dbh = $self->{'dbh'}; my ($fid1, $fid2); # Set up some dummy files $fid1 = $mysql->fileid("/lxr/tests/testfile1", "1.0.1"); $fid2 = $mysql->fileid("/a/nother/path/to/a/file/that\'s very/long", "longversionstringhere"); $mysql->setfilerelease($fid1, 1); $mysql->setfilerelease($fid2, 2); # Set up dummy declarations my ($id1, $id2); $id1 = $mysql->decid(1, "struct"); $id2 = $mysql->decid(1, "class"); # Now insert some symbols into the first release $mysql->setsymdeclaration("symbol1", $fid1, 1000, 1, $id1, undef); $mysql->setsymdeclaration("aVeryLongSymbolNameWithWeirdCapsGoesHere", $fid2, 101, 1, $id2, undef); # Set references to symbols $mysql->setsymreference("symbol1", $fid1, 2000); $mysql->setsymreference("symbol1", $fid2, 3000); $mysql->setsymreference("symbol1", $fid1, 2001); # Check directly in database my $data; $data = $dbh->selectall_arrayref("SELECT * from lxr_useage WHERE symid=".$mysql->symid("symbol1")." ORDER BY line"); $self->assert_equals(2000,$data->[0]->[1]); $self->assert_equals(2001, $data->[1]->[1]); # And via accessor my @data; @data = $mysql->symreferences("symbol1", 1); # returns filename, line $self->assert_equals("/lxr/tests/testfile1", $data[0]->[0]); $self->assert_equals(2000, $data[0]->[1]); $self->assert_equals(1, $#data); $self->assert_equals("/lxr/tests/testfile1", $data[1]->[0]); $self->assert_equals(2001, $data[1]->[1]); @data = $mysql->symreferences("symbol1", 2); $self->assert_equals(0, $#data); $self->assert_equals("/a/nother/path/to/a/file/that\'s very/long", $data[0]->[0]); $self->assert_equals(3000, $data[0]->[1]); } # Test the declaration id creation logic sub test_decid { my $self = shift; my $mysql = $self->{'mysql'}; my ($id1, $id2); $id1 = $mysql->decid(1, "struct"); $id2 = $mysql->decid(1, "class"); $self->assert($id1 != $id2); } # set_up and tear_down are used to # prepare and release resources need for testing # Prepare the database for the run sub set_up { my $self = shift; # Clear out all data in the database system("mysql -u lxr < initdb-mysql > /dev/null 2>&1"); # Create config $config = new LXR::Config("http://test/lxr", "./lxr.conf"); # Create Mysql object $self->{'mysql'} = new LXR::Index($config->dbname); # Create direct connection to DB $self->{'dbh'} = DBI->connect($config->dbname, "lxr", $config->{dbpass}); } sub tear_down { my $self = shift; $self->{'mysql'} = undef; $config = undef; $self->{'dbh'}->disconnect(); } 1; --- NEW FILE: initdb-mysql --- /* Read this into mysql with "\. initdb-mysql" when logged in as root to delete the old lxr_tests database and create a new one*/ drop database if exists lxr_tests; create database lxr_tests; use lxr_tests; /* symnum filenum */ create table lxr_files ( filename char(255) binary not null, revision char(255) binary not null, fileid int not null auto_increment, primary key (fileid) /*, unique (filename, revision) */ ); create table lxr_symbols ( symname char(255) binary not null, symid int not null auto_increment, primary key (symid), unique (symname) ); create table lxr_indexes ( symid int not null references lxr_symbols, fileid int not null references lxr_files, line int not null, langid tinyint not null references lxr_declarations, type smallint not null references lxr_declarations, relsym int references lxr_symbols ); create table lxr_releases (fileid int not null references lxr_files, rel char(255) binary not null, primary key (fileid,rel) ); create table lxr_useage (fileid int not null references lxr_files, line int not null, symid int not null references lxr_symbols ); create table lxr_status (fileid int not null references lxr_files, status tinyint not null, primary key (fileid) ); create table lxr_declarations (declid smallint not null auto_increment, langid tinyint not null, declaration char(255) not null, primary key (declid, langid) ); create index lxr_indexindex on lxr_indexes (symid) ; create unique index lxr_symbolindex on lxr_symbols (symname) ; create index lxr_useageindex on lxr_useage (symid) ; create index lxr_filelookup on lxr_files (filename); grant all on lxr_tests.* to lxr@localhost; Index: AllTests.pm =================================================================== RCS file: /cvsroot/lxr/lxr-tools/tests/AllTests.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- AllTests.pm 21 Apr 2009 15:25:00 -0000 1.1 +++ AllTests.pm 6 May 2009 22:33:08 -0000 1.2 @@ -17,7 +17,8 @@ $suite->add_test(Test::Unit::TestSuite->new("SecurityTest")); # $suite->add_test(Test::Unit::TestSuite->new("CVSTest")); $suite->add_test(Test::Unit::TestSuite->new("PlainTest")); -# $suite->add_test(Test::Unit::TestSuite->new("BKTest")); + # $suite->add_test(Test::Unit::TestSuite->new("BKTest")); + $suite->add_test(Test::Unit::TestSuite->new("MysqlTest")); return $suite; } Index: README =================================================================== RCS file: /cvsroot/lxr/lxr-tools/tests/README,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- README 21 Apr 2009 16:52:33 -0000 1.2 +++ README 6 May 2009 22:33:08 -0000 1.3 @@ -1,5 +1,12 @@ To run these tests: +- Set up the databases for testing: + - Mysql: mysql -u root -p + \. initdb-mysql + - Postgres: createdb lxr_tests + For Postgres, it's also necessary that the user running the + tests can alter/drop/create the database without requiring a + password entry. This can be configured in lxr.conf in this directory. - Make sure Test::Unit is installed - Execute TestRunner.pl AllTests Index: lxr.conf =================================================================== RCS file: /cvsroot/lxr/lxr-tools/tests/lxr.conf,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- lxr.conf 21 Apr 2009 16:48:58 -0000 1.2 +++ lxr.conf 6 May 2009 22:33:08 -0000 1.3 @@ -79,7 +79,7 @@ # For mysql, the format is dbi:mysql:dbname=<name> # for Postgres, it is dbi:Pg:dbname=<name> # for Oracle, it is dbi:Oracle:host=localhost;sid=DEVMMS;port=1521 - 'dbname' => 'dbi:mysql:dbname=lxr', + 'dbname' => 'dbi:mysql:dbname=lxr_tests', # If you need to specify the username or password for the database connection, # uncomment the following two lines @@ -174,4 +174,152 @@ }, -}) + }, + { + # baseurl is used to select configuration block. + + 'baseurl' => 'http://test/pg/lxr', # Put your URL here + 'virtroot' => '/lxr', # The bit after the / above + + 'variables' => { + # Define typed variable "v". This is the list of versions to index. + 'v' => {'name' => 'Version', + # This can come from a file, a function or be explicitly + # ennumerated. + # From a file: + 'range' => [ readfile('test-versions') ], + # The default version to display + 'default' => '1.0.6'}, + + # Define typed variable "a". First value is default. + 'a' => {'name' => 'Architecture', + 'range' => [qw(i386 alpha arm m68k mips ppc sparc sparc64)]}, + }, + + + # Templates used for headers and footers + 'htmlhead' => 'html-head.html', + 'htmltail' => 'html-tail.html', + 'htmldir' => 'html-dir.html', + 'htmlident' => 'html-ident.html', + + 'sourcehead' => 'html-head.html', + 'sourcedirhead' => 'html-head.html', + 'stylesheet' => 'lxr.css', + + # sourceroot - where to get the source files from + + # For ordinary directories, this specifies a directory which has each version as a + # subdirectory e.g. + # indexed-src/version1/... + # indexed-src/version2/... + # The names of the version directories must match the values for the Version + # variable above. + 'sourceroot' => '../test-data/source/', + + # The name to display for this source tree + 'sourcerootname' => 'Test Configuration - Postgres', + 'sourceparams' => {'cachepath' => '/a/path/to/cache', 'param2' => 'secondparam'}, + + # The DBI identifier for the database to use + # For mysql, the format is dbi:mysql:dbname=<name> + # for Postgres, it is dbi:Pg:dbname=<name> + # for Oracle, it is dbi:Oracle:host=localhost;sid=DEVMMS;port=1521 + 'dbname' => 'dbi:Pg:dbname=lxr_tests', + + # If you need to specify the username or password for the database connection, + # uncomment the following two lines + # 'dbpass' => 'lxr', + # 'dbuser' => 'lxr', + + # For using glimpse, the directory to store the .glimpse files in is required + 'glimpsedir' => '/tmp/lxr-glimpse', + + # Location of swish-e index database files if using swish-e + 'swishdir' => '/tmp/lxr-swishe/', + + + # where to look for include files inside the sourcetree. This is used to hyperlink + # to included files. + 'incprefix' => ['/include', '/include/linux'], + + # Which extensions to treat as images when browsing. If a file is an image, + # it is displayed. + 'graphicfile' => '(?i)\.(gif|jpg|jpeg|pjpg|pjpeg|xbm|png)$', #' + + # How to map files to languages + # Note that the string for the key and the first entry in the + # array MUST match + 'filetype' => { + # Format is + # Language name, filepatten regexp, module to invoke, + # (optional )tabwidth + # Note that to have another language supported by Generic.pm, + # you must ensure that: + # a) exuberant ctags supports it + # b) generic.conf is updated to specify information about the language + # c) the name of the language given here matches the entry in generic.conf + 'C' => ['C', '\.c$' #' + , 'LXR::Lang::Generic', '8'], + 'C++' => ['C++', '\.C$|((?i)\.c\+\+$|\.cc$|\.cpp$|\.cxx$|\.h$|\.hh$|\.hpp$|\.hxx$|\.h\+\+$)' #' + , 'LXR::Lang::Generic', '8'], + +# Some languages are commented out until the relevant entries in generic.conf are made +# The list here is the set supported by ctags 5.0.1 +# ['Beta', '(?i)\.bet$' #' +# , 'LXR::Lang::Generic'], +# ['Cobol', '(?i)\.cob$' #' +# , 'LXR::Lang::Generic'], +# ['Eiffel', '(?i)\.e$' #' +# , 'LXR::Lang::Generic'], +# ['Fortran', '(?i)\.f$|\.for$|\.ftn$|\.f77$|\.f90$|\.f95$' #' +# , 'LXR::Lang::Generic'], + 'Java' => ['Java', '(?i)\.java$' #' + , 'LXR::Lang::Java', '4'], +# ['Lisp', '(?i)\.cl$|\.clisp$|\.el$|\.l$|\.lisp$|\.lsp$|\.ml$' #' + # , 'LXR::Lang::Generic'], + # No tabwidth specified here as an example + 'Make' => ['Make', '(?i)\.mak$|makefile*' #' + , 'LXR::Lang::Generic'], +# ['Pascal', '(?i)\.p$|\.pas$' #' +# , 'LXR::Lang::Generic'], + 'Perl' => ['Perl', '(?i)\.pl$|\.pm$|\.perl$' #' + , 'LXR::Lang::Generic', '4'], + 'php' => ['php', '(?i)\.php$|\.php3$|\.phtml$' #' + , 'LXR::Lang::Generic', '2'], + 'Python' => ['Python', '(?i)\.py$|\.python$' #' + , 'LXR::Lang::Generic', '4'], +# ['rexx', '(?i)\.cmd$|\.rexx$|\.rx$' #' +# , 'LXR::Lang::Generic'], +# ['ruby', '(?i)\.rb$' #' +# , 'LXR::Lang::Generic'], +# ['scheme', '(?i)\.sch$|\.scheme$|\.scm$|\.sm$' #' +# , 'LXR::Lang::Generic'], +# ['shell', '(?i)\.sh$|\.bsh$|\.bash$|\.ksh$|\.zsh$' #' +# , 'LXR::Lang::Generic'], +# ['s-Lang', '(?i)\.sl$' #' +# , 'LXR::Lang::Generic'], +# ['tcl', '(?i)\.tcl$|\.wish$' #' +# , 'LXR::Lang::Generic'], + }, + + 'ignoredirs' => [], + # Maps interpreter names to languages. The format is: + # regexp => langname + # regexp is matched against the part after #! on the first line of a file + # langname must match one of the keys in filetype above. + # + # This mapping is only used if the filename doesn't match a pattern above, so + # a shell script called shell.c will be recognised as a C file, not a shell file. + + 'interpreters' => { + 'perl' => 'Perl', +# 'bash' => 'shell', +# 'csh' => 'shell', + 'python' => 'Python', + }, + + +}, + +) |