discovery mp test

Тестируем Discovery (MP)

Update:Чтобы robot посылал feedback необходимо, чтобы существовал файл $DISCOVERY_LOGS/feedback и принадлежал robot-у !!!
Discovery - это middleware для CMS, используемая на ряде крупных порталов. Я написал свой подход к тестированию обработки сообщений. Проблема тестирования состоит в том, что Discovery, несмотря на хорошую архитектуру,идеи и реализацию, слабо документирована, что очень сильно затрудняет ее установку, кастомизацию на девелоперскую машину для последующего тестирования.

При этом, хочется минимально трогать оригинальный код, для того,чтобы 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;
}


Собственно, это все. Дальше изготавливаете IIR (ручками или берете проблемный) и запускаете на вход mp03 и смотрите логи, pubs…. Аналогично, можно тестировать и другие методы. Я смог без проблем оттестировать парсеры, модули с форумами.

EXAMPLES

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

DOWNLOAD

Архив можно скачать, спрашивать у меня. Размер архива 800 Kb. Он содержит Discovery от 23 февраля 2006 года и директорию test, с помощью которой можно тестировать прием сообщений.

TODO

  • минимальная база discovery, достаточную для тестирования новых и старых сообщений
  • набор IIR для разных типов сообщений
  • избавиться от сиквенсоров в shared memory, для тестирования достаточно sequence в PostgreSQL.

NOTES

  • Должен быть как минимум один пользователь ($SUPERUSER_ID в discovery.conf, auth_id=10300), который может завести других пользователей. Пароль в тестовой базе 'qqawf.avp5qGo', что соответствует нешифрованному паролю 'superuser'.