}w !"#$%&'()+,-./012345
M ASARYKOVA UNIVERZITA FAKULTA INFORMATIKY
Vkl´ad´an´ı obecnych ´ souboru˚ do XML pˇredpisu automatizovanych ´ testu˚ ˇ A´ PR ACE ´ B AKAL A´ RSK
Pavel Holica
Brno, podzim 2013
Prohl´asˇ en´ı ˚ Prohlaˇsuji, zˇ e tato bakal´arˇ sk´a pr´ace je mym ım autorskym ´ puvodn´ ´ d´ılem, kter´e jsem vypracoval samostatnˇe. Vˇsechny zdroje, prameny a literaturu, kter´e jsem pˇri vypracov´an´ı pouˇz´ıval nebo z nich cˇ erpal, v pr´aci rˇ a´ dnˇe cituji ´ s uveden´ım upln´ eho odkazu na pˇr´ısluˇsny´ zdroj.
Vedouc´ı pr´ace: Mgr. Marek Gr´ac, Ph.D. ii
Podˇekov´an´ı R´ad bych podˇekoval vedouc´ımu pr´ace Mgr. Marku Gr´acovi, Ph.D. za pevn´e nervy pˇri veden´ı t´eto pr´ace a za vstˇr´ıcnost. D´ale tak´e dˇekuji Bc. Mari´anu Ganiˇsinovi za konzultace v technickych ´ oblastech. Tak´e bych r´ad podˇekoval ´ ˚ e tipy v syst´emu Bc. Michalu Kovaˇr´ıkovi a Mgr. Luboˇsi Kardoˇsovi za ruzn´ Beaker. Nakonec pak tak´e vˇsem, kteˇr´ı trpˇelivˇe provedli korekturu, pˇredevˇs´ım pak Janˇe a Pavle Kratochv´ılovym. ´
iii
Kl´ıcˇ ov´a slova test, automatizovan´e testov´an´ı, soubor, XML, dokument, Python, datab´aze, ´ kodov´ an´ı, data, metadata, parametr
iv
Shrnut´ı Pr´ace je organizov´ana v poˇrad´ı od analyzy ´ probl´emu k jeho postupn´emu rˇ eˇsen´ı. V prvn´ıch dvou kapitol´ach je pops´an form´at XML a syst´em na spousˇ tˇen´ı automatizovanych ´ testu˚ Beaker [1]. V pˇredposledn´ı kapitole je hlubˇs´ı analyza ´ probl´emu vkl´ad´an´ı souboru˚ do pˇredpisu testu a n´avrh jak soubory do pˇredpisu um´ıstit. V posledn´ı kapitole je pak popsan´a samotn´a implementace v syst´emu Beaker.
v
Obsah 1
2
3
XML . . . . . . . . . . . . . . . . 1.1 Elementy . . . . . . . . . . . 1.2 Atributy . . . . . . . . . . . 1.3 Soubor v XML . . . . . . . . 1.4 Bin´arn´ı data v XML . . . . . Beaker . . . . . . . . . . . . . . . 2.1 Architektura . . . . . . . . . 2.1.1 Server . . . . . . . . 2.1.2 Labcontroller . . . . 2.1.3 Testovac´ı prostˇred´ı . 2.2 Instalace a konfigurace . . . 2.2.1 Instalace . . . . . . . 2.2.2 Konfigurace sluˇzeb . 2.2.3 Server . . . . . . . . 2.2.4 Labcontroller . . . . 2.2.5 Testovac´ı syst´emy . . 2.3 Sc´en´arˇ testu . . . . . . . . . 2.3.1 Task . . . . . . . . . 2.3.2 Recipe . . . . . . . . 2.3.3 Recipeset . . . . . . . 2.3.4 Job . . . . . . . . . . Soubory v pˇredpisu testu . . . . 3.1 Data . . . . . . . . . . . . . . ´ 3.1.1 Kodov´ an´ı . . . . . . 3.1.2 Typ souboru . . . . . 3.2 Um´ıstˇen´ı souboru . . . . . . 3.2.1 Relativn´ı cesta . . . . 3.2.2 Absolutn´ı cesta . . . 3.2.3 Aktualizace . . . . . 3.3 Metadata . . . . . . . . . . . 3.3.1 Atributy souboru . . 3.3.2 Pokroˇcil´a opr´avnˇen´ı
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 4 5 5 5 6 6 6 7 7 8 8 8 9 9 10 10 11 11 12 12 13 13 13 14 15 15 15 15 16 16 17 1
4
3.4 XML Element file . . . . . . . . . . . . . . . . ´ Upravy v Beakeru . . . . . . . . . . . . . . . . . . . 4.1 XML sch´ema . . . . . . . . . . . . . . . . . . . 4.2 Server . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 Datab´aze . . . . . . . . . . . . . . . . . 4.2.2 Zpracov´an´ı XML pˇredpisu . . . . . . 4.2.3 Generov´an´ı XML pˇredpisu . . . . . . 4.3 Testovac´ı prostˇred´ı . . . . . . . . . . . . . . . 4.3.1 Zpracov´an´ı XML pˇredpisu . . . . . . 4.3.2 Um´ıstˇen´ı souboru na testovac´ı syst´em 4.3.3 Vytvoˇren´ı souboru s metadaty . . . . 4.3.4 Aktualizace testu . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
17 19 19 20 20 21 22 23 23 24 24 25
2
´ Uvod Bˇehem intenzivn´ıho pouˇz´ıv´an´ı a vytv´arˇ en´ı testu˚ v syst´emu Beaker jsem spoleˇcnˇe s kolegy mnohokr´at narazil na omezen´ı tohoto syst´emu v nemoˇz˚ jako parametr cel´e soubory. Typicky se jednalo o tesnosti pˇred´avat testum ty, jejichˇz podstatou bylo pˇreinstalovat operaˇcn´ı syst´em na testovac´ım syst´emu a pro tuto instalaci bylo potˇreba dodat konfiguraˇcn´ı soubor popi˚ suj´ıc´ı, jakym m´a byt ´ zpusobem ´ novy´ syst´em nainstalov´an a konfigurov´an. ˚ V jinych pˇr´ıpadech se jednalo o konfiguraˇcn´ı soubory sluˇzeb a n´astroju. ´ Tyto situace jsme museli rˇ eˇsit uvnitˇr testu, kde takov´e soubory byly bud’ souˇca´ st´ı samotn´eho testu, nebo je bylo nutn´e generovat (pˇr´ıpadnˇe upravovat jiˇz existuj´ıc´ı konfiguraˇcn´ı soubory). Moˇznost pˇredat soubor jako parametr testu vyb´ız´ı k pouˇzit´ı tohoto mechanismu k pˇr´ım´emu nahrazen´ı souboru na testovac´ım syst´emu souborem pˇredanym, aniˇz by byla od testu ´ ´ celu poˇzadovan´a jak´akoliv cˇ innost. k tomuto uˇ ˇ Castokr´ at jsme se setkali i s pˇr´ıpadem, kdy bylo nutn´e prov´est jednor´azovou aktualizaci testu, kter´a nebyla v souladu s bˇezˇ nym ´ testov´an´ım. I zde by bylo moˇzn´e vyuˇz´ıt tuto novou vlastnost a pˇr´ımo tak nahradit soubor v testu souborem pˇredanym. ´ Vˇsechny zm´ınˇen´e pˇr´ıpady lze (a cˇ asto to tak i bylo) rˇ eˇsit pˇred´an´ım textov´eho parametru obsahuj´ıc´ıho URL, na kter´em se nach´azel dany´ soubor. ´ Takov´e rˇ eˇsen´ı vˇsak vyˇzaduje upravu testu, nen´ı vˇzdy moˇzn´e a nav´ıc pˇri opˇetovn´em spuˇstˇen´ı testu s takovym ´ parametrem jiˇz nemus´ı byt ´ tento soubor na dan´em URL dostupny. ´ Tak´e by bylo moˇzn´e pˇred´avat jako parametr testu soubor, nad kterym ´ je pˇr´ımo prov´adˇen test. Proto je vhodn´e umoˇznit pro takovy´ soubor napˇr´ıklad nastaven´ı pˇr´ıstupovych ´ pr´av pro testy ovˇerˇ uj´ıc´ı, zda lze dany´ soubor pˇrecˇ ´ıst nebo spustit.
3
Kapitola 1
XML XML [2] (extensible markup language) je znaˇckovac´ı jazyk slouˇz´ıc´ı k reprezentaci nepr´azdn´e n-´arn´ı stromov´e struktury ve formˇe cˇ iteln´e cˇ lovˇeku. V tomto jazyce se pouˇz´ıvaj´ı alfanumerick´e znaky a nˇekolik znaku˚ specia´ ln´ıch (kter´e jsou ovˇsem tak´e souˇca´ st´ı z´akladn´ı znakov´e sady ASCII). N´azvy ˚ podtrˇz´ıtka, pomlˇcky a teˇcky; v XML jsou sloˇzeny z alfanumerickych ´ znaku, nesm´ı zaˇc´ınat cˇ ´ıslem, pomlˇckou, ani teˇckou. Vrcholy jsou v XML oznaˇcov´any jako elementy a ohodnocen´ı vrcholu˚ ˇ lze prov´est pomoc´ı parametru˚ pˇriˇrazenych elementu. XML neumoˇznuje ´ ohodnocovat hrany, coˇz ovˇsem nen´ı u stromov´e struktury probl´em, jelikoˇz ohodnocen´ı hrany lze ekvivalentnˇe rˇ eˇsit ohodnocen´ım vrcholu. XML poskytuje v´ıce moˇznost´ı, neˇz je pops´ano v t´eto kapitole (napˇr. jmenn´e prostory), ale ty nejsou pro tuto pr´aci potˇrebn´e a ani pouˇziteln´e.
1.1
Elementy
Element, jakoˇzto vrchol, m´a sv´eho rodiˇce (s vyjimkou koˇrenov´eho elemen´ tu) a potomky. Rodiˇcem je vˇzdy element a potomky mohou byt ´ elementy, ˇ text, nebo text kombinovany´ s elementy. Posledn´ı zminovan y´ pˇr´ıpad (kombinovany´ obsah) je vhodny´ pro dokumenty obsahuj´ıc´ı strukturovany´ text. V textu se mohou vyskytovat libovoln´e znaky ze znakov´e sady dokumentu, kromˇe znaku˚ pouˇz´ıvanych ´ XML (jde o &, > a <). Tyto znaky mus´ı byt ´ vloˇzeny jako XML entity, kter´e jsou reprezentov´any sekvenc´ı &n´ azev;, kde n´azev je pojmenov´an´ı entity. Entitami lze vyj´adˇrit libovolny´ znak, a to bud’ n´azvem, nebo cˇ ´ıslem znaku v pouˇzit´e znakov´e sadˇe. Pokud se v textu vy˚ je vhodnˇejˇs´ı text um´ıstit do CDATA [3] sekce, skytuje v´ıce takovych ´ znaku, kter´a je uvozena sekvenc´ı . V t´eto ˚ ze vyskytovat libovolny´ text, ktery´ neobsahuje sekvenci znaku˚ sekci se muˇ pouˇzitou pro ukonˇcen´ı CDATA sekce. 4
1. XML
1.2
Atributy
˚ ze m´ıt libovoln´e mnoˇzstv´ı atributu, ˚ pˇriˇcemˇz atribut se skl´ad´a Element muˇ ˚ ze byt z n´azvu a hodnoty. Hodnotou atributu pak muˇ ´ t´emˇerˇ libovolny´ jednoˇra´ dkovy´ rˇ etˇezec znaku˚ ze znakov´e sady dokumentu (typicky UTF-8 [4]), kde je hodnota ohraniˇcena apostrofy, nebo uvozovkami. V hodnotˇe se nesm´ı vyskytovat tyt´ezˇ znaky, kter´e nejsou povoleny v textu elementu, a tak´e se zde nesm´ı vyskytovat znak pouˇzity´ k ohraniˇcen´ı. Ten lze vˇsak um´ıstit po˚ moc´ı XML entity. Z tˇechto duvod u˚ jsou atributy vhodn´e pro popis obsahu ´ elementu nebo pro jednoduˇssˇ´ı udaje.
1.3
Soubor v XML
Vzhledem k popsanym ´ vlastnostem XML dokumentu je vhodn´e soubor um´ıstit do samostatn´eho elementu, kde metadata (n´azev, pˇr´ıstupov´a pr´ava a jin´e atributy) jsou um´ıstˇena v atributu a data souboru v jeho textu. V pˇr´ıpadˇe potˇreby um´ıstˇen´ı komplikovanˇejˇs´ıch metadat souboru lze uvaˇzovat i o rˇ eˇsen´ı, kdy pro kaˇzd´a takov´a metadata je vytvoˇren novy´ element, a data souboru je pak nutn´e um´ıstit do textu samostatn´eho elementu pojmenovan´eho data. Tyto nov´e elementy budou pak potomky elementu reprezentuj´ıc´ıho soubor.
1.4
Bin´arn´ı data v XML
Aˇckoliv existuje z´apis XML dokumentu v bin´arn´ım form´atu, nen´ı tento z´apis obvykly´ a bˇezˇ nˇe pouˇz´ıvany. ´ Bin´arn´ı data nelze pˇr´ımo um´ıstit do XML dokumentu (jedn´a se totiˇz o textovy´ dokument), lze ovˇsem pˇrev´est data ´ ´ souboru na textov´a data pomoc´ı vhodn´eho kodov´ an´ı a n´aslednˇe tato zakodovan´a data vloˇzit do textu elementu.
5
Kapitola 2
Beaker ˚ uloˇzen´ı Beaker je syst´em pro spouˇstˇen´ı automatickych ´ softwarovych ´ testu, jejich vysledk u˚ a n´aslednou prezentaci. Tento syst´em je dostupny´ pod li´ cenc´ı GNU GPL 2 a novˇejˇs´ı a je aktivnˇe vyv´ıjen a pouˇz´ıv´an spoleˇcnost´ı Red Hat a jej´ımi partnery. V souˇcasn´e dobˇe uvaˇzuje o pouˇzit´ı tohoto syst´emu i komunita organizovan´a kolem projektu Fedora, ktery´ je sponzorov´an spoleˇcnost´ı Red Hat. Tento syst´em je naps´an v programovac´ım jazyce Python [5] s vyuˇzit´ım mnoha rozˇsiˇruj´ıc´ıch knihoven, mezi jinymi tak´e SQLAlchemy [7] a je urˇcen ´ pro bˇeh v prostˇred´ı operaˇcn´ıho syst´emu (d´ale OS) Red Hat Enterprise Linux 6 (d´ale RHEL), nebo v jin´em kompatibiln´ım OS. Beaker je vytvoˇren jako webov´a aplikace s XMLRPC [8] rozhran´ım, coˇz poskytuje uˇzivateli moˇznost syst´em flexibilnˇe pouˇz´ıvat, nez´avisle na j´ım preferovan´em OS. Pro webov´e rozhran´ı je pouˇzit Apache web server [9], ve kter´em je Beaker spuˇstˇen jako WSGI aplikace [10]. Beaker pouˇz´ıv´a pro organizaci dat o testovac´ıch syst´emech, uˇzivatel´ıch apod. datab´azovy´ syst´em MySQL [11].
2.1
Architektura
Syst´em Beaker je sloˇzen z n´asleduj´ıc´ıch cˇ a´ st´ı: server (d´ale Server), labcontrollery a testovac´ı prostˇred´ı. Server a labcontroller mohou byt ´ instalov´any na jednom syst´emu, v praxi ovˇsem byv´ ´ a labcotrolleru˚ v´ıce a jsou um´ıstˇeny na geograficky rozd´ılnych ´ m´ıstech. 2.1.1 Server ˚ daServer je stˇredovym ´ bodem cel´eho Beakeru. Star´a se o datab´azi testu, ˚ datab´azi testovac´ıch syst´emu, ˚ autentizaci a autorizaci tab´azi labcontrolleru, ˚ pˇr´ıjem poˇzadavku˚ na spuˇstˇen´ı testu, ˚ pl´anov´an´ı spuˇstˇen´ı testu, ˚ uˇzivatelu, ˚ Testy jsou v souˇcasn´e ukl´ad´an´ı vysledk u˚ testu˚ a presentaci vysledk u˚ testu. ´ ´ 6
2. B EAKER ˇ ı definovat poˇzadavky dobˇe uloˇzeny v RPM [12] bal´ıcˇ c´ıch, kter´e umoˇznuj´ testu˚ na software i hardware. 2.1.2 Labcontroller Labcontroller m´a na starosti zdroje softwaru pro instalace, ovl´ad´an´ı testovac´ıch stroju˚ a spouˇstˇen´ı testu˚ na testovac´ıch syst´emech. V aktualn´ı verzi Beakeru to znamen´a automatizovanou instalaci OS (za pouˇzit´ı kickstart [13] souboru) ze s´ıtˇe, pˇriˇcemˇz labcontroller nastav´ı prostˇred´ı pro s´ıt’ovy´ boot testovan´eho syst´emu a n´aslednˇe provede potˇrebnou akci pro spuˇstˇen´ı testovan´eho stroje (typicky pomoc´ı protokolu pro vzd´alenou spr´avu). Pro instalaci OS je pouˇzit s´ıt’ovy´ zdroj softwaru definovany´ labcontrollerem (typicky m´ıstn´ı zdroj pro testovac´ı syst´em). Po instalaci je OS nakonfigurov´an tak, zˇ e spust´ı testovac´ı prostˇred´ı. Od poˇca´ tku instalace bˇezˇ ´ı tzv. watchdog, ktery´ kontroluje, zda nˇekter´a z akc´ı netrv´a pˇr´ıliˇs dlouho. Pokud ano, test nebo instalace je ukonˇcena bez moˇznosti pokraˇcovan´ı dalˇs´ım testem. V budoucnu je v pl´anu nam´ısto n´aroˇcn´e instalace pouˇz´ıt takzvan´e cloudov´e rˇ eˇsen´ı, kde se rovnou spust´ı virtu´aln´ı stroj s jiˇz nainstalovanym ´ OS a provedou se pouze drobn´e zmˇeny nutn´e pro spuˇstˇen´ı testovac´ıho prostˇred´ı pro napl´anovany´ test. 2.1.3 Testovac´ı prostˇred´ı Testovac´ı prostˇred´ı (nebo tak´e harness) je software bˇezˇ ´ıc´ı na pˇripraven´em ´ testovac´ım syst´emu. Jeho ukolem je zprostˇredkov´avat komunikace mezi testem a labcontrollerem. Testovac´ı prostˇred´ı nejdˇr´ıve zjist´ı, ktery´ test m´a byt parametry, pot´e test nainstaluje, nastav´ı promˇenn´e ´ spuˇstˇen a s jakymi ´ prostˇred´ı a test spust´ı. N´aslednˇe mu test sdˇeluje vysledky a prostˇred´ı je ´ pˇred´av´a labcontrolleru. ˚ Testovac´ı prostˇred´ı tak´e poskytuje prostˇredky pro synchronizaci testu, kter´a je potˇrebn´a pro takzvan´e multihost testy, tj. testy, kter´e bˇezˇ ´ı na v´ıce ˚ syst´emech souˇcasnˇe a kde se testuje interakce syst´emu. Posledn´ı funkce, kterou testovac´ı prostˇred´ı poskytuje, je tzv. local watchdog, ktery´ kontroluje, zda test netrv´a delˇs´ı dobu, neˇz o sobˇe deklaruje. Pokud ano, tak test ukonˇc´ı a pokraˇcuje spuˇstˇen´ım dalˇs´ıho testu. Local watchdog se liˇs´ı od watchdogu na labcontrolleru t´ım, zˇ e jiˇz m´a moˇznost ˚ ze tento plnˇe ovl´adat testovac´ı syst´em, a tak pˇri selh´an´ı jednoho testu muˇ test n´asilnˇe ukonˇcit a pokraˇcovat testem dalˇs´ım. Pokud ovˇsem z jak´ehoko˚ ˚ nefunkˇcn´ımu local watchliv duvodu selˇze testovac´ı prostˇred´ı (at’ uˇz kvuli ˚ ze dog nebo napˇr. probl´emu s pˇred´av´an´ım vysledk u˚ labcontrolleru) muˇ ´ 7
2. B EAKER watchdog na labcontrolleru ukonˇcit cely´ test.
2.2
Instalace a konfigurace
Projekt Beaker na svych webovych str´ank´ach poskytuje kickstart soubor ´ ´ pro instalaci operaˇcn´ıho syst´emu CentOS [14] 6 spolu s Beakerem a dalˇs´ım poˇzadovanym ´ softwarem. D´ale pak poskytuje skripty pro z´akladn´ı konfiguraci Beakeru. Beaker a labcontroller jsou obvykle instalov´any jako samostatn´e syst´emy vz´ajemnˇe komunikuj´ıc´ı po s´ıti, lze je vˇsak provozovat na jednom syst´emu souˇcasnˇe a pro vyvoj vlastnost´ı na architektuˇre nez´avislych ´ ´ je to naprosto dostaˇcuj´ıc´ı. Toto rˇ eˇsen´ı je pops´ano na webu projektu Beaker i s potˇrebnou konfigurac´ı. Bohuˇzel je i pˇri tomto rˇ eˇsen´ı poˇzadov´ano, aby byl syst´em um´ıstˇen v s´ıti, nad kterou m´a uˇzivatel plnou kontrolu, lze vˇsak zvolit i m´enˇe n´aroˇcn´e rˇ eˇsen´ı, a to za pomoci hardwarov´e virtualizace, kter´a je dnes jiˇz bˇezˇ nˇe dostupn´a. Virtualizace (spolu s vlastnostmi linuxov´eho j´adra) poskytuje moˇz˚ kter´e mohou tyto s´ıtˇe nost vytv´arˇ en´ı virtu´aln´ıch s´ıt´ı a virtu´aln´ıch stroju, plnˇe spravovat. Lze tak vytvoˇrit virtu´aln´ı prostˇred´ı, bl´ızˇ ´ıc´ı se bˇezˇ n´emu pouˇzit´ı syst´emu Beaker. Tato volba ovˇsem nen´ı na webu projektu Beaker zm´ınˇena a nepoˇc´ıt´a se s n´ı.
2.2.1 Instalace Syst´em Beaker je moˇzn´e nainstalovat na RHEL 6 nebo CentOS 6 napˇr. za pomoci kickstart souboru dostupn´eho na webu projektu Beaker. Tak´e lze OS nainstalovat manu´alnˇe a potˇrebny´ software vˇcetnˇe Beakeru n´aslednˇe doinstalovat. Na syst´emu, kde je Server, je instalov´an bal´ıcˇ ek beaker-server a na syst´emu s labcontroller je beaker-lab-controller.
2.2.2 Konfigurace sluˇzeb Pro korektn´ı fungov´an´ı Beakeru je potˇreba, aby byla spr´avnˇe nakonfigurov´ana s´ıt’, s´ıt’ov´e instalaˇcn´ı zdroje, labcontrollery a testovac´ı syst´emy. Z pohledu s´ıtˇe je pˇredevs´ım nutn´e, aby mˇel Server, labcontrollery a testovac´ı ˚ S t´ımto souvis´ı syst´emy nastaveny FQDN [15] vˇcetnˇe reverzn´ıch z´aznamu. i pˇridˇelov´an´ı IP adres pomoc´ı protokolu DHCP [16] a bootov´an´ı ze s´ıtˇe za pomoci tohoto protokolu a protokolu TFTP [17]. 8
2. B EAKER 2.2.3 Server Pro Server je pˇredevˇs´ım potˇreba vytvoˇrit MySQL datab´azi a jej´ıho uˇzivatele, kter´e bude Beaker pouˇz´ıvat. Jakmile je datab´aze pˇripravena, vytvoˇr´ı pˇr´ıkaz beaker-init -u admin -p heslo -e
[email protected] ´ ctu s danym tabulky nutn´e pro provoz a z´aznam o administr´atorsk´em uˇ ´ heslem a e-mailovou adresou. N´aslednˇe je moˇzn´e se pˇrihl´asit ve webov´em rozhran´ı na adrese http://example.com/bkr/login s novˇe vytvoˇrenym ´ ´ ctem. administr´atorskym ´ uˇ ˚ Na webu Po pˇrihl´asˇ en´ı uˇz zbyv´ ´ a jen nahr´an´ı testu˚ do datab´aze testu. ´ ˚ kter´e jsou urˇceny projektu Beakeru jsou k dispozici ulohy (ve formˇe testu), ´ k z´akladn´ım operac´ım s testovac´ımi syst´emy. Tyto ulohy jsou: /distribution/install, /distribution/reservesys a ´ /distribution/inventory. Uloha install je puˇstˇena jako prvn´ı po instalaci OS, a provede z´akladn´ı kontrolu, zda instalace probˇehla v poˇra´ d˚ cen´ı syst´emu uˇzivateli nebo pro manu´aln´ı kontrolu a diagnosku. Pro zapujˇ ´ ´ tiku probˇehlych reservesys. Posledn´ı z´akladn´ı ulohou ´ testu˚ slouˇz´ı uloha ´ celem je z´ısk´an´ı informac´ı o testovac´ım syst´emu, je inventory, jej´ımˇz uˇ ´ ´ u˚ zpˇet do na kter´em je tato uloha spuˇstˇena, a n´aslednˇe odesl´an´ı tˇechto udaj ´ cely vytvoˇren´ı datab´aze hardwaru testovac´ıch syst´emu. ˚ Beakeru pro uˇ Posledn´ım krokem je povolen´ı a spuˇstˇen´ı sluˇzby beakerd. 2.2.4 Labcontroller V pˇr´ıpadˇe labcontrolleru je konfigurace jednoduˇssˇ´ı, je potˇreba jej pouze registrovat na Serveru a upravit konfiguraˇcn´ı soubor. Na adrese http://example.com/bkr/labcontrollers/new se pro registraci uvede FQDN, uˇzivatelsk´e jm´eno, kter´e bude pˇriˇrazeno labcontrolleru, k nˇemu odpov´ıdaj´ıc´ı heslo a email pro labcontroller. V souboru /etc/beaker/labcontroller.conf se nastav´ı URL Serveru (HUB URL), uˇzivatelsk´e jm´eno a heslo, kter´e bude labcontroller pouˇz´ıvat. Jak bylo vyˇ ´ se zm´ınˇeno, labcontroller m´a na starosti spouˇstˇen´ı insta˚ ze byt lace na testovac´ıch syst´emech, a proto muˇ ´ zapotˇreb´ı nastavit adres´arˇ , ktery´ pouˇz´ıv´a TFTP server (volba TFTP ROOT v konfiguraˇcn´ım souboru). Posledn´ım krokem je povolen´ı spuˇstˇen´ı sluˇzeb beaker-proxy, beaker-watchdog a beaker-provision. Pokud je zˇ a´ douc´ı ukl´adat z´aznamy o vysledc´ ıch testu˚ jinde neˇz na labcontrolleru, je potˇreba upravit ´ pˇr´ısluˇsn´e volby v konfiguraˇcn´ım souboru labcontrolleru a povolit a spustit sluˇzbu beaker-transfer. Jakmile jsou sluˇzby labcontrolleru spuˇstˇeny, je potˇreba pˇridat do labcontrolleru zdroj pro instalaci softwaru a OS, coˇz lze 9
2. B EAKER prov´est pomoc´ı pˇr´ıkazu beaker-import s argumentem URL, ukazuj´ıc´ım na ˚ instalaˇcn´ı zdroj RHEL, nebo syst´emu pouˇz´ıvaj´ıc´ı stejny´ zpusob instalace, jako je CentOS nebo Fedora.
2.2.5 Testovac´ı syst´emy Na testovac´ıch syst´emech samotnych ´ je potˇreba nastavit pouze bootorder tak, zˇ e prvn´ı poloˇzkou bude boot ze s´ıt’ov´e karty a n´aslednˇe z datov´eho ´ ziˇstˇe (typicky z pevn´eho disku). uloˇ D´ale je nutno kaˇzdy´ novy´ testovac´ı syst´em zaregistrovat na Serveru. Registrace prob´ıh´a na adrese http://example.com/bkr/new, kde je potˇreba nastavit n´azev syst´emu, pˇriˇcemˇz n´azvem je FQDN syst´emu a pouˇz´ıv´a ˚ zitou se pro pˇreklad na IP adresu pro nastaven´ı s´ıt’ov´e instalace. Dalˇs´ı duleˇ volbou je Lab controller, kde se vybere ten labcontroller, ktery´ spravuje s´ıt’ovou instalaci pˇrid´avan´eho syst´emu. Posledn´ı volbou tykaj´ ´ ıc´ı se nasta˚ zit´a pro vybˇ ven´ı s´ıtˇe je MAC adresa, kter´a je duleˇ ´ er prim´arn´ı s´ıt’ov´e karty, kterou m´a testovac´ı syst´em pouˇz´ıvat pro instalaci. ˚ Po registraci syst´emu je jeˇstˇe zapotˇreb´ı nastavit zpusob spouˇstˇen´ı testovac´ıho syst´emu. Pro spuˇstˇen´ı podporuje Beaker nejenom bˇezˇ n´e proto˚ ale tak´e wake on lan pomoc´ı takkoly pro vzd´alenou spr´avu serveru, zvan´eho magic packetu a protokol pro spr´avu virtu´aln´ıch syst´emu˚ spravovanych sluˇzbou libvirt. Pro virtu´aln´ı syst´emy jde o poloˇzku virsh, ´ kde se u parametru Power Address nastav´ı qemu+ssh:IP_ADRESA, kde IP ADRESA patˇr´ı syst´emu se sluˇzbou libvirt. Pro Power Login se nastav´ı pˇrihlaˇsovac´ı jm´eno (vzd´alen´eho) uˇzivatele, ktery´ m´a opr´avnˇen´ı ovl´adat sluˇzbu libvirt. Posledn´ım krokem je vygenerov´an´ı SSH kl´ıcˇ e pro ˚ eryspr´avu (pokud jiˇz neexistuje) a pˇrid´an´ı veˇrejn´eho kl´ıcˇ e do seznamu duvˇ hodnych ´ pro uˇzivatele na serveru s libvirt sluˇzbou. Operace s SSH kl´ıcˇ i je potˇreba prov´est pouze jednou pro kaˇzdy´ server provozuj´ıc´ı libvirt ´ u˚ o hardsluˇzbu. Pro otestov´an´ı konfigurace a nahr´an´ı dodateˇcnych udaj ´ ´ waru je vhodn´e napl´anovat ulohu /distribution/inventory.
2.3
Sc´en´arˇ testu
Sc´en´arˇ e testu jsou v syst´emu Beaker definov´any pomoc´ı XML stromov´e struktury, kter´a odpov´ıd´a RelaxNG sch´ematu. 10
2. B EAKER 2.3.1 Task Z´akladn´ı jednotkou pˇredpisu testu je test a jeho parametry. Test je specifikov´an elementem task s XML parametry name a role, kde name je n´azev ´ ´ testu/ulohy a role specifikuje roli ulohy – zda jde o samostatnˇe bˇezˇ ´ıc´ı test, ˚ zit´e nebo zda jde o server, client, peer nebo jinou roli. Nastaven´ı role je duleˇ ˚ u multihost testu. Parametry testu se nach´azej´ı v elementu params, kde je pro kaˇzdy´ parametr pˇr´ıtomen element param s XML atributy name a value. Vˇsechny parametry jsou pˇred spuˇstˇen´ım testu zpracov´any, a podle nich jsou nastaveny promˇenn´e prostˇred´ı. Protoˇze jsou hodnoty tˇechto promˇennych prostˇred´ı ´ urˇceny pomoc´ı XML atributu, nen´ı moˇzn´e pouˇz´ıt napˇr. v´ıceˇra´ dkov´e hodnoty, a nelze tak pomoc´ı nich nastavit libovolnou hodnotu.
2.3.2 Recipe Elementy task jsou organizov´any v r´amci elementu recipe s t´ım, zˇ e jsou ´ jednotliv´e ulohy spouˇstˇeny v poˇrad´ı, v jak´em jsou pˇr´ıtomny v elementu recipe. Recipe jiˇz specifikuje celou sekvenci cˇ innost´ı, vˇcetnˇe instalace, kter´a je na testovac´ım syst´emu provedena. Pomoc´ı elementu hostRequires lze pomoc´ı sady pravidel specifikovat, ˚ m´a syst´em vyhovovat (napˇr. se m´a jednat o syst´em jakym ´ poˇzadavkum se cˇ tyˇrmi a v´ıce gigabyty pamˇeti, dvˇema s´ıt’ovymi kartami a dvˇema proce´ sory). V r´amci recipe je nutn´e specifikovat i poˇzadavky na operaˇcn´ı syst´em v elementu distroRequires (napˇr. zˇ e m´a test probˇehnout na OS CentOS 5.9 architektury x86 64). D´ale lze specifikovat dodateˇcn´e repozit´arˇ e softwaru, kter´e se pouˇzij´ı pˇri instalaci, a seznam bal´ıcˇ ku˚ softwaru, kter´e maj´ı byt ´ nainstalov´any. Pro instalaci lze nastavit cely´ pˇredpis automatick´e instalace ve form´atu kickstart souboru, a to v textu elementu kickstart, coˇz je pouˇz´ıv´ano pro instalaˇcn´ı testy, nebo pro testy vyˇzaduj´ıc´ı specifick´e nastaven´ı hardwaru. Pokud nen´ı potˇreba specifikovat cely´ pˇredpis, ale pouze jeho cˇ a´ st, lze pouˇz´ıt element ks appends a jeho podelementy ks append, jejichˇz text bude pˇripojen na konec vygenerovan´eho pˇredpisu pro automatickou instalaci. Pro instalaci jeˇstˇe lze nastavit parametry j´adra pˇred instalac´ı pomoc´ı XML atributu kernel options a po instalaci pomoc´ı atributu kernel options post. ´ cePro recipe je tak´e vhodn´e nastavit XML atribut whiteboard, jehoˇz uˇ ´ lem je popisovat ulohu testu˚ a testovac´ıho syst´emu v r´amci pˇredpisu testu. 11
2. B EAKER 2.3.3 Recipeset Aby bylo moˇzn´e prov´adˇet takzvan´e multihost testy, je tˇreba tyto testy sv´azat do skupiny, kter´a je synchronizov´ana a je u n´ı zajiˇstˇeno, zˇ e budou spusˇ tˇeny na testovac´ıch syst´emech v r´amci jedn´e lokality, tj. obsluhovan´e jed´ celum ˚ jsou elementy recipe um´ıstˇeny v Recin´ım labcontrollerem. K tˇemto uˇ peset, ktery´ zajiˇstuje splnˇen´ı zm´ınˇenych ´ potˇreb. Pro recipeset lze i definovat ˚ prioritu, kter´a je vzata v potaz pˇri pl´anov´an´ı spouˇstˇen´ı testu. 2.3.4 Job Job je koˇrenovym ´ elementem cel´eho pˇredpisu testu a obsahuje jeden nebo ˚ ze a nev´ıce recipeset. Pouˇz´ıv´a se ke sdruˇzen´ı testu˚ do sady, kter´a muˇ mus´ı obsahovat synchronizovan´e testy. Testy v elementech recipe, kter´e nevyˇzaduj´ı synchronizaci, je vhodn´e um´ıstit do samostatnych elementu˚ ´ recipeset, jinak by instalace testovac´ıch syst´emu˚ a samotn´e testy byly zbyteˇcnˇe zpoˇzdˇeny cˇ ek´an´ım na pˇridˇelen´ı testovac´ıch syst´emu pro vˇsechny recipe, na dokonˇcen´ı cˇ asovˇe n´aroˇcnych instalac´ı na pomalejˇs´ıch syst´e´ ˚ kter´e spolu nesouvis´ı. mech a na skonˇcen´ı testu, Pro job lze specifikovat pomoc´ı XML elementu retention tag, jak dlouho maj´ı byt testu zaznamen´any. D´ale lze nastavit i skupinu ´ vysledky ´ uˇzivatelu˚ Beakeru, kter´e takovy´ job n´aleˇz´ı a jej´ızˇ cˇ lenov´e maj´ı pr´avo job ruˇsit. Velice vhodn´e je i nastavit popis jobu v textu elementu whiteboard.
12
Kapitola 3
Soubory v pˇredpisu testu Soubory, jakoˇzto parametry testu, se v Beakeru v´azˇ ou na element task v pˇredpisu testu, a proto je vhodn´e um´ıstit soubor do tohoto elementu, podobnˇe jako jsou zde um´ıstˇeny textov´e parametry. Bylo by sice moˇzn´e um´ıstit cely´ soubor vˇcetnˇe metadat do textov´e infomace, a tedy i do jiˇz pˇr´ıtomn´eho parametru testu, avˇsak takto rˇ eˇseny´ soubor by byl pro uˇzivatele obt´ızˇ nˇe cˇ itelny, ´ souborov´a data by nebyla logicky jednoznaˇcnˇe oddˇelena od textovych ´ dat a nebyl by plnˇe vyuˇzit potenci´al form´atu XML.
3.1
Data
Jak jiˇz bylo zm´ınˇeno dˇr´ıve, souborov´a data nemohou byt ´ obecnˇe pˇr´ımo ´ um´ıstˇena v XML, a proto je potˇreba data zakodovat tak, aby se jednalo o textov´a data. Pokud uvaˇzujeme o adres´arˇ i jako o souboru a o jeho poda˚ dres´arˇ´ıch jako jeho obsahu, je nutn´e tato data nˇejakym sloˇzit do ´ zpusobem takzvan´eho archivu, indikovat, zˇ e jde o archiv, a pˇri um´ıstˇen´ı na testovac´ı ˚ n´aleˇzitˇe pˇristoupit. syst´em k tˇemto datum 3.1.1 Kodov´ ´ an´ı Data, kter´a nelze pˇr´ımo vloˇzit do XML, je nutn´e pˇrev´est do jin´eho form´atu. ˚ ´ ´ Preferovany´ zpusob v prostˇred´ı internetu je Base64 [18] kodov´ an´ı. Toto ko˚ dov´an´ı je vyuˇz´ıv´ano pro pˇrenos libovolnych dat pomoc´ı bˇezˇ nych znaku, ´ ´ ’ a t´ım tak´e zajiˇst uje bezprobl´emovy´ pˇrenos dat na syst´emech, kter´e by po˚ Tento form´at tenci´alnˇe mohly m´ıt probl´em pˇri zpracov´an´ı urˇcitych ´ znaku. je nav´ıc i d´ıky sv´e zn´amosti a specifick´emu vzhledu na prvn´ı pohled rozpo´ znatelny´ a pro uˇzivatele jednoduˇse dekodovateln y´ (napˇr. pomoc´ı n´astroje Base64 pˇr´ıtomn´eho v kaˇzd´e souˇcasn´e Linuxov´e distribuci). ´ Protoˇze se v pˇr´ıpadˇe Base64 jedn´a o bezztr´atov´e kodov´ an´ı (data jsou po ´ ´ dekodov´ an´ı totoˇzn´a s daty pˇred zakodov´ an´ım) a je znaˇcnˇe omezena abe´ ceda (znaky pˇr´ıpustn´e pro kodov´ an´ı), mus´ı nutnˇe vznikat i reˇzie, a ta tvoˇr´ı ˚ jednu tˇretinu velikosti puvodn´ ıch dat. 13
ˇ 3. S OUBORY V P REDPISU TESTU ´ Pro textov´a data je pouˇzito kodov´ an´ı UTF-8, kter´e je pˇrirozen´e pro XML. Nˇekter´e soubory mohou tak´e obsahovat data, kter´a se opakuj´ı, a je tak moˇzn´e na takov´e soubory aplikovat kompresn´ı algoritmus a data prostorovˇe optimalizovat, coˇz vede k uˇsetˇren´ı m´ısta pˇri ukl´ad´an´ı souborovych ´ dat ’ ˚ pˇri zpracov´an´ı pˇredpisu v syst´emu Beaker, k menˇs´ım pamˇet ovym ´ n´arokum sc´en´arˇ e testu a tak´e k menˇs´ımu mnoˇzstv´ı pˇrenesenych ´ dat po s´ıti pˇri pˇred´av´an´ı sc´en´arˇ e testovac´ımu prostˇred´ı. Bohuˇzel kompresn´ı algoritmy typicky produkuj´ı bin´arn´ı data, kter´a je pot´e nutn´e pˇrev´est do dat textovych. ´ Jsou ovˇsem pˇr´ıpady, kde je tento postup pˇresto vhodny, ´ a to napˇr´ıklad pˇri ˚ ktery´ zarovn´av´a velikost vysledn´ vkl´ad´an´ı archivu souboru, eho souboru ´ ˚ ze tak data o velikosti bytu˚ archivovat do na n´asobek urˇcit´e jednotky, a muˇ ˚ N´asledn´a aplikace komprimaˇcn´ıho algoritmu souboru velikosti kilobytu. ˚ ze velikost dat vr´atit na jednotku bytu. ˚ V takov´em pˇr´ıpadˇe je uspora ´ muˇ ´ vˇetˇs´ı neˇz prostorov´a reˇzie Base64 kodov´ an´ı. ´ Protoˇze lze kodov´ an´ı rˇ etˇezit (napˇr. dˇr´ıve zm´ıneny´ archiv je zkompri´ mov´an a n´aslednˇe zakodov´ an pomoc´ı Base64), je nutn´e indikovat i celou ´ cel muˇ ˚ ze byt posloupnost. Pro tento uˇ ´ pouˇzit z´apis posloupnosti, kde prvky ´ jsou oddˇeleny znakem, ktery´ se nesm´ı nach´azet v n´azvu kodov´ an´ı, napˇr. bˇezˇ nˇe pouˇz´ıvanou cˇ a´ rkou, nebo jinym ´ oddˇelovaˇcem. Jako vhodny´ oddˇeloˇ vaˇc se jev´ı lom´ıtko, kter´e vizu´alnˇe zn´azornuje vrstven´ı.
3.1.2 Typ souboru ˚ souboru pˇriJak jiˇz bylo zm´ınˇeno, v urˇcitych ´ pˇr´ıpadech je nutno k datum ˚ stupovat rozd´ılnym a tento pˇr´ıpad je nutno indikovat. Jedna ´ zpusobem moˇznost, jakou lze tuto informaci podat, je vyuˇzit´ı form´atu MIME [19], ktery´ je k tomu pˇr´ımo urˇceny´ a je tak´e bˇezˇ nˇe v internetovych ´ technologi´ıch pouˇz´ıvany. ´ Pro data, kter´a nepotˇrebuj´ı dalˇs´ı zpracov´an´ı, jsou pouˇzity typy text/plain pro textov´a data a application/octet-stream pro data bin´arn´ı. Pro adres´arˇ se pouˇz´ıv´a vlastn´ı“ typ apllication/x-tar, ktery´ indikuje, zˇ e ” jde o archiv souboru˚ vytvoˇreny´ pomoc´ı n´astroje tar. Tento typ nen´ı souˇca´ st´ı ˚ proto je nutno pouˇz´ıt typ vlastn´ı. Vlastn´ı typy standardn´ı sady MIME typu, jsou v MIME definov´any tak, zˇ e zaˇc´ınaj´ı na x-. Tento zvoleny´ MIME typ pro archiv je bˇezˇ nˇe pouˇz´ıv´an v Unixovych ´ prostˇred´ıch a stal se de facto standardn´ım. Dalˇs´ımi typy souboru by mohly byt ´ napˇr´ıklad i symbolick´e odkazy, kde data jsou cesta na odkazovany´ soubor, nebo URL, kde data mohou byt ´ URL souboru, jehoˇz obsah m´a byt ´ pˇr´ıtomen ve vysledn´ em souboru. ´ 14
ˇ 3. S OUBORY V P REDPISU TESTU
3.2
Um´ıstˇen´ı souboru
Cesta souboru definuje, v jak´em adres´arˇ i m´a byt ´ soubor um´ıstˇen a jak se m´a ˚ ze slouˇzit nejen jako parametr testu, ale tak´e soubor jmenovat. Soubor muˇ k n´ahradˇe souboru pˇr´ıtomn´eho na testovac´ım syst´emu, k n´ahradˇe souboru ´ cely testov´an´ı nov´e verze testu, nebo pro rychlou aktualizaci v testu, pro uˇ ´ bez nutnosti trval´e upravy testu. Moˇznost nahradit soubor v testovac´ım ˇ syst´emu umoˇznuje pˇred´avat konfiguraˇcn´ı soubory pro software, ktery´ m´a byt ´ testov´an, a nen´ı tak nutn´e pˇred´avat vˇsechny podstatn´e volby v tomto souboru obsaˇzen´e jako jednotliv´e textov´e parametry testu. Dalˇs´ı vyhodou ´ ˚ ˚ ze je, zˇ e o takto pˇredan´em souboru nemus´ı test vubec vˇedˇet, a d´ıky tomu muˇ ´ testu kratˇs´ı. byt ´ i kod
3.2.1 Relativn´ı cesta Soubor lze pˇredat s relativn´ı cestou, tj. cestou, kter´a je vztaˇzena k pracovn´ımu adres´arˇ i. Tento adres´arˇ je vytvoˇren testovac´ım prostˇred´ım pˇri pˇr´ıpravˇe spuˇstˇen´ı testu a jsou do nˇej vloˇzeny vˇsechny soubory, kter´e maj´ı cestu relativn´ı (vyjma souboru˚ oznaˇcenych ´ jako aktualizaˇcn´ı). V unixovych ´ syst´emech je takov´a cesta urˇcena tak, zˇ e zaˇc´ın´a libovolnym ´ znakem jinym ´ ˚ neˇz lom´ıtko a stejny´ zpusob je pouˇzit i v tomto rˇ eˇsen´ı.
3.2.2 Absolutn´ı cesta Soubory zaˇc´ınaj´ıc´ı znakem lom´ıtko, tj. soubory s absolutn´ı cestou, jsou um´ıstˇeny do koˇrenov´eho adres´arˇ e pod danou cestou. Koˇrenovym ´ adres´arˇ em je adres´arˇ vytvoˇreny´ testovac´ım prostˇred´ım, takˇze pokud nen´ı soubor oznacˇ en jako aktualizaˇcn´ı, chov´a se absolutn´ı cesta stejnˇe jako relativn´ı.
3.2.3 Aktualizace ˚ ze byt Soubor muˇ ´ XML atributem update oznaˇcen jako aktualizaˇcn´ı, a v tomto pˇr´ıpadˇe se st´av´a pracovn´ım adres´arˇ em adres´arˇ , ve kter´em je um´ıstˇen test, a koˇrenovym ´ adres´arˇ em je koˇrenovy´ adres´arˇ testovac´ıho syst´emu. To znamen´a, zˇ e aktualizaˇcn´ı soubor s relativn´ı cestou je um´ıstˇen do adres´arˇ e ˚ ze tak nahradit soubor testu. Pˇri absolutn´ı cestˇe pak muˇ ˚ ze zase testu, a muˇ soubor aktualizovat syst´emov´e soubory, napˇr. konfiguraˇcn´ı soubory sluzˇ eb. 15
ˇ 3. S OUBORY V P REDPISU TESTU
3.3
Metadata
K souboru jsou mimo jeho n´azvu pˇriˇrazena i dalˇs´ı metadata, jako jsou napˇr´ıklad vlastn´ık souboru a pˇr´ıstupov´a pr´ava. D´ale lze tak´e nastavit pokroˇcil´a opr´avnˇen´ı, pomoc´ı takzvan´eho Access Control List (ACL). 3.3.1 Atributy souboru Atributy souboru lze nastavit XML atributem attrs. Atributy souboru mohou byt ´ vyuˇzity pro testov´an´ı n´astroju˚ – ovˇerˇ uje se u nich, zda pˇristupuj´ı ˚ korektn´ım zpusobem ˚ ˚ k souborum vzhledem k jejich atributum. Atributy ˚ ze byt muˇ ´ nutn´e specifikovat i pro urˇcit´e konfiguraˇcn´ı soubory, u kterych ´ je ´ vyˇzadov´ano, aby mˇely napˇr. specifick´a pˇrıstupov´a pr´ava nebo vlastn´ıka. ˚ Zpusob nastaven´ı atributu˚ pomoc´ı jednoho XML atributu byl zvolen ˚ z duvodu rozˇsiˇritelnosti. Kdyby byl pro kaˇzdy´ atribut samostatny´ XML atribut, bylo by nutn´e pro novˇe pˇridany´ atribut aktualizovat sch´ema datab´aze a zpracov´an´ı pˇredpisu testu na stranˇe serveru. V pˇr´ıpadˇe jednoho XML atributu obsahuj´ıc´ıho vˇsechny atributy souboru je pouze nutn´e aktualizovat testovac´ı prostˇred´ı, aby aplikovalo tyto atributy na soubor. Nav´ıc se atributy souboru liˇs´ı v z´avislosti na operaˇcn´ım syst´emu, a tak pˇri pˇrid´an´ı ´ podpory pro novy´ operaˇcn´ı syst´em nen´ı nutna zˇ a´ dn´a uprava. ˚ ze obsahovat v´ıce ruzn ˚ ych ˚ a tak je poTento XML atribut muˇ ´ atributu, tˇreba definovat oddˇelovaˇc, pomoc´ı kter´eho lze jednoznaˇcnˇe tyto atributy rozdˇelit. Jelikoˇz jde v podstatˇe o seznam, nab´ız´ı se moˇznost z nˇekolika z ob˚ a to cˇ a´ rka, dvojteˇcka a stˇredn´ık. Dvojteˇcka (u SELinux vyklych ´ oddˇelovaˇcu, [20] atributu) i cˇ a´ rka (u pˇr´ıstupovych ´ pr´av) se mohou vyskytnout v atributu souboru, a proto je nejvhodnˇejˇs´ı volbou stˇredn´ık. Jakmile je seznam rozdˇelen na jednotliv´e atributy, mohou byt ´ tyto atributy ve form´atu atribut=hodnota (napˇr. owner=root pro nastaven´ı vlastn´ıka souboru), nebo pˇr´ımo n´azev atributu (napˇr. readonly pro soubor oznaˇceny´ pouze pro cˇ ten´ı). D´ıky t´eto vlastnosti lze pˇred´avat jak atributy s hodnotou, tak atributy pravdivostn´ı (atribut je aplikov´an, nebo pˇr´ıpadnˇe odebr´an). Atributy, kter´e lze nastavit souboru jsou: owner, group, mode a selinux. Vˇsechny tyto atributy jsou s hodnotou. Atributy owner a group urˇcuj´ı vlastn´ıka a skupinu souboru, kde hodnotou je n´azev uˇzivatele resp. skupiny nebo cˇ ´ıslo uˇzivatele resp. skupiny. Atributem mode lze urˇcit pˇr´ıstupov´a pr´ava souboru. Hodnotou pro tento atribut je cˇ ´ıslo zadan´e v osmicˇ kov´e soustavˇe akceptovan´e unixovym ´ n´astrojem chmod [21] a je i stejnym ´ ˚ zusobem interpretov´ano. Posledn´ım atributem je selinux, ktery´ urˇcuje 16
ˇ 3. S OUBORY V P REDPISU TESTU selinux kontext [22] pˇriˇrazeny´ souboru. Kontext je dvojteˇckou oddˇelen´a ´ ˇ Popis technologie SELinux je cˇ tveˇrice, urˇcuj´ıc´ı uˇzivatele, roli, typ a urove n. nad r´amec t´eto pr´ace a v´ıce informac´ı je dostupnych na webu ´ http://www.selinuxproject.org/. 3.3.2 Pokroˇcil´a opr´avnˇen´ı ˚ lze nastavit (pokud to umoˇznuje ˇ Souborum syst´em souboru˚ pouˇzity´ na testovac´ım syst´emu) i pokroˇcil´a opr´avnˇen´ı ve formˇe ACL. Tato technika ˇ ˚ a skupin´am, neˇz jsou umoˇznuje definovat upr´avnˇen´ı i jinym ´ uˇzivatelum ˇ ı nastavit i vychoz´ vlastn´ık a skupina souboru. Jde-li o adres´arˇ , umoˇznuj´ ı ´ opr´avnˇen´ı, se kterymi bude vytvoˇren kaˇzdy´ novy´ soubor v takov´em ad´ ˇ ı nastavit i z´akladn´ı res´arˇ i. Pokroˇcil´a opr´avnˇen´ı ve formˇe ACL umoˇznuj´ pˇr´ıstupov´a pr´ava souboru. Jako form´at pro pokroˇcil´a opr´avnˇen´ı je pouˇzit form´at pouˇz´ıv´an n´astroji getfacl a setfacl [23]. V tomto form´atu je kaˇzdy´ z´aznam na samostatn´em rˇ a´ dku jako dvojteˇckou oddˇelen´a trojice nebo cˇ tveˇrice. Prvn´ım (volitelnym) ´ prvkem je indik´ator, zda jde o vychoz´ ı nastaven´ı, pro soubory vytvoˇren´e ´ v tomto adres´arˇ i. Druhym ´ prvkem je urˇcen´ı, zda jde o uˇzivatele, skupinu, cˇ i masku. Tˇret´ı (volitelny) ´ prvek urˇcuje, o jakou skupinu, nebo o jak´eho uˇzivatele se jedn´a. V pˇr´ıpadˇe masky je tento prvek pr´azdny, ´ pro uˇzivatele jde pˇri pr´azdn´e hodnotˇe o vlastn´ıka souboru, pro skupinu jde o skupinu souboru. Posledn´ım (ˇctvrtym) prvkem jsou pˇr´ıstupov´a pr´ava, urˇcuj´ıc´ı pr´a´ vo ke cˇ ten´ı (r), z´apisu (w) a spuˇstˇen´ı (x) u souboru, nebo v pˇr´ıpadˇe adres´arˇ e pr´avo ke vstupu do adres´arˇ e. Vyhodnocen´ı tˇechto opr´avnˇen´ı nen´ı jednoduch´e, pro zjednoduˇsen´ı se ovˇsem d´a rˇ´ıci, zˇ e opr´avnˇen´ı se vyhodnocuje od obecnˇejˇs´ıch (pr´ava skupiny souboru) po konkr´etn´ı (pr´ava testovan´eho uˇzivatele v ACL), kde konkr´etnˇejˇs´ı opr´avnˇen´ı m´a vˇetˇs´ı v´ahu. Protoˇze je z´apis pokroˇcilych ´ opr´avnˇen´ı na ˚ je vhodnˇejˇs´ı tyto udaje ´ v´ıce rˇ a´ dku, um´ıstit do textu samostatn´eho elementu.
3.4
XML Element file
Textov´e parametry testu jsou reprezentov´any elementy param, kter´e jsou um´ıstˇeny v elementu params uvnitˇr elementu task. Navrhovan´e rˇ eˇsen´ı se rˇ´ıd´ı podobnou hierarchi´ı, a to elementy file um´ıstˇeny v elementu files uvnitˇr elementu task. Element file m´a d´ale atributy: name, update, type, encoding, attrs. Vˇsechny atributy kromˇe name jsou nepovinn´e. Atribut name slouˇz´ı k urˇcen´ı n´azvu a um´ıstˇen´ı souboru. Atribut update slouˇz´ı k indikaci, zda je soubor urˇcen k aktualizaci a m´a byt ´ um´ıstˇen v ad17
ˇ 3. S OUBORY V P REDPISU TESTU res´arˇ i testu, resp. k um´ıstˇen´ı souboru v r´amci cel´e adres´arˇ ov´e struktury testovac´ıho syst´emu. Atribut type urˇcuje, zda maj´ı byt ´ data souboru zpra˚ cov´ana jinym neˇz pˇr´ımym ´ zpusobem ´ um´ıstˇen´ım souboru. Encoding ur˚ ´ cˇ uje, jakym jsou data zakodov´ ana a jakou posloupnost´ı maj´ı byt ´ zpusobem ´ ´ dekodov´ ana. Attrs obsahuje jednotliv´e atributy souboru, pˇrednˇe vlastnictv´ı a pˇr´ıstupov´a pr´ava. Mimo atributy obsahuje element file i elementy data a acl. V elementu data jsou v textu (pˇr´ıpadnˇe uvnitˇr cdata sekce) um´ıstˇena data sou˚ ´ boru. Stejnym jako data (kromˇe kodov´ an´ı) jsou pak uloˇzena po´ zpusobem kroˇcil´a opr´avnˇen´ı v elementu acl.
18
Kapitola 4
´ Upravy v Beakeru ˚ v syst´emu Beaker, bylo nutn´e upraAby bylo moˇzn´e pˇredat soubory testum vit Server, testovac´ı prostˇred´ı a sch´ema, kter´e kontroluje, zda je XML s pˇredpisem testu ve spr´avn´em form´atu.
4.1
XML sch´ema
Pro ovˇerˇ en´ı spr´avnosti struktury dokumentu ve form´atu XML (tedy i pˇredpisu testu v syst´emu Beaker) slouˇz´ı validaˇcn´ı sch´ema. Pro validaci XML dokumentu˚ existuje nˇekolik typu˚ sch´emat. Nejz´akladnˇejˇs´ım a nejˇcastˇeji podporovanym ´ je DTD (Document Type Definition) [24], kter´e slouˇz´ı k ovˇerˇ en´ı ˚ pˇriˇcemˇz XML jazyk tvoˇr´ı podspr´avnosti struktury SGML dokumentu, mnoˇzinu SGML, takˇze lze pouˇz´ıt DTD i pro validaci XML. Aˇckoliv je DTD sˇ iroce podporovan´e, bylo jiˇz pˇrekon´ano, a to napˇr´ıklad sch´ematem RelaxNG [25], kter´e je standardizov´ano mezin´arodnˇe uzn´avanymi organi´ zacemi ISO i IEC. Syst´em Beaker pouˇz´ıv´a pro ovˇerˇ en´ı spr´avnosti struktury pˇredpisu testu v dokumentu XML pr´avˇe RelaxNG. Vyhodou tohoto form´atu sch´ematu ´ je, zˇ e je samo dokumentem XML a je tak´e jednoduˇse srozumiteln´e. RelaxNG je pouˇz´ıv´ano jak Serverem, tak i n´astroji komunikuj´ıc´ımi se Serverem. Sch´ema pro validaci pˇredpisu testu bylo nutn´e upravit tak, aby mohli Server a n´astroje akceptovat pˇredpisy testu obsahuj´ıc´ı soubory. Toto sch´ema ´ se nach´az´ı ve zdrojovych syst´emu Beaker v adres´arˇ i Common/bkr/ ´ kodech common/schema pod jm´enem beaker-job.rng. ˚ ze byt Souˇca´ st´ı RelaxNG sch´ematu muˇ ´ i dokumentace a d´ıky tomu je schopno popisovat nejen strukturu dokumentu, ale i vyznam jednotlivych ´ ´ prvku˚ a lze jej pouˇz´ıt k automatizovan´emu generov´an´ı dokumentace. Soucˇ a´ st´ı provedenych ´ zmˇen je i tato dokumentace ve validaˇcn´ım sch´ematu. Byl zde pˇrid´an do elementu task volitelny´ element files, obsahuj´ıc´ı element ˚ Pro element file jsou zde tak´e uvefile o libovoln´em poˇctu vyskyt u. ´ deny atributy name, update, type, encoding a attrs, pˇriˇcemˇz vˇsechny 19
´ PRAVY V B EAKERU 4. U kromˇe name jsou voliteln´e a u atributu update jsou vyjmenovan´e platn´e hodnoty True a False. Souˇca´ st´ı RelaxNG sch´ema nejsou narozd´ıl od DTD ˚ D´ale jsou pak uvedeny definov´any vychoz´ ı hodnoty volitelnych ´ ´ atributu. volitelny´ element acl a povinny´ element data, kter´e se mohou vyskytovat v libovoln´em poˇrad´ı. Pro elementy je nutno definovat poˇrad´ı, narozd´ıl od ˚ u kterych atributu, ´ na poˇrad´ı nez´aleˇz´ı.
4.2
Server
Pˇredpis testu je zpracov´av´an Serverem a po zpracov´an´ı ukl´ad´a Server vˇsechny prvky pˇredpisu testu do datab´aze, aby bylo moˇzn´e zpˇetnˇe zjistit vˇsechny parametry testu, nebo test opˇetovnˇe spustit za stejnych ´ podm´ınek. 4.2.1 Datab´aze Aby mohly byt ´ soubory z pˇredpisu testu uloˇzeny do datab´aze, je nutn´e pˇrednˇe vytvoˇrit datab´azov´e struktury (tabulky v pˇr´ıpadˇe relaˇcn´ı datab´aze). K tomu je pouˇzita knihovna SQLAlchemy a datab´azov´a struktura je definov´ana ve zdrojov´em souboru Server/bkr/server/model.py, kde jsou definov´any vˇsechny datab´azov´e struktury, kter´e server pouˇz´ıv´a. Pˇredpis testu nen´ı uloˇzen v jedn´e ucelen´e struktuˇre, ale je rozdˇelen na menˇs´ı cˇ a´ sti, kter´e jsou prov´az´any identifik´atory. Kaˇzdy´ job, recipeset, recipe i task m´a pˇridˇeleny´ unik´atn´ı identifik´ator, v relaˇcn´ıch datab´azovych ´ syst´emech oznaˇcovany´ jako prim´arn´ı kl´ıcˇ . Struktura, kter´a je v´az´ana, obsahuje ciz´ı kl´ıcˇ , jehoˇz hodnotou je prim´arn´ı kl´ıcˇ struktury, ke kter´e je v´az´ana. D´ıky tomuto rozdˇelen´ı je moˇzno v datab´azi vytv´arˇ et 1:M vazby, ˚ ze byt kde muˇ ´ jedn´e struktuˇre job pˇriˇrazeno v´ıce struktur recipeset, pro recipeset v´ıce recipe a pro jeden recipe v´ıce struktur task. Protoˇze ˚ ze m´ıt jeden task v´ıce parametru, ˚ je tato vazba pouˇzita i pro parametry muˇ ˚ testu. Stejnym jsou pˇriˇrazeny i soubory ke struktuˇre task ciz´ım ´ zpusobem kl´ıcˇ em recipe task id. Kaˇzd´a struktura v datab´azi by mˇela m´ıt tak´e jednoznaˇcny´ identifik´ator ve formˇe prim´arn´ıho kl´ıcˇ e, a tak m´a i kaˇzdy´ soubor pˇriˇrazeny´ prim´arn´ı kl´ıcˇ id. Mimo tyto organizaˇcn´ı prvky, jsou ve struktuˇre souboru pˇr´ıtomny prv˚ a elementum ˚ pouˇzitym ky n´azvem odpov´ıdaj´ıc´ı atributum ´ u souboru v pˇredpisu testu, a to name, update, type, encoding, attrs, acl a data. Prvky name, type, encoding a attrs jsou typu unicode [26] rˇ etˇezce ˚ Tato velikost byla zvolena podle vzoru oso d´elce maxim´aln´ı 255ti znaku. tatn´ıch datab´azovych ´ struktur syst´emu Beaker, pˇredevˇs´ım pak podle struktury recipe task param, kter´a reprezentuje textov´e parametry testu. Pr20
´ PRAVY V B EAKERU 4. U vek update slouˇz´ı pro uloˇzen´ı pravdivostn´ı hodnoty, a tak je typu boolean. Pro prvek acl je pouˇzit datovy´ typ unicode o maxim´aln´ı d´elce ˚ Vˇetˇs´ı d´elka je zvolena z toho duvodu, ˚ 2048mi znaku. zˇ e se v tomto prvku ˚ ale tak jejich pˇr´ıstupov´a opr´avnˇen´ı. Pˇri povyskytuj´ı nejen n´azvy souboru, ´ uˇzit´ı d´elky 255ti znaku˚ hroz´ı, zˇ e by tato d´elka nemusela pro tyto udaje postaˇcovat. ˚ zitˇejˇs´ı prvek datab´azov´e struktury souboru je prvek Posledn´ı a nejduleˇ ´ data, ktery´ je typu unicode. Velikost tohoto prvku nen´ı na urovni da´ tab´aze nijak omezena, maxim´aln´ı d´elka je rˇ eˇsena na jin´e urovni a nastavuje se v konfiguraˇcn´ım souboru. Pokud by byla maxim´aln´ı d´elka uvedena v definici datab´azov´e struktury souboru, nebylo by moˇzn´e flexibilnˇe nastavovat maxim´aln´ı velikost souboru v z´avislosti na okolnostech. Definovanou datab´azovou strukturu souboru bylo tak´e nutno sv´azat se strukturu task, cˇ ehoˇz je doc´ıleno pomoc´ı nov´e python tˇr´ıdy RecipeTaskFile (podle vzoru RecipeTaskParam), kter´a je pomoc´ı SQLAlchemy funkce mapper sv´az´ana s novˇe vytvoˇrenou datab´azovou strukturou a tak´e je tato tˇr´ıda pomoc´ı t´eto funkce sv´az´ana s tˇr´ıdou RecipeTask reprezentuj´ıc´ı strukturu task. 4.2.2 Zpracov´an´ı XML pˇredpisu Soubor v pˇredpisu sc´en´arˇ e testu je nutno pˇri pˇrijet´ı na Serveru zpracovat a uloˇzit do datab´aze. V souboru Server/bkr/server/jobxml.py je do tˇr´ıdy XMLTask pˇrid´ana metoda iter files (opˇet po vzoru zpracov´an´ı textovych ´ para˚ kter´a je gener´atorem [27], a jej´ımˇz uˇ ´ celem je proj´ıt vˇsechny elemetru), menty file uvnitˇr elementu files a postupnˇe je pˇredat ve formˇe python objektu˚ tˇr´ıdy XMLFile, kter´a dˇed´ı tˇr´ıdu ElementWrapper. Tato novˇe pˇridan´a tˇr´ıda slouˇz´ı k pˇrevodu XML elemetu file na tˇr´ıdu jazyka python ˚ struktury souboru, a to pomoc´ı pˇret´ızˇ en´e a transparentn´ı pˇr´ıstup k prvkum metody getattr , kter´a je zavol´ana, kdyˇz je pˇristupov´ano k prvku tˇr´ıdy, a jej´ızˇ n´avratov´a hodnota je hodnotou poˇzadovan´eho prvku. ˚ poV t´eto tˇr´ıdˇe jsou pˇr´ıtomny i vychoz´ ı hodnoty jednotlivych ´ ´ prvku, kud nejsou v pˇredpisu testu pˇr´ıtomny. Konstruktor t´eto tˇr´ıdy XMLFile je zdˇedˇeny´ z tˇr´ıdy ElementWrapper a argumentem konstruktoru je XML element file reprezentovany´ objektem tˇr´ıdy Element z knihovny xmltramp [28]. V souboru jobxml.py je tak´e rozˇs´ırˇ ena testovac´ı funkce tak, aby jej´ım vystupem byly i soubory pˇriˇrazen´e k testu. ´ Pro zpracov´an´ı struktury recipe (a dalˇs´ıch struktur v n´ı obsaˇzenych) ´ slouˇz´ı v souboru Server/bkr/server/jobs.py metoda 21
´ PRAVY V B EAKERU 4. U handleRecipe tˇr´ıdy Jobs. Do t´eto metody bylo pˇrid´ano i zpracov´an´ı a uloˇzen´ı struktury file. Je zde pouˇzita vyˇ ´ se zm´ınˇen´a metoda iter files. Pˇred vytvoˇren´ım nov´eho z´aznamu v datab´azi pro soubor je zkontrolov´ano, zda velikost souboru nepˇresahuje maxim´aln´ı velikost, urˇcenou v konfiguraˇcn´ım souboru. Pokud nen´ı v konfiguraˇcn´ım souboru zˇ a´ dn´a maxim´aln´ı velikost urˇcena, je nastavena na nulu, cˇ ´ımˇz jsou prakticky zak´az´any soubory jako parametry testu. Toto chov´an´ı bylo zvoleno s ohledem na potenci´aln´ı pamˇet’ovou n´aroˇcnost zpracov´an´ı pˇredpisu testu bez vˇedom´ı uˇzivatelu˚ provozuj´ıc´ıch syst´em Beaker. Pokud je velikost menˇs´ı neˇz maxim´aln´ı, je vytvoˇren objekt RecipeTaskFile a n´aslednˇe uloˇzen v datab´azi pˇriˇrazeny´ k testu, ke kter´emu je parametrem. 4.2.3 Generov´an´ı XML pˇredpisu ˇ Syst´em Beaker umoˇznuje znovu vygenerovat pˇredpis testu jiˇz probˇehl´eho, a tak bylo nutn´e pˇridat i opˇetovn´e generov´an´ı elementu file z datab´aˇ ast t´eto funkcionality je pouˇz´ıv´ana i pro zovych ´ z´aznamu˚ t´eto struktury. C´ pˇred´av´an´ı upraven´eho pˇredpisu testu testovac´ımu prostˇred´ı, kter´e se j´ım ´ n´aslednˇe rˇ´ıd´ı pˇri spouˇstˇen´ı jednotlivych ´ uloh. ˇ Tyto zmˇeny byly provedeny v dˇr´ıve zminovan´ em souboru Server/ bkr/server/model.py a jedn´a se o tˇr´ıdy RecipeTaskFile a RecipeTask a jejich metody to xml, kter´e slouˇz´ı k vytvoˇren´ı XML elementu obsahovˇe shodn´eho s objektem jazyka Python, na kter´em je tato metoda zavol´ana. Ve tˇr´ıdˇe RecipeTask bylo pouze pˇrid´ano vol´an´ı metody to xml, pro kaˇzdy´ objekt tˇr´ıdy RecipeTaskFile pˇriˇrazeny´ testu, a n´asledn´e vloˇzen´ı XML elementu˚ souboru˚ do elementu files, ktery´ je pˇrid´an do elemetu task. V metodˇe to xml tˇr´ıdy RecipeTaskFile je vytvoˇren XML element file a jsou mu nastaveny atributy name, update, type, encoding a attrs. Voliteln´e atributy jsou nastaveny, pouze po˚ kud byly v puvodn´ ım pˇredpisu zad´any, a t´ım je zajiˇstˇena shodnost gene˚ rovan´eho pˇredpisu s pˇredpisem puvodn´ ım. Pro data souboru a pro pokroˇcil´a opr´avnˇen´ı jsou vytvoˇreny elementy data a acl, v kterych ´ je vytvoˇrena sekce CDATA. Do t´eto sekce jsou n´aslednˇe um´ıstˇena data, resp. pokroˇcil´a opr´avnˇen´ı. CDATA sekce slouˇz´ı k oznaˇcen´ı cˇ a´ sti textovych ´ dat, kter´a by jinak nemohla byt ´ pˇr´ımo um´ıstˇena v textu elementu, napˇr. text obsahuj´ıc´ı znaky pouˇz´ıvan´e jazykem XML. Sekce CDATA je pˇri generov´an´ı pro zjednoduˇsen´ı vytvoˇrena vˇzdy, nez´avisle na obsahu dat a na tom, jestli by mohla byt ´ pˇr´ımo pˇr´ıtomna v textovych ´ ˚ datech nebo ne. Pokud nebyla pokroˇcil´a opr´avnˇen´ı nastavena v puvodn´ ım pˇredpisu testu, nen´ı element acl vytvoˇren ani v generovan´em pˇredpisu 22
´ PRAVY V B EAKERU 4. U testu.
4.3
Testovac´ı prostˇred´ı
ˇ ı pˇrijmout, uloˇzit a opˇet vygeneZmˇeny proveden´e na Serveru umoˇznuj´ rovat pˇredpis testu, je ovˇsem tak´e potˇreba, aby tyto soubory v pˇredpisu testu byly pˇred´any testu samotn´emu. K tomu slouˇz´ı testovac´ı prostˇred´ı, kter´e zpracov´av´a jednotliv´e cˇ a´ sti pˇredpisu testu, a podle nich nastavuje promˇenn´e prostˇred´ı, spouˇst´ı testy a sleduje zda nˇejaky´ test nebˇezˇ ´ı delˇs´ı dobu, neˇz o sobˇe deklaruje. Bylo potˇreba pˇridat zpracov´an´ı souboru˚ z pˇredpisu testu a um´ıstit je na syst´em souboru˚ na testovac´ım syst´emu. Tyto zmˇeny byly provedeny v testovac´ım prostˇred´ı Beah [?], kter´e je v syst´emu Beaker pouˇz´ıv´ano. Lze pouˇz´ıt i jin´e testovac´ı prostˇred´ı, ovˇsem v dobˇe implementace nebylo zˇ a´ dn´e takov´e prostˇred´ı veˇrejnˇe k dispozici. Vˇsechny zmˇeny proveden´e v testovac´ım prostˇred´ı Beah byly v souboru backends/beakerlc.py, ktery´ obsahuje ´ pro komunikaci s labcontrollerem. kod 4.3.1 Zpracov´an´ı XML pˇredpisu Testovac´ı prostˇred´ı m´a k dispozici identifik´ator struktury recipe uloˇzen´e v datab´az´ı a podle nˇej je schopen z´ıskat od labcontrolleru pˇredpis testu s pˇridˇelenymi ´ identifik´atory struktur´am job, recipeset, recipe a task. Z tˇechto informac´ı je testovac´ı prostˇred´ı schopno extrahovat z pˇredpisu testu strukturu recipe, kter´a obsahuje struktury task, popisuj´ıc´ı testy ˚ kter´e maj´ı byt vˇcetnˇe parametru, ´ na testovac´ım syst´emu provedeny. Bylo nutn´e upravit zpracov´an´ı elementu task ve tˇr´ıdˇe TaskParser a soubory (vˇcetnˇe jejich metadat) uloˇzit do atributu objektu t´eto tˇr´ıdy. Veˇsker´a data potˇrebn´a pro spuˇstˇen´ı testu jsou pak dostupn´a v n´avratov´e hodnotˇe metody task data, kam bylo potˇreba informace o souborech tak´e pˇridat. ´ cely zpracov´an´ı souboru˚ byla v t´eto tˇr´ıdˇe pˇrid´ana metoda get files, Pro uˇ kter´a pomoc´ı DOM [30] API (aplikaˇcn´ı rozhran´ı) z´ısk´a vˇsechny elementy ´ file pˇriˇrazen´e k pr´avˇe zpracov´avan´e uloze. N´aslednˇe pak z´ısk´a pomoc˚ Pro z´ısk´an´ı nymi funkcemi (tak´e vyuˇz´ıvaj´ıc´ımi DOM) hodnoty atributu. ´ textovych ´ dat z elementu byla potˇreba pˇridat pomocn´a funkce xml cdata, kter´a najde vˇsechny cdata sekce v elementu a spoj´ı je do jednoho textu, kde jsou data spojena znakem nov´eho rˇ a´ dku. N´azev souboru, dalˇs´ı metadata i data jsou uloˇzena ve struktuˇre dict jazyka python, kter´a slouˇz´ı jako asociovan´e pole (kter´e k indexaci prvku˚ ˚ ze pouˇz´ıt libovolny´ objekt nebo ordin´aln´ı typ jazyka python). Seznam muˇ 23
´ PRAVY V B EAKERU 4. U ´ vˇsech souboru˚ pˇriˇrazenych je pak vr´acen touto metodou. Vol´an´ı me´ uloze tody get files bylo pˇrid´ano do metody parse (t´ezˇ e tˇr´ıdy), kde je seznam zpracovanych ´ souboru˚ uloˇzen do atributu objektu (ktery´ je souˇca´ st´ı n´avratov´e hodnoty metody task data). 4.3.2 Um´ıstˇen´ı souboru na testovac´ı syst´em Pˇr´ıprava spuˇstˇen´ı testu je provedena spuˇstˇen´ım funkce vr´acen´e funkc´ı run task (tato technika je pouˇz´ıvan´a knihovnout twisted [31], kterou Beah ´ pouˇz´ıv´a). Tato funkce potom m´a k dispozici udaje vr´acen´e metodou task data tˇr´ıdy TaskParser, jejichˇz souˇca´ st´ı jsou i soubory a jejich metadata. Do funkce run task bylo pˇrid´ano vytvoˇren´ı dvou doˇcasnych ´ adˇ ˚ ´ ˚ res´aru, kde prvn´ı slouˇzı k um´ıstˇen´ı souboru, kter´e jsou parametry testu, a druhy´ adres´arˇ pro soubory, kter´e test aktualizuj´ı. V momentˇe, kdy je tato funkce spouˇstˇena, totiˇz nemus´ı byt ´ test jeˇstˇe nainstalovany, ´ a tak jej ani nen´ı moˇzn´e aktualizovat. Pro soubory ze seznamu z´ıskan´eho metodou get files je zavol´ana ´ novˇe pˇridan´a funkce extract file, jej´ızˇ ulohou je vytvoˇrit soubor na testovac´ım syst´emu s obsahem a metadaty, kter´e jsou mu pˇred´any ve formˇe struktury dict vytvoˇren´e funkc´ı get files. N´avratovou hodnotou funkce extract file je cesta k novˇe vytvoˇren´emu souboru, nebo pr´azdny´ typ, pokud soubor nebyl vytvoˇren, nebo slouˇz´ı k aktualizaci testu. Toto chov´an´ı je vhodn´e pro rozezn´an´ı, zda soubor je parametrem testu, a tud´ızˇ o nˇem m´a byt ´ test informov´an prostˇrednictv´ım promˇennych ´ prostˇred´ı, nebo se jedn´a o soubor, ktery´ aktualizuje test (nen´ı t´ım p´adem parametrem), nebo sou˚ ˚ ze byt bor nebyl z jak´ehokoliv duvodu vytvoˇren (takovy´ soubor tak´e nemuˇ ´ parametrem). Pokud byl takto vytvoˇren alesponˇ jeden soubor, ktery´ je parametrem testu, je nastavena promˇenn´a prostˇred´ı testu TESTFILES, kter´a obsahuje ˚ cˇ a´ rkami oddˇeleny´ seznam takovych ´ souboru. 4.3.3 Vytvoˇren´ı souboru s metadaty Jak bylo vyˇ ´ se zm´ınˇeno, soubory jsou vytvoˇreny na testovac´ım syst´emu po´ moc´ı funkce extract file. Argumenty t´eto funkce jsou: udaje o souboru (vˇcetnˇe jeho obsahu) reprezentovan´e strukturou dict, adres´arˇ kam maj´ı byt ´ um´ıstˇeny soubory, kter´e jsou parametry testu, a adres´arˇ , kde maj´ı byt ´ um´ıstˇeny soubory, kter´e maj´ı slouˇzit k aktualizaci testu. Tato funkce nejdˇr´ıve sestav´ı absolutn´ı cestu k souboru podle n´azvu souboru a informace, zda m´a soubor slouˇzit k aktualizaci. Pokud soubor ne24
´ PRAVY V B EAKERU 4. U slouˇz´ı k aktualizaci a jeho n´azev je absolutn´ı cestou, jsou poˇca´ teˇcn´ı lom´ıtka ˚ ci cestˇe k adres´arˇ i urz cesty odstranˇena, a tato cesta se st´av´a relativn´ı vuˇ ˚ kter´e jsou parametry testu. Jakmile je cel´a cesta cˇ en´emu k uloˇzen´ı souboru, sestavena, jsou vytvoˇreny vˇsechny adres´arˇ e v t´eto cestˇe, kter´e dosud neexistovaly. V n´azvu souboru˚ se tak mohou vyskytnout i adres´arˇ e. ´ Po vytvoˇren´ı cesty k souboru n´asleduje dekodov´ an´ı dat, kter´a maj´ı byt ´ ´ ´ v tomto souboru. Pˇri dekodov´ an´ı je postupnˇe zpracov´av´an udaj encoding, ´ ktery´ urˇcuje postup, jakym ana. Pokud se v seznamu ´ maj´ı byt ´ data dekodov´ ´ vyskytuje nezn´am´e kodov´ an´ı, je dalˇs´ı zpracov´av´an´ı takov´eho souboru zastaveno a je vr´acena pr´azdn´a hodnota indikuj´ıc´ı, zˇ e tento soubor nebylo ´ moˇzn´e vytvoˇrit. Dekodovan´ a data nejsou pˇr´ımo uloˇzena do souboru, ale ˚ ze byt jsou um´ıstˇena v promˇenn´e, protoˇze vysledn y´ soubor muˇ ´ ´ jin´eho typu, ktery´ potˇrebuje dodateˇcn´e zpracov´an´ı. Vyˇcerp´an´ı pamˇeti na testovac´ım syst´emu, by nemˇelo hrozit d´ıky nastaven´ı maxim´aln´ı velikosti na stranˇe Ser´ veru. V navrhovan´e implementaci se zat´ım nach´az´ı pouze moˇznost deko´ dovat data zakodovan´ a do Base64 nebo komprimovan´a pomoc´ı gzip [32]. ´ ˚ Po dekodov´ an´ı dat n´asleduje pˇr´ım´e uloˇzen´ı souboru na syst´em souboru, nebo dodateˇcn´e zpracov´an´ı v z´avislosti na typu souboru. Moment´alnˇe podporovan´e typy jsou text/plain, application/octet-stream, kter´e indikuj´ı, zˇ e soubor nevyˇzaduje dalˇs´ı zpracov´an´ı, a application/x-tar, ktery´ indukuje, zˇ e jde o archiv souboru˚ jehoˇz obsah m´a byt ´ um´ıstˇen do ad˚ ´ res´arˇ e dan´eho n´azvu (puvodnˇ e n´azvu souboru). Stejnˇe jako u kodov´ an´ı, pokud jde o nezn´amy´ typ, je dalˇs´ı zpracov´an´ı zastaveno a je vr´acena pr´azdn´a hodnota. Po dodateˇcn´em zpracov´an´ı souboru, v z´avislosti na typu, je soubor (pˇr´ıpadnˇe adres´arˇ ) pˇr´ıtomen na testovac´ım syst´emu, a je tak moˇzn´e takov´emu souboru (nebo adres´arˇ i) mˇenit jednotliv´e atributy. Jsou tak nejdˇr´ıve aplikov´ana (pokud jsou nastavena) pokroˇcil´a opr´avnˇen´ı a n´aslednˇe atributy souboru. Mezi (v tomto rˇ eˇsen´ı) podporovan´e atributy patˇr´ı: pˇr´ıstupov´a opr´avnˇen´ı, vlastn´ık souboru, skupina souboru, a selinux kontext. Pokud je zad´an nezn´amy´ atribut, nen´ı takovy´ atribut zpracov´an a pokraˇcuje se ˚ v aplikaci dalˇs´ıch atributu. Nakonec, pokud se nejednalo o aktualizaˇcn´ı soubor, vr´at´ı funkce extract file cestu k novˇe vytvoˇren´emu souboru, jinak vr´at´ı pr´azdnou hodnotu. 4.3.4 Aktualizace testu Soubory, kter´e slouˇz´ı k aktualizaci testu, tj. soubory s relativn´ı cestou oznacˇ en´e jako aktualizaˇcn´ı, jsou um´ıstˇeny do doˇcasn´eho adres´arˇ e pˇri pˇr´ıpravˇe 25
´ PRAVY V B EAKERU 4. U prostˇred´ı a je nutn´e je um´ıstit do adres´arˇ e s testem bezprostˇrednˇe pˇred jeho spuˇstˇen´ım. Beah pro spuˇstˇen´ı testu pouˇz´ıv´a shellovy´ script, ktery´ je vytvoˇren pˇred ´ spuˇstˇen´ım testu a obsahuje posledn´ı ukony nutn´e k pˇr´ıpravˇe testu (vˇcetnˇe samotn´e instalace testu) a n´aslednˇe i test spust´ı. Obsah tohoto spouˇstˇec´ıho souboru je generov´an metodou content ve tˇr´ıdˇe RHTSTask. Tuto metodu bylo nutn´e upravit tak, aby po instalaci testu a jeˇstˇe pˇred jeho spuˇstˇen´ım byly do adres´arˇ e testu um´ıstˇeny aktualizaˇcn´ı soubory. Protoˇze byl pˇri um´ıst’ov´an´ı souboru˚ vytvoˇren adres´arˇ urˇceny´ pro soubory, kter´e maj´ı aktualizovat test, a byla tak´e nastavena promˇenn´a prostˇred´ı, obsahuj´ıc´ı cestu k tomuto adres´arˇ i, staˇc´ı pouze pˇresunout vˇsechny soubory z tohoto adres´arˇ e do adres´arˇ e testu. Pˇri pˇresunu jsou zachov´any i dˇr´ıve aplikovan´e atributy, takˇze nen´ı potˇreba dodateˇcnych ´ akc´ı. Po pˇresunu aktualizaˇcn´ıch souboru˚ je tento adres´arˇ odstranˇen.
26
Z´avˇer ˚ a uˇzivatelum ˚ syst´emu Beaker N´avrh rˇ eˇsen´ı jsem prezentoval vyvoj´ ´ arˇ um v e-mailov´e konferenci, kde se prvotnˇe nesetkal s pozitivn´ı odezvou pˇre˚ devˇs´ım z duvodu nepochopen´ı rˇ eˇsen´e problematiky. Vyvoj´ ´ arˇ i mˇeli tak´e ’ obavy z pamˇet ov´e n´aroˇcnosti na stranˇe Serveru, bohuˇzel se vˇsak jedn´a o n´avrhovou chybu samotn´eho syst´emu Beaker a pˇri rˇ eˇsen´ı tohoto probl´emu je tato chyba v´ıce citeln´a. Pˇri implementaci byla (nejenom) z tohoto ˚ ˚ ze duvodu pˇrid´ana volba omezuj´ıc´ı maxim´aln´ı velikost souboru, coˇz muˇ zm´ırnit tento negativn´ı jev. Pˇri n´asledn´e prezentaci cel´eho rˇ eˇsen´ı prostˇrednictv´ım syst´emu bugzilla (https://bugzilla.redhat.com/show_bug.cgi?id=696641) bylo toto rˇ eˇsen´ı pˇrijato s opˇetovnou pozn´amkou o pamˇet’ov´e n´aroˇcnosti a navrhovan´a sada zmˇen je napl´anov´ana k zahrnut´ı v budouc´ı verzi syst´emu Beaker.
27
Literatura [1] CALLAGHAN, Dan et al. Beaker [poˇc´ıtaˇcovy´ program]. Verze 0.15.1 Red Hat Inc. 22. 10. 2013 [cit. dne 2. 1. 2014]. Dostupn´e na: http: //beaker-project.org/releases/beaker-0.15.1.tar.gz. [2] HAROLD, Elliotte Rusty a MEANS, W. Scott. XML v kostce: Pohotov´a referenˇcn´ı pˇr´ıruˇcka. Prvn´ı vyd´an´ı. Praha: Computer Press, 2002. 439 s. ISBN 80-7226-712-4. [3] W3C [Editoˇri BRAY, Tim et al]. CDATA Sections. In Extensible Markup Language (XML) 1.0 [online]. Fifth Edition. W3C, 26. 11. 2008, aktualiˇ ast 2.7. Dostupn´e na: http://www. zace 7. 2. 2013 [cit. dne 2. 1. 2014]. C´ w3.org/TR/2008/REC-xml-20081126/#sec-cdata-sect. [4] YERGEAU, F. UTF-8, a transformation format of ISO 10646 [online]. IETF, listopad 2003 [cit. dne 2. 1. 2014]. Dostupn´e na: http://tools.ietf. org/html/rfc3629. [5] Python [poˇc´ıtaˇcovy´ program]. Verze 2.4.3. Python Software Foundation, 29. 4. 2006 [cit. dne 2. 1. 2014]. Dostupn´e na: http://python.org/ download/. [6] Python v2.6.9 documentation [online]. Verze 2.6.9. Python Software Foundation, c1990-2013, aktualizace 29. 10. 2013 [cit. dne 2. 1. 2014]. Dostupn´e na: http://docs.python.org/2.6/. [7] BAYER, Michael. SQLAlchemy [knihovna jazyka Python]. Verze 0.6.8. Kvˇeten 2012 [cit. dne 2. 1. 2014]. Dostupn´e na: http://www. sqlalchemy.org/download.html. [8] XMLRPC [online]. Scripting News, c2004-2011. [cit. dne 2. 1. 2014]. Dostupn´e na: http://xmlrpc.scripting.com/default.html. [9] Apache: HTTP Server Project [poˇc´ıtaˇcovy´ program]. Verze 2.2.15. Apache Software Foundation, c2014. [cit. dne 2. 1. 2014]. Dostupn´e na: http: //httpd.apache.org/. 28
´ PRAVY V B EAKERU 4. U [10] mod wsgi [poˇc´ıtaˇcovy´ program]. Verze 3.2. DUMPLETON, Graham, duben 2010. [cit. dne 2. 1. 2014]. Dostupn´e na: http: //code.google.com/p/modwsgi/downloads/detail?name= mod_wsgi-3.2.tar.gz&can=1&q=mod_wsgi-3.2. [11] MySQL [poˇc´ıtaˇcovy´ program]. Verze 5.1.71. Oracle Corporation, c19972013. [cit. dne 2. 1. 2014]. Dostupn´e na: http://dev.mysql.com/ downloads/mysql/5.1.html. [12] RPM [poˇc´ıtaˇcovy´ program]. Verze 4.8.0. Red Hat, Inc., 8. 1. 2010. [cit. dne 2. 1. 2014]. Dostupn´e na: http://rpm.org/releases/rpm-4.8. x/rpm-4.8.0.tar.bz2. [13] Kickstart [online]. Fedora Project, aktualizace 16. 12. 2013 [cit. dne 2. 1. 2014]. Dostupn´e na: http://fedoraproject.org/wiki/ Anaconda/Kickstart. [14] CentOS [operaˇcn´ı syst´em]. Verze 6.5. The CentOS Team. 1. 12. 2013. [cit. dne 2. 1. 2014]. Dostupn´e na: http://www.centos.org/modules/ tinycontent/index.php?id=30. [15] Pˇrispˇevatel´e Wikipedie, Fully qualified domain name [online], In Wikipedia, The Free Encyclopedia, c2013, Datum posledn´ı revize 19. 12. 2013 [cit. dne 2. 1. 2014]. Dostupn´e na: http://en.wikipedia.org/w/index.php?title=Fully_ qualified_domain_name&oldid=586812854. [16] DROMS, D. Dynamic Host Configuration Protocol [online]. IETF, duben 1997 [cit. dne 2. 1. 2014]. Dostupn´e na: http://tools.ietf.org/ html/rfc1350. [17] SOLLINS, K. R. THE TFTP PROTOCOL [online]. IETF, cˇ erven 1981 [cit. dne 2. 1. 2014]. Dostipn´e na: http://tools.ietf.org/html/ rfc783. [18] JOSEFSSON, S. The Base16, Base32, and Base64 Data Encodings [online]. IETF, cˇ ervenec 2003 [cit. dne 2. 1. 2014]. Dostupn´e na: http://tools. ietf.org/html/rfc3548. [19] FREED, N., KLENSIN, J. a HANSEN, T. Media Type Specifications and Registration Procedures [online]. IETF, leden 2013 [cit. dne 2. 1. 2014]. Dostupn´e na: http://tools.ietf.org/html/rfc6838. 29
´ PRAVY V B EAKERU 4. U [20] SELinux Project Wiki [online]. MORRIS, James. [cit. dne 2. 1. 2014]. Dostupn´e na: http://selinuxproject.org/page/Main_Page. [21] MEYERING, Jim et al. chmod [poˇc´ıtaˇcovy´ program]. Verze 8.4. Free Software Foundation, 13. 1. 2010 [cit. dne 2. 1. 2014]. Dokumentace na: http://pubs.opengroup.org/onlinepubs/ 009695399/utilities/chmod.html Dostupn´e na: http: //ftp.gnu.org/gnu/coreutils/coreutils-8.4.tar.gz. [22] Security Context. In SELinux Project Wiki [online]. MORRIS, James. [cit. dne 2. 1. 2014]. Dostupn´e na: http://selinuxproject.org/page/ SELinux_contexts. [23] N´astroje acl [poˇc´ıtaˇcovy´ program]. Verze 2.2.49. GRUENBACHER, Andreas, PHILIPS, Brandon, 20. 11. 2009 [cit. dne 2. 1. 2014]. Dostupn´e na: http://git.savannah.gnu.org/cgit/acl.git/snapshot/ acl-2.2.49.tar.gz. [24] Pˇrispˇevatel´e Wikipedie. Document type definition [online], In Wikipedia, The Free Encyclopedia, c2013, Datum posledn´ı revize 26. 12. 2013 [cit. dne 2. 1. 2014]. Dostupn´e na: http://en.wikipedia.org/w/index. php?title=Document_type_definition&oldid=587707718. [25] CLARK, James a MURATA, Makoto [editoˇri]. RELAX NG Specification: Committee Specification 3 December 2001 [online]. The Organization for the Advancement of Structured Information Standards, c2001, aktualizace 3. 12. 2001 [cit. dne 2. 1. 2014]. Dostupn´e na: http://relaxng.org/ spec-20011203.html. [26] Unicode Character Sets. In MySQL Documentation: MySQL Reference Manuals [online]. Verze 5.0. Oracle Corporation, revize 37240 [cit. dne 2. 1. 2014]. Dostupn´e na: http://dev.mysql.com/doc/refman/5. 0/en/charset-unicode-sets.html. [27] Generators. In Python v2.6.9 documentation [online]. Verze 2.6.9. Python Software Foundation, c1990-2013, aktualizace 29. 10. 2013 [cit. dne 2. 1. 2014]. Dostupn´e na: http://docs.python.org/2/tutorial/ classes.html#generators. [28] xmltramp [knihovna jazyka Python]. Verze 2.17. SWARTZ, Aaron. 20. 4. 2006 [cit. dne 2. 1. 2014]. Dostupn´e na: http://www.aaronsw.com/ 2002/xmltramp/. 30
´ PRAVY V B EAKERU 4. U [29] CALLAGHAN, Dan et al. beah [poˇc´ıtaˇcovy´ program]. Verze 0.6.48 Red Hat Inc. 1. 12. 2013 [cit. dne 2. 1. 2014]. Dostupn´e na: http://git.beaker-project.org/cgit/beah/snapshot/ beah-0.6.48-1.tar.gz. [30] APPARAO, Vidur et al. Document Object Model (DOM) Level 1 Specification. Verze 1.0. W3C, 1. 10. 1998 [cit. dne 2. 1. 2014]. Dostupn´e na: http://www.w3.org/TR/REC-DOM-Level-1/. [31] Twisted [knihovna jazyka Python]. Verze 8.2.0. LEFKOWITZ, Glyph. 16. 12. 2008 [cit. dne 2. 1. 2014]. Dostupn´e na: http: //twistedmatrix.com/Releases/Twisted/8.2/Twisted-8. 2.0.tar.bz2. [32] GAILLY, Jean-loup a ADLER, Mark. gzip [poˇc´ıtaˇcovy´ program]. Verze 1.3.12. Free Software Foundation, 13. 4. 2007 [cit. dne 2. 1. 2013]. Dostupn´e na: http://www.gzip.org/.
31
Pˇr´ılohy •
´ beaker.tar.gz – Archiv se zdrojovymy kody syst´emu Beaker s jiˇz zahr´ nutymi zmˇenami, kter´e jsou pˇredmˇetem t´eto pr´ace. ´
•
´ beah.tar.gz – Archiv se zdrojovymi kody testovac´ıho prostˇred´ı Beah ´ s jiˇz zahrnutymi zmˇenami, kter´e jsou pˇredmˇetem t´eto pr´ace. ´
•
´ beaker.patch – Sada zmˇen ve zdrojovych syst´emu Beaker. ´ kodech
•
´ beah.patch – Sada zmˇen ve zdrojovych testovac´ıho prostˇred´ı ´ kodech Beah.
•
job.xml – Pˇredpis testu obsahuj´ıc´ı uk´azky vloˇzenych ´ souboru˚ jako parametru˚ testu.
32