Task #525
closedJednotkové testy
0%
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.
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.
Updated by Pavel Kácha over 12 years ago
- Target version changed from 2.1 to Future
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.
Updated by Jakub Čegan over 12 years ago
Update stranky o konktretnejsi podobu testovanyh pripadu a take pridani Test::Exception k pouzivanym testovacim modulum.
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í.
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"?
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.
Updated by Jakub Čegan over 12 years ago
Ano. Dobre. Zacnu tedy tak jak navrhujes.
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.
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?
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";
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'}
.)[...]
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).
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'}
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
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".
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.
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.
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?
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.
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?
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.