This is my memo about writing autotest test case.
At least, it requires control file, python file and test code.
This is a test code directories.
[masami@moon]~/autotest-0.12.0/client/tests/pwrite_test% ls . src
.:
. .. control pwrite_test.py pwrite_test.py.bk pwrite_test.pyc src
src:
. .. Makefile pwrite_test.c
This is a control file. It defines some information e.g. test type, author and so forth.
- AUTHOR = "your name <your email="" address="">"
- EXPERIMENTAL = 'True'
-
- NAME = "pwrite_test"
- TEST_TYPE = "client"
- TEST_CLASS = "General"
- TEST_CATEGORY = "Functional"
- TIME = "SHORT"
- DOC =
-
-
-
- job.run_test('pwrite_test')
- </your>
AUTHOR = "your name "
EXPERIMENTAL = 'True' # Not really, but this is only for testing autotest...
# not testing _with_ autotest.
NAME = "pwrite_test"
TEST_TYPE = "client"
TEST_CLASS = "General"
TEST_CATEGORY = "Functional"
TIME = "SHORT"
DOC = """\
Test program for pwrite(2) and pread(2).
"""
job.run_test('pwrite_test')
job.run_test() calls your python script which implements test.test class.
This is a python code. this file name is pwrite_test.py.
In the setup(), it changes current directory from somewhere to "src" directory. src directory contains your my test code then call make command to create test program.
- import os
- from autotest_lib.client.bin import test, utils
-
-
- class pwrite_test(test.test):
-
-
-
- version = 1
- preserve_srcdir = True
-
- def setup(self):
- os.chdir(self.srcdir)
- utils.system('make')
- utils.system('make create_test_file')
-
- def initialize(self):
- self.job.require_gcc()
- self.results = None
-
-
- def run_once(self, num_groups=90):
- pwrite_test_bin = os.path.join(self.srcdir, 'pwrite_test')
- cmd = '%s' % (pwrite_test_bin)
- self.results = utils.system(cmd)
-
- def cleanup(self):
- os.chdir(self.srcdir)
- utils.system('make clean')
- os.remove(os.path.join(self.srcdir, '.version'))
import os
from autotest_lib.client.bin import test, utils
class pwrite_test(test.test):
"""
@author: your name (your email address)
"""
version = 1
preserve_srcdir = True
def setup(self):
os.chdir(self.srcdir)
utils.system('make')
utils.system('make create_test_file')
def initialize(self):
self.job.require_gcc()
self.results = None
def run_once(self, num_groups=90):
pwrite_test_bin = os.path.join(self.srcdir, 'pwrite_test')
cmd = '%s' % (pwrite_test_bin)
self.results = utils.system(cmd)
def cleanup(self):
os.chdir(self.srcdir)
utils.system('make clean')
os.remove(os.path.join(self.srcdir, '.version'))
This is a test code.
- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <sys stat.h="">
- #include <sys types.h="">
- #include <errno.h>
-
- static const char filename[] = "/home/masami/autotest-0.12.0/client/tests/pwrite_test/src/test.txt";
- static const int offset = 6;
- static const int read_byte = 5;
-
- int main(int argc, char **argv)
- {
- char buf[16];
- int fd, ret;
- off_t off;
-
- fd = open(filename, O_RDWR);
- if (fd < 0) {
- printf("file open error\n");
- return -1;
- }
-
- errno = 0;
-
-
- pread(fd, &buf, read_byte, offset);
- if (errno) {
- printf("pread faild\n");
- return -1;
- }
-
-
- if (strcmp(buf, "world")) {
- printf("read buf isn't \"world\"\n");
- return -1;
- }
-
- off = lseek(fd, 0, SEEK_CUR);
-
- if (off) {
- printf("cursor isn't 0\n");
- return -1;
- }
-
- strcpy(buf, "WORLD");
- errno = 0;
- ret = pwrite(fd, buf, strlen(buf), 6);
- if (errno) {
- printf("pwrite faild\n");
- return -1;
- }
-
- pread(fd, &buf, read_byte, offset);
-
- if (strcmp(buf, "WORLD")) {
- printf("read buf isn't \"world\"\n");
- return -1;
- }
-
- off = lseek(fd, 0, SEEK_CUR);
-
- if (off) {
- printf("cursor isn't 0\n");
- return -1;
- }
-
- close(fd);
-
- printf("Done.\n");
-
- return 0;
- }
- </errno.h></sys></sys></fcntl.h></unistd.h></string.h></stdio.h>
#include
#include
#include
#include
#include
#include
#include
static const char filename[] = "/home/masami/autotest-0.12.0/client/tests/pwrite_test/src/test.txt";
static const int offset = 6;
static const int read_byte = 5;
int main(int argc, char **argv)
{
char buf[16];
int fd, ret;
off_t off;
fd = open(filename, O_RDWR);
if (fd < 0) {
printf("file open error\n");
return -1;
}
errno = 0;
// Read data from file.
pread(fd, &buf, read_byte, offset);
if (errno) {
printf("pread faild\n");
return -1;
}
// Read data shuold be "world".
if (strcmp(buf, "world")) {
printf("read buf isn't \"world\"\n");
return -1;
}
off = lseek(fd, 0, SEEK_CUR);
// cursor should be zero.
if (off) {
printf("cursor isn't 0\n");
return -1;
}
strcpy(buf, "WORLD");
errno = 0;
ret = pwrite(fd, buf, strlen(buf), 6);
if (errno) {
printf("pwrite faild\n");
return -1;
}
pread(fd, &buf, read_byte, offset);
// Read data shuold be "world".
if (strcmp(buf, "WORLD")) {
printf("read buf isn't \"world\"\n");
return -1;
}
off = lseek(fd, 0, SEEK_CUR);
// cursor should be zero.
if (off) {
printf("cursor isn't 0\n");
return -1;
}
close(fd);
printf("Done.\n");
return 0;
}
Then, you can run your test code.
[masami@moon]~/autotest-0.12.0/client% sudo ./bin/autotest tests/pwrite_test/control
23:35:06 INFO | Writing results to /home/masami/autotest-0.12.0/client/results/default
23:35:06 INFO | Initializing the state engine
23:35:06 INFO | Symlinking init scripts
23:35:08 INFO | START ---- ---- timestamp=1277735708 localtime=Jun 28 23:35:08
23:35:08 INFO | START pwrite_test pwrite_test timestamp=1277735708 localtime=Jun 28 23:35:08
23:35:10 INFO | Test started. Number of iterations: 1
23:35:10 INFO | Executing iteration 1 of 1
23:35:10 INFO | Dropping caches between iterations
23:35:10 INFO | Test finished after 1 iterations.
23:35:12 INFO | GOOD pwrite_test pwrite_test timestamp=1277735712 localtime=Jun 28 23:35:12 completed successfully
23:35:12 INFO | END GOOD pwrite_test pwrite_test timestamp=1277735712 localtime=Jun 28 23:35:12
23:35:12 INFO | END GOOD ---- ---- timestamp=1277735712 localtime=Jun 28 23:35:12