[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