179 cube_appobject_path = TestServerConfiguration.cube_appobject_path | TwistedConfiguration.cube_appobject_path |
180 cube_appobject_path = TestServerConfiguration.cube_appobject_path | TwistedConfiguration.cube_appobject_path |
180 |
181 |
181 def available_languages(self, *args): |
182 def available_languages(self, *args): |
182 return ('en', 'fr', 'de') |
183 return ('en', 'fr', 'de') |
183 |
184 |
184 def ext_resources_file(self): |
|
185 """return instance's external resources file""" |
|
186 return join(self.apphome, 'data', 'external_resources') |
|
187 |
|
188 def pyro_enabled(self): |
185 def pyro_enabled(self): |
189 # but export PYRO_MULTITHREAD=0 or you get problems with sqlite and threads |
186 # but export PYRO_MULTITHREAD=0 or you get problems with sqlite and |
|
187 # threads |
190 return True |
188 return True |
191 |
189 |
192 |
190 |
193 class ApptestConfiguration(BaseApptestConfiguration): |
191 class ApptestConfiguration(BaseApptestConfiguration): |
194 |
192 |
208 driver = sources['system']['db-driver'] |
206 driver = sources['system']['db-driver'] |
209 if driver == 'sqlite': |
207 if driver == 'sqlite': |
210 init_test_database_sqlite(config) |
208 init_test_database_sqlite(config) |
211 elif driver == 'postgres': |
209 elif driver == 'postgres': |
212 init_test_database_postgres(config) |
210 init_test_database_postgres(config) |
213 elif driver == 'sqlserver2005': |
|
214 init_test_database_sqlserver2005(config) |
|
215 else: |
211 else: |
216 raise ValueError('no initialization function for driver %r' % driver) |
212 raise ValueError('no initialization function for driver %r' % driver) |
217 config._cubes = None # avoid assertion error |
213 config._cubes = None # avoid assertion error |
218 repo, cnx = in_memory_cnx(config, unicode(sources['admin']['login']), |
214 repo, cnx = in_memory_cnx(config, unicode(sources['admin']['login']), |
219 password=sources['admin']['password'] or 'xxx') |
215 password=sources['admin']['password'] or 'xxx') |
225 def reset_test_database(config): |
221 def reset_test_database(config): |
226 """init a test database for a specific driver""" |
222 """init a test database for a specific driver""" |
227 driver = config.sources()['system']['db-driver'] |
223 driver = config.sources()['system']['db-driver'] |
228 if driver == 'sqlite': |
224 if driver == 'sqlite': |
229 reset_test_database_sqlite(config) |
225 reset_test_database_sqlite(config) |
230 elif driver in ('sqlserver2005', 'postgres'): |
226 elif driver == 'postgres': |
231 # XXX do something with dump/restore ? |
227 init_test_database_postgres(config) |
232 print 'resetting the database is not done for', driver |
|
233 print 'you should handle it manually' |
|
234 else: |
228 else: |
235 raise ValueError('no reset function for driver %r' % driver) |
229 raise ValueError('no reset function for driver %r' % driver) |
236 |
230 |
237 |
231 |
238 ### postgres test database handling ############################################ |
232 ### postgres test database handling ############################################ |
239 |
233 |
240 def init_test_database_postgres(config): |
234 def init_test_database_postgres(config): |
241 """initialize a fresh postgresql databse used for testing purpose""" |
235 """initialize a fresh postgresql databse used for testing purpose""" |
242 if config.init_repository: |
236 from logilab.database import get_db_helper |
243 from cubicweb.server import init_repository |
237 from cubicweb.server import init_repository |
244 init_repository(config, interactive=False, drop=True) |
238 from cubicweb.server.serverctl import (createdb, system_source_cnx, |
245 |
239 _db_sys_cnx) |
246 ### sqlserver2005 test database handling ############################################ |
240 source = config.sources()['system'] |
|
241 dbname = source['db-name'] |
|
242 templdbname = dbname + '_template' |
|
243 helper = get_db_helper('postgres') |
|
244 # connect on the dbms system base to create our base |
|
245 dbcnx = _db_sys_cnx(source, 'CREATE DATABASE and / or USER', verbose=0) |
|
246 cursor = dbcnx.cursor() |
|
247 try: |
|
248 if dbname in helper.list_databases(cursor): |
|
249 cursor.execute('DROP DATABASE %s' % dbname) |
|
250 if not templdbname in helper.list_databases(cursor): |
|
251 source['db-name'] = templdbname |
|
252 createdb(helper, source, dbcnx, cursor) |
|
253 dbcnx.commit() |
|
254 cnx = system_source_cnx(source, special_privs='LANGUAGE C', verbose=0) |
|
255 templcursor = cnx.cursor() |
|
256 # XXX factorize with db-create code |
|
257 helper.init_fti_extensions(templcursor) |
|
258 # install plpythonu/plpgsql language if not installed by the cube |
|
259 langs = sys.platform == 'win32' and ('plpgsql',) or ('plpythonu', 'plpgsql') |
|
260 for extlang in langs: |
|
261 helper.create_language(templcursor, extlang) |
|
262 cnx.commit() |
|
263 templcursor.close() |
|
264 cnx.close() |
|
265 init_repository(config, interactive=False) |
|
266 source['db-name'] = dbname |
|
267 except: |
|
268 dbcnx.rollback() |
|
269 # XXX drop template |
|
270 raise |
|
271 createdb(helper, source, dbcnx, cursor, template=templdbname) |
|
272 dbcnx.commit() |
|
273 dbcnx.close() |
|
274 |
|
275 ### sqlserver2005 test database handling ####################################### |
247 |
276 |
248 def init_test_database_sqlserver2005(config): |
277 def init_test_database_sqlserver2005(config): |
249 """initialize a fresh sqlserver databse used for testing purpose""" |
278 """initialize a fresh sqlserver databse used for testing purpose""" |
250 if config.init_repository: |
279 if config.init_repository: |
251 from cubicweb.server import init_repository |
280 from cubicweb.server import init_repository |