Whamcloud - gitweb
b59cc6c53d01adb6d9765eec8f2a02d37d8fe460
[fs/lustre-release.git] / lustre / tests / utime.c
1 /*
2  * Simple test for validating mtime on a file create and set via utime.
3  */
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <sys/types.h>
7 #include <sys/stat.h>
8 #include <fcntl.h>
9 #include <unistd.h>
10 #include <time.h>
11 #include <string.h>
12 #include <utime.h>
13
14 void usage(char *prog)
15 {
16         fprintf(stderr, "usage: %s <filename>\n", prog);
17         exit(1);
18 }
19
20 int main(int argc, char *argv[])
21 {
22         long before_mknod, after_mknod;
23         long before_utime, after_utime;
24         struct stat st;
25         int rc;
26
27         if (argc != 2)
28                 usage(argv[0]);
29
30         before_mknod = time(0);
31         rc = mknod(argv[1], 0700, S_IFREG);
32         after_mknod = time(0);
33         if (rc) {
34                 fprintf(stderr, "%s: mknod(%s) failed: rc %d: %s\n",
35                         argv[0], argv[1], rc, strerror(rc));
36                 return 2;
37         }
38
39         rc = stat(argv[1], &st);
40         if (rc) {
41                 fprintf(stderr, "%s: stat(%s) failed: rc %d: %s\n",
42                         argv[0], argv[1], rc, strerror(rc));
43                 return 3;
44         }
45
46         if (st.st_mtime < before_mknod || st.st_mtime > after_mknod) {
47                 fprintf(stderr, "%s: bad mknod times %lu <= %lu <= %lu false\n",
48                         argv[0], before_mknod, st.st_mtime, after_mknod);
49                 return 4;
50         }
51
52         printf("%s: good mknod times %lu <= %lu <= %lu\n",
53                argv[0], before_mknod, st.st_mtime, after_mknod);
54
55         sleep(5);
56
57         before_utime = time(0);
58         rc = utime(argv[0], NULL);
59         after_utime = time(0);
60         if (rc) {
61                 fprintf(stderr, "%s: stat(%s) failed: rc %d: %s\n",
62                         argv[0], argv[1], rc, strerror(rc));
63                 return 5;
64         }
65
66         rc = stat(argv[1], &st);
67         if (rc) {
68                 fprintf(stderr, "%s: second stat(%s) failed: rc %d: %s\n",
69                         argv[0], argv[1], rc, strerror(rc));
70                 return 6;
71         }
72
73         if (st.st_mtime < before_utime || st.st_mtime > after_utime) {
74                 fprintf(stderr, "%s: bad utime times %lu <= %lu <= %lu false\n",
75                         argv[0], before_utime, st.st_mtime, after_utime);
76                 return 7;
77         }
78
79         printf("%s: good utime times %lu <= %lu <= %lu\n",
80                argv[0], before_mknod, st.st_mtime, after_mknod);
81
82         return 0;
83 }