move status test to tokenizer

The availability of the module is now tested by the tokenizer.
This commit is contained in:
Sarah Hoffmann 2021-04-28 20:13:51 +02:00
parent 893490f94e
commit be6262c6ce
4 changed files with 42 additions and 62 deletions

View File

@ -2,6 +2,8 @@
namespace Nominatim;
require_once(CONST_TokenizerDir.'/tokenizer.php');
use Exception;
class Status
@ -25,24 +27,8 @@ class Status
throw new Exception('Database connection failed', 700);
}
$sStandardWord = $this->oDB->getOne("SELECT make_standard_name('a')");
if ($sStandardWord === false) {
throw new Exception('Module failed', 701);
}
if ($sStandardWord != 'a') {
throw new Exception('Module call failed', 702);
}
$sSQL = 'SELECT word_id, word_token, word, class, type, country_code, ';
$sSQL .= "operator, search_name_count FROM word WHERE word_token IN (' a')";
$iWordID = $this->oDB->getOne($sSQL);
if ($iWordID === false) {
throw new Exception('Query failed', 703);
}
if (!$iWordID) {
throw new Exception('No value', 704);
}
$oTokenizer = new \Nominatim\Tokenizer($this->oDB);
$oTokenizer->checkStatus();
}
public function dataDate()

View File

@ -15,6 +15,27 @@ class Tokenizer
$this->oNormalizer = \Transliterator::createFromRules(CONST_Term_Normalization_Rules);
}
public function checkStatus()
{
$sStandardWord = $this->oDB->getOne("SELECT make_standard_name('a')");
if ($sStandardWord === false) {
throw new Exception('Module failed', 701);
}
if ($sStandardWord != 'a') {
throw new Exception('Module call failed', 702);
}
$sSQL = "SELECT word_id FROM word WHERE word_token IN (' a')";
$iWordID = $this->oDB->getOne($sSQL);
if ($iWordID === false) {
throw new Exception('Query failed', 703);
}
if (!$iWordID) {
throw new Exception('No value', 704);
}
}
public function setCountryRestriction($aCountries)
{

View File

@ -204,7 +204,17 @@ class NominatimEnvironment:
def setup_unknown_db(self):
""" Setup a test against a non-existing database.
"""
self.write_nominatim_config('UNKNOWN_DATABASE_NAME')
# The tokenizer needs an existing database to function.
# So start with the usual database
class _Context:
db = None
context = _Context()
self.setup_db(context)
tokenizer_factory.create_tokenizer(self.get_test_config(), init_db=False)
# Then drop the DB again
self.teardown_db(context, force_drop=True)
def setup_db(self, context):
""" Setup a test against a fresh, empty test database.
@ -221,13 +231,13 @@ class NominatimEnvironment:
context.db.autocommit = True
psycopg2.extras.register_hstore(context.db, globally=False)
def teardown_db(self, context):
def teardown_db(self, context, force_drop=False):
""" Remove the test database, if it exists.
"""
if 'db' in context:
if hasattr(context, 'db'):
context.db.close()
if not self.keep_scenario_db:
if force_drop or not self.keep_scenario_db:
self.db_drop_database(self.test_db)
def _reuse_or_drop_db(self, name):

View File

@ -2,6 +2,8 @@
namespace Nominatim;
@define('CONST_TokenizerDir', dirname(__FILE__));
require_once(CONST_LibDir.'/DB.php');
require_once(CONST_LibDir.'/Status.php');
@ -40,45 +42,6 @@ class StatusTest extends \PHPUnit\Framework\TestCase
$this->assertEquals('No database', $oStatus->status());
}
public function testModuleFail()
{
$this->expectException(\Exception::class);
$this->expectExceptionMessage('Module call failed');
$this->expectExceptionCode(702);
// stub has getOne method but doesn't return anything
$oDbStub = $this->getMockBuilder(Nominatim\DB::class)
->setMethods(array('connect', 'getOne'))
->getMock();
$oStatus = new Status($oDbStub);
$this->assertNull($oStatus->status());
}
public function testWordIdQueryFail()
{
$this->expectException(\Exception::class);
$this->expectExceptionMessage('No value');
$this->expectExceptionCode(704);
$oDbStub = $this->getMockBuilder(Nominatim\DB::class)
->setMethods(array('connect', 'getOne'))
->getMock();
// return no word_id
$oDbStub->method('getOne')
->will($this->returnCallback(function ($sql) {
if (preg_match("/make_standard_name\('a'\)/", $sql)) return 'a';
if (preg_match('/SELECT word_id, word_token/', $sql)) return null;
}));
$oStatus = new Status($oDbStub);
$this->assertNull($oStatus->status());
}
public function testOK()
{
$oDbStub = $this->getMockBuilder(Nominatim\DB::class)
@ -100,7 +63,7 @@ class StatusTest extends \PHPUnit\Framework\TestCase
$oDbStub = $this->getMockBuilder(Nominatim\DB::class)
->setMethods(array('getOne'))
->getMock();
$oDbStub->method('getOne')
->willReturn(1519430221);