При этом, хочется минимально трогать оригинальный код, для того,чтобы Discovery можно было легко rsync-ать и хранить только локальные исправления.
1. ./mp03 -c ./test.conf < ./iir/IIR.posting
2. возможность не мешая никому перегружать оригинальные модули discovery
3. иметь локальные логи, pubs_root
1. доступна без проблем, 3. решается своим конфигом. Для решения 2. я сделал не очень много. Для примера, я решил в DB::DB::Auth заменить метод has_access_to - теперь он возвращает всегда 1 :) Ниже мои действия:
a) скопировал оригинальный mp03 в тестовое место и заменил одну строчку - последовательность просмотра директорий при поиске модулей
use lib qw(/usr/local/discovery/test/CORE/lib/perl/usr/local/discovery/CORE
Я сделал директорию /usr/local/discovery/test, чтобы не перегружать рассказ подробностями о моей файловой системе:) Понятно, что это просто link куда-то в мою директорию
b) сделал test.conf из штатного discovery.conf, заменив несколько переменных:
$DISCOVERY_LOGS = '/usr/local/discovery/test/tmp/logs'; $DISCOVERY_TMP = '/usr/local/discovery/test/tmp/tmp'; $DISCOVERY_PUBS_ROOT = '/usr/local/discovery/test/tmp/pubs/'; $DISCOVERY_DB_NAME = 'DBI:Pg:dbname=discovery-test;port=5432'; $DISCOVERY_USER = 'megera';
Я сделал такой $DISCOVERY_USER, чтобы не маяться с разными пользователями, пермишнами и т.д. Это сильно упрощает тестирование всяких парсеров и т.д., но ничего не мешает все сделать по уму (robot), если хочется тестировать security.
Для полнотекстового поиска надо создать конфигурацию (./fts_dict_test.conf выбран самым тривиальным, чтобы не было лишних dependencies). Этого делать не надо, если база загружается из dump-a.
/usr/local/discovery/CORE/sbin/init_fts.pl -c ./test.conf -f ./fts_dict_test.conf
c) запустил сиквенсер:
/usr/local/discovery/CORE/sbin/seq_init -f ./test.conf "msg_id=0 auth_id=6 hist_id=0 key_id=0 org_id=0 ref_id=0 sect_id=0"
d) Вот структура директорий, которую надо сделать (test_ir для тестовых IIR):
megera@mira:/usr/local/discovery/test $>l total 28 drwxrwxr-x 3 megera netadm 4096 Dec 3 00:12 CORE/ drwxrwxr-x 2 megera netadm 4096 Dec 2 04:11 logs/ -rwxrwxr-x 1 megera netadm 1450 Dec 3 00:37 mp03* drwxrwxr-x 2 megera netadm 4096 Dec 2 04:11 pubs/ -rw-rw-r-- 1 megera netadm 2491 Dec 3 01:09 test.conf drwxrwxr-x 2 megera netadm 4096 Dec 3 10:27 iir/ drwxrwxr-x 5 megera netadm 4096 Dec 2 10:27 tmp/ megera@mira:/usr/local/discovery/test $>l CORE/lib/perl/ total 8 drwxrwxr-x 3 megera netadm 4096 Dec 3 01:15 DB/ lrwxrwxrwx 1 megera netadm 34 Dec 3 00:14 orig -> /usr/local/discovery/CORE
d) Положил DB/DB/Auth.pm следующего вида:
use orig::DB::DB::Auth; package DB::DB::Auth; use strict; use vars qw(@ISA); @ISA = qw(orig::DB::DB::Auth); # dummy sub has_access_to { return 1; }
1. Создание нового пользователя - пользователь 'superuser' с auth_id=10300 и паролем PASSWORD заводит пользователя 'test' из организации с org_id=1. ./iir/IIR.newuser
MTYPE_ID: -1 AUTH_ID: 10300 PASSWORD: qqawf.avp5qGo Password: samba Account: test L_name: test_account Org_Id: 1
./mp03 -c test.conf < iir/IIR.newuser
2. Заведение новой темы в форуме
Наш пользователь 'test' решил завести тему, в которой приводит текст IIR-а.
MTYPE_ID: 17 AUTH_ID: 6 PASSWORD: qqco42V2FO38g Title: Новая тема itype_id: posting Sites: 10.0.0.2 Body: Вот так заводится новая тема в форуме. MTYPE_ID: 17<BR> AUTH_ID: 6<BR> PASSWORD: qqco42V2FO38g<BR> Title: Новая тема<BR> itype_id: posting<BR> Sites: 10.0.0.2<BR> Date: 2005-12-03 02:45:58<BR> Date: 2005-12-03 02:45:58
./mp03 -c test.conf < iir/IIR.posting1
Архив можно скачать, спрашивать у меня. Размер архива 800 Kb. Он содержит Discovery от 23 февраля 2006 года и директорию test, с помощью которой можно тестировать прием сообщений.