Project

General

Profile

Actions

Task #525

closed

Jednotkové testy

Added by Pavel Kácha over 12 years ago. Updated about 8 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Jakub Čegan
Category:
-
Target version:
Start date:
07/30/2012
Due date:
08/08/2012
% Done:

0%

Estimated time:

Description

Kód není nijak pokryt unit testy - je třeba vytipovat klíčová místa (db vrstva, uživatelské api, etc., případně na základě vyřešených bugů) a vytvořit sadu testů, která bude udržována spolu s kódem.

Actions #1

Updated by Pavel Kácha over 12 years ago

  • Due date set to 08/08/2012
  • Assignee set to Jakub Čegan

Kubo, nejprve zpracuj stručný návrh - co by bylo záhodno pokrýt, jakým způsobem, možnosti. Pak zhodnotíme a určíme priority.

Actions #2

Updated by Pavel Kácha over 12 years ago

  • Target version changed from 2.1 to Future
Actions #3

Updated by Jakub Čegan over 12 years ago

Informace o unit testech jsou od této chvíle dostupné na jejich domovské stránce Jednotkové testy ve wiki.

Actions #4

Updated by Jakub Čegan over 12 years ago

Update stranky o konktretnejsi podobu testovanyh pripadu a take pridani Test::Exception k pouzivanym testovacim modulum.

Actions #5

Updated by Pavel Kácha over 12 years ago

Co getAuthNames, authorizeClient, saveNewEvent, getNewEvents, getLastId? Ty mně osobně připadají nejdůležitější. Potom klientská c2s, authorizeClient a případně registrační funkce a ostatní.

Actions #6

Updated by Jakub Čegan over 12 years ago

Mel jsem v planu pridat tyto funkce pozdeji, protoze jsem chtel kod pokryvat od nejmensich jednotek smerem k vetsim. Tzn pokryt vetsinu/vsechny fce volane v tech, ktere jsi uvadel. Pokud ovsem chceme mit kod pokryty rychle, pak je tvuj pristup lepsi. Mam tedy pokracovat, nebo mam zacit prioritne pokryvat "getAuthNames, authorizeClient, saveNewEvent, getNewEvents, getLastId"?

Actions #7

Updated by Pavel Kácha over 12 years ago

Právě, důvody, proč navrhuju začít auth/save/get a spol, je pokrytí kritických části, tj. právě získávání a ukládání zpráv, a to, že pokrytím shora můžeme objevit i chyby menších volaných metod. Byl bych opravdu pro začít autorizací, čtením a ukládáním.

Actions #8

Updated by Jakub Čegan over 12 years ago

Ano. Dobre. Zacnu tedy tak jak navrhujes.

Actions #9

Updated by Jakub Čegan over 12 years ago

Na strance wiki jsou nove informace o testech. Testovani klienta je aktualne v podstate hotove. U serveru se vyskytly drobne komplikace.

Actions #10

Updated by Pavel Kácha over 12 years ago

To, co je uvedené na wiki je kompletní sada testů, kterou nyní máš? Je kód někde v GITu, aby si ho případně mohli spouštět vývojáři, nebo my před vydáním verze?

Actions #11

Updated by Jakub Čegan over 12 years ago

Ano. Pro predstavu je tam uvedeno, jak vypadaji testy, ktere mam navrzene. Tyto testy je mozne najit zatim v /opt/warden-*/lib/ Testy na klienta jsou funkcni a muzu je nahrat do GIT, pripadne tam pridavat dalsi. S testy u serveru je ale vetsi problem, nez jsem si na pocatku myslel. Pri testovani dostavam neustale:

defined(%hash) is deprecated at Warden.pm line 217.
    (Maybe you should just omit the defined()?)
defined(%hash) is deprecated at Warden.pm line 256.
    (Maybe you should just omit the defined()?)
Odd number of elements in hash assignment at Warden.pm line 37.
Use of uninitialized value in list assignment at Warden.pm line 37.
Use of uninitialized value $DBI::errstr in concatenation (.) or string at Warden.pm line 142.
Cannot prepare authorization statement in someEvent: 

Myslel jsem si, ze se to vyresi pridani nize uvedeneho kodu primo do testu, ale ukazuje se, ze to nefunguje. Dle meho tam delaji nejvetsi problem problem prom deklarovane jako our, tvorba konkt stringu mimo funkci, takze se neda jednoduse nahradit mock funkci a prom. prostredi (napr. $ENV{'SSL_CLIENT_S_DN_CN'}.)

################################################################################
#            READING OF CONFIGURATION VARIABLES
################################################################################

my $conf_file = "/opt/warden-server/etc/warden-server.conf"; # path is updated by install.sh
our $FACILITY    = undef;
our $DB_NAME    = undef;
our $DB_USER    = undef;
our $DB_PASS    = undef;
our $DB_HOST    = undef;
our $MAX_EVENTS_LIMIT    = undef;
our %VALID_STRINGS    = undef;

# load set variables by user
unless (do $conf_file) {
  errMsg("Errors in config file '$conf_file': $@") if $@;
  errMsg("Can't read config file '$conf_file': $!") unless defined $_;
  # if $_ defined, it's retvalue of last statement of conf, for which we don't care
}

################################################################################
#                VARIABLES
################################################################################

our $DBH = DBI->connect("DBI:mysql:database=$DB_NAME;host=$DB_HOST", $DB_USER, $DB_PASS, {RaiseError => 1, mysql_auto_reconnect => 1}) || die "Could not connect to database: $DBI::errstr";
Actions #12

Updated by Jakub Čegan over 12 years ago

EDIT1: Myslim, ze by bylo nejlepsi dat si ohledne unit testu a kodu kratkou konferenci a pripadne pribrat i Toma.

Jakub Čegan wrote:

Ano. Pro predstavu je tam uvedeno, jak vypadaji testy, ktere mam navrzene. Tyto testy je mozne najit zatim v /opt/warden-*/lib/ Testy na klienta jsou funkcni a muzu je nahrat do GIT, pripadne tam pridavat dalsi. S testy u serveru je ale vetsi problem, nez jsem si na pocatku myslel. Pri testovani dostavam neustale:
[...]

Myslel jsem si, ze se to vyresi pridani nize uvedeneho kodu primo do testu, ale ukazuje se, ze to nefunguje. Dle meho tam delaji nejvetsi problem problem prom deklarovane jako our, tvorba konkt stringu mimo funkci, takze se neda jednoduse nahradit mock funkci a prom. prostredi (napr. $ENV{'SSL_CLIENT_S_DN_CN'}.)

[...]

Actions #13

Updated by Pavel Kácha over 12 years ago

Commitni to pls do GITu, ať si to můžu otestovat a povrtat se v tom lokálně a nešlapu Ti na warden-dev po patách. (V hlášce u commitů kdyžtak zmiňuj číslo tasku, tady #525).

Actions #14

Updated by Jakub Čegan over 12 years ago

Soubory jsou pridany do GITu a oznackovany. Snad jsem vse odelal spravne. Pokud by se Ti podarilo ziskat na warden-dev hodnoty prilozenych ENV, tak mi je, prosim, posli. Nemuzu se k nim pod svym uctem dostat. Mohlo by to vyresit jeden z problemu.

$ENV{'SSL_CLIENT_S_DN_CN'}
$ENV{'SSL_CLIENT_CERT'}
$ENV{'REMOTE_ADDR'}
$ENV{'SERVER_NAME'}
$ENV{'SERVER_ADDR'}
$ENV{'SERVER_PORT'}

Actions #15

Updated by Tomáš Plesník over 12 years ago

Jakub Čegan wrote:

Soubory jsou pridany do GITu a oznackovany. Snad jsem vse odelal spravne. Pokud by se Ti podarilo ziskat na warden-dev hodnoty prilozenych ENV, tak mi je, prosim, posli. Nemuzu se k nim pod svym uctem dostat. Mohlo by to vyresit jeden z problemu.
[...]

Pri ulozeni udalosti z klienta na warden-dev.cesnet.cz je ve zminenych promenych nasledujici:

ENV{'SSL_CLIENT_S_DN_CN'}: warden-dev.cesnet.cz
ENV{'SSL_CLIENT_CERT'}: -----BEGIN CERTIFICATE-----
MIIEZzCCA0+gAwIBAgIRAKV1flST9dLTKDnQZsgWFmQwDQYJKoZIhvcNAQEFBQAw
NjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5B
IFNTTCBDQTAeFw0xMTA4MTgwMDAwMDBaFw0xMzA4MTcyMzU5NTlaMD0xCzAJBgNV
BAYTAkNaMQ8wDQYDVQQKEwZDRVNORVQxHTAbBgNVBAMTFHdhcmRlbi1kZXYuY2Vz
bmV0LmN6MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxIzyexCL/CB6
COj691JLEWYEVkBLhROqbENk0ka/LbTtS5oNS3WDJVOK7aoHO3yluAdg1VocfFeY
hTgZGAzC82IuNLc+873XTfO2bzotbJL31CBUwpz2QhEAjGgjdvSx++VZAlbDKIa7
RnRcp9AsxPgqlUokVZbmR55sRO7QPaFqBUO061rj56uKzZocXy9RB+vVBQFUR5CF
GKOJhsiRU3GtHpEshKpOGX6jiC5OkUkcVr61Fb4BgKPFFptiiuwTuHUM40PLAdC/
B2lWdt4qPZqeiDFOVAQJH2tpi0Bhn2dmS1ttU76qpfP4RCPXZFxdxqxWgMjGq7Fp
ON3G3ySb3QIDAQABo4IBZzCCAWMwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH
6pDjue0wHQYDVR0OBBYEFMfGqZzdRFP42/ewN/5kPQoI83hxMA4GA1UdDwEB/wQE
AwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
AjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0
dHA6Ly9jcmwudGNzLnRlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUF
BwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9yZy9U
RVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJl
bmEub3JnMB8GA1UdEQQYMBaCFHdhcmRlbi1kZXYuY2VzbmV0LmN6MA0GCSqGSIb3
DQEBBQUAA4IBAQC/mZ2bKGj4ysHVB4q/skhYXMiTYBmVD7G7X434YIg70VDBM5IJ
efNNfx8HNdCprboX5PSPCpxl9n3TPARnEO2cm7XvVvt+wkdjNOys8z7a2DIPaeJ+
An3sIPzWUtm85UxujghIJ9nPh1ovZ75cQ2HF5C79qCyKzHtfP77Kq61Nm2Ay4aTq
gWyjFAPRjnB9fczhjdzntVRdjUFVq8z4ifq3Lv+hbN6aOjhfKRt8Ksr3IFlfKJdy
0sE0lEZdjG+O8rsuHCT/c+90IvGsG5JLT5SPJIxwQ1+fPJDfB37VWmUC9meSe7rt
iP0EQsnY1ytKuyUylJl0FiF/wG3rB8N7qlua
-----END CERTIFICATE-----
ENV{'REMOTE_ADDR'}: 195.113.161.39
ENV{'SERVER_NAME'}: warden-dev.cesnet.cz
ENV{'SERVER_ADDR'}: 195.113.161.39
ENV{'SERVER_PORT'}: 443

Actions #16

Updated by Pavel Kácha over 12 years ago

A ke globálním proměnným ve Warden.pm - zkus "our $Warden::DBH = atdatd".

Actions #17

Updated by Jakub Čegan over 12 years ago

Po prvnim natuknuti to vypada, ze po dodani informaci z drive uvedenych $ENV zacinaji i testy serveru fungovat. Warningy tykajici se globalnich promennych sice pretrvavaji, ale dle meho nejsou zatim na zavadu.

Actions #18

Updated by Jakub Čegan over 12 years ago

Mohl bych poprosit o instalaci Test::MockModule a Test::Exception na warden-dev. Vychazel jsem z toho, ze tam jsou (viz email unit testy z 23.8), ale asi nejsou. Na warden-test jsem si je uz nainstaloval sam.

Actions #19

Updated by Pavel Kácha over 12 years ago

Jsou tam.

Actions #20

Updated by Jakub Čegan over 12 years ago

Do gitu jsem pridal zakladni sadu testu (18ks) pro Warden.pm. Tyto testy pracuji zatim bez mocknuti databaze. Informace o nich jsou dostupne na strance ve wiki. Mam pridavat dalsi testy, nebo se ted mam zamerit na odstraneni DB z testu?

Actions #21

Updated by Pavel Kácha over 12 years ago

Byl bych pro, aby sis vyzkoušel mocknutí, bude potřeba i na testy klientské knihovny (tam budeš mít podobný problém - bez mocknutí budeš potřebovat funkční server). A umožní dělat i testy specifické k jednotlivým bugům.

Actions #22

Updated by Jakub Čegan about 12 years ago

Trapil jsem se ted se snahou udelat mock na execute(). Mocknout normalni subrutinu umim. V tom neni problem, ale u tohoto se mi proste nedari. Dosel jsem k zaveru, ze by mozna bylo lepsi stahnout z CPAN DBD::Mock, ktery nam snad umozni hrat si s celou (pseudo) databazi snadno dle libosti. Muzu poprosit o nainstalovani?

Actions #23

Updated by Pavel Kácha about 12 years ago

Je na warden-dev, warden-c a warden-test. Na první pohled je to ale docela kanón, je možné, že execute() je metoda objektu nebo třídy, pak by možná stačilo Test::MockClass, Test::MockObject nebo něco podobného.

Actions #24

Updated by Pavel Kácha about 8 years ago

  • Status changed from New to Closed

Timeout.

Actions

Also available in: Atom PDF