[pso] [tema1][lin] Unit-testing

Cristian Sandescu cristi at 1p.ro
Wed Mar 11 01:24:20 EET 2009


Salutare,

Ca sa testez functionalitati punctuale pe parcusul dezvoltarii, eu mi-am
creat doua mici programele.
Desi testele oficiale nu sunt inca publicate, motivul real este ca am vrut
sa fac unit-testing, pe anumite capabilitati, intr-un mod cat mai controlat
(imi era putin frica de stress-testing-ul din testele oficiale).

Primul program (test1) primeste trei parametrii in linie de comanda: cmd,
syscall, pid si nu face decat sa apeleze my_syscall.
CMD ia de obicei valorile din Sci_lin.h (0-3), syscall poate lua valori din
entry.S (eu am folosit des 4 - sys_write si 5 - un read, pentru ca sunt
multe procese care le apeleaza), iar pid e clar. (cele mai dese ./test1 0 4
0, ./test1 2 4 -3, etc)

Al doilea foloseste punctual un syscall clasic (write, read) intr-o bucla cu
un sleep, ca sa vad ca prind ce trebuie.
Pe mine m-a ajutat aceasta abordare, motiv pentru care m-am gandit sa o
impartasesc aici.

Toate bune,
Cristi

[test1.c]
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#define __NR_my_syscall 0

int main (int argc, char *argv[]){
        long _res;
        int _cmd, _syscall, _pid;
        if (argc!=4){
	        printf("\nusage: ./test1 cmd syscall pid\n\n");
	        return -1;
        }
        _cmd=atoi(argv[1]);
        _syscall=atoi(argv[2]);
        _pid=atoi(argv[3]);
        //printf("cmd=%d, syscall=%d, pid=%d\n",_cmd, _syscall, _pid);
       	asm("int $0x80"
            : "=a" ( _res)
            : "0" (__NR_my_syscall), "b" ((int)_cmd),
              "c" ((int)_syscall), "d" ((int)_pid));
        printf("Rezultatul este %ld\n",_res);
        if (_res!=0)
        	printf("Eroare %s\n",strerror(-_res));
        return 0;
}

[test2.c]
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>

int main(){
	char buf='a';
	printf("Test 2 are pid-ul %d\n",getpid());
	while (1){
		write(STDOUT_FILENO, &buf, 1);
		sleep(3);
	}
}



More information about the pso mailing list