Teste Tema Asistenți

În această pagină se prezintă ce anume și cum se testează

Întoarce-mă la pagina temei

Testul 0

  • Se verifică dacă guardianul poate fi instanțiat de mai multe ori, din două directoare diferite

Testul 1

  • Este foarte simplu și testează faptul că guardianul redirectează ieșirile standard (STDOUT și STDERR) ale procesului copil
  • De asemenea, se afișează parametri cu care a fost apelat
$ ./child1 1 2 3
[STDOUT] Salut, sunt child1!
[STDERR] Salut, sunt child1!
Numar de parametri 4
	Param 0 = ./child1
	Param 1 = 1
	Param 2 = 2
	Param 3 = 3
Work loop

Testul 2

  • Folosește memoria partajată pentru a vedea dacă guardianul respawnează procesul copil, atunci când acesta se termină. Procesul copil ține o valoare, în memoria partajată, pe care o afișează, o incrementează și o resetează dacă depăsește o anumită valoare.
$ for i in `seq 1 10`; do ./child2; done;
Am citit din memoria partajata: 0
Am citit din memoria partajata: 1
Am citit din memoria partajata: 2
Am citit din memoria partajata: 3
Am citit din memoria partajata: 4
Work loop

Testul 3

  • Folosește thread-uri care fac diverse operații checkpointate. Astfel, când procesul copil cade (un thread apelează aleator exit()), guardianul îl respawnează și își continuă lucrul de la ultimul checkpoint.
  • În acest test se încearcă citirea unui octet de la stdin, dacă reusește atunci se raportează o eroare.
$ ./child3
[PANIC] Somebody called exit()
$ ./child3
[PANIC] Somebody called exit()
$ ./child3
Value = 10
Work loop

Testul 4

  • Încarcă daemonul/programul și interacționează cu el prin semnale/evenimente
    • Linux
    • SIGINT ⇒ daemonul închide procesul copil și se oprește
    • SIGCONT ⇒ daemonul restartează procesul copil
    • SIGSEGV ⇒ daemonul ingoră semnalul
    • Windows
    • CTRL + C = > guardianul închide procesul copil și se oprește
    • CTRL + BREAK = > guardianul reporneste procesul copil
$ ./child4
Child4 started execution!
Work loop

Testul 5

  • Verifică dacă guardianul raportează inexistență programului ce se vrea lansat
$ ./guardian un_binar_care_nu_există
The child program does not exist!

Completare Windows

Pe Windows, checkerul nu mai redirectează ieșirile standard ale guardianului in fisiere

  • Guardianul raportează o eroare atunci când
  • Este lansat fără argumente în linia de comandă
  • O altă instanță rulează
  • Programul copil nu există

Recomand utilizarea acestei funcții de raportare:

static void report_error(char *filename, char *info)
{
	DWORD written = -1;

	err = CreateFile(
		filename,
		FILE_WRITE_DATA,
		FILE_SHARE_WRITE,
		NULL,
		OPEN_ALWAYS,
		FILE_ATTRIBUTE_NORMAL,
		NULL);

	CHECK(err, !=, INVALID_HANDLE_VALUE, "CreateFile()", -1);
	CHECK(WriteFile(err, info, strlen(info), &written, NULL), !=, 0, "WriteFile()", -1);
	CHECK(CloseHandle(err), !=, 0, "CloseHandle()", -1);
}

#define RUNNING                 "Guardian is already running\r\n"
#define NOT_EXIST               "The child program does not exist!\r\n"
report_error("__child_does_not_exist", NOT_EXIST);
report_error("__guardian_already_running", RUNNING);
so/teme/tema-asist/teste.txt · Last modified: 2013/01/31 21:57 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0