Newer
Older
#!/usr/bin/env python
# vim: set fileencoding=utf-8 :
# Andre Anjos <andre.anjos@idiap.ch>
# Mon Aug 8 12:40:24 2011 +0200
#
# Copyright (C) 2011-2012 Idiap Research Institute, Martigny, Switzerland
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""A few checks at the replay attack database.
"""
import os, sys
import unittest
class ReplayDatabaseTest(unittest.TestCase):
"""Performs various tests on the replay attack database."""
def test01_queryRealAccesses(self):
f = db.files(cls='real')
self.assertEqual(len(set(f.values())), 200) #200 unique auth sessions
for k,v in f.items():
self.assertTrue( (v.find('authenticate') != -1) )
self.assertTrue( (v.find('real') != -1) )
self.assertTrue( (v.find('webcam') != -1) )
train = db.files(cls='real', groups='train')
self.assertEqual(len(set(train.values())), 60)
dev = db.files(cls='real', groups='devel')
self.assertEqual(len(set(dev.values())), 60)
test = db.files(cls='real', groups='test')
self.assertEqual(len(set(test.values())), 80)
#tests train, devel and test files are distinct
s = set(train.values() + dev.values() + test.values())
self.assertEqual(len(s), 200)
def queryAttackType(self, protocol, N):
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
f = db.files(cls='attack', protocol=protocol)
self.assertEqual(len(set(f.values())), N)
for k,v in f.items():
self.assertTrue(v.find('attack') != -1)
train = db.files(cls='attack', groups='train', protocol=protocol)
self.assertEqual(len(set(train.values())), int(round(0.3*N)))
dev = db.files(cls='attack', groups='devel', protocol=protocol)
self.assertEqual(len(set(dev.values())), int(round(0.3*N)))
test = db.files(cls='attack', groups='test', protocol=protocol)
self.assertEqual(len(set(test.values())), int(round(0.4*N)))
#tests train, devel and test files are distinct
s = set(train.values() + dev.values() + test.values())
self.assertEqual(len(s), N)
def test02_queryAttacks(self):
self.queryAttackType('grandtest', 1000)
def test03_queryPrintAttacks(self):
self.queryAttackType('print', 200)
def test04_queryMobileAttacks(self):
self.queryAttackType('mobile', 400)
def test05_queryHighDefAttacks(self):
self.queryAttackType('highdef', 400)
def test06_queryPhotoAttacks(self):
self.queryAttackType('photo', 600)
def test07_queryVideoAttacks(self):
self.queryAttackType('video', 400)
def test08_queryEnrollments(self):
f = db.files(cls='enroll')
self.assertEqual(len(set(f.values())), 100) #50 clients, 2 conditions
for k,v in f.items():
self.assertTrue(v.find('enroll') != -1)
def test09_manage_files(self):
self.assertEqual(main('replay files'.split()), 0)
from bob.db.script.dbmanage import main
self.assertEqual(main('replay dumplist --self-test'.split()), 0)
from bob.db.script.dbmanage import main
self.assertEqual(main('replay dumplist --class=attack --group=devel --support=hand --protocol=highdef --self-test'.split()), 0)
from bob.db.script.dbmanage import main
self.assertEqual(main('replay checkfiles --self-test'.split()), 0)
def test13_queryfacefile(self):
db = Database()
self.assertEqual(db.facefiles(('foo',), directory = 'dir')[0], 'dir/foo.face',)
def test14_queryfacefile_key(self):
db = Database()
self.assertEqual(db.facefiles_ids(ids=(1,), directory='dir'), db.paths(ids=(1,), prefix='dir', suffix='.face'))