1 #include <lfs.h>
2
3 #include <assert.h>
4 #include <pthread.h>
5 #include <string.h>
6 #include <errno.h>
7
8 #include <nbdsrv.h>
9 #include "macro.h"
10 #include "backend.h"
11
12 int g_fd;
13 int g_off;
14 int g_len;
15
punch_hole(int fd,off_t off,off_t len)16 void punch_hole(int fd, off_t off, off_t len) {
17 g_fd = fd;
18 g_off = off;
19 g_len = len;
20 }
21
main(void)22 int main(void) {
23 struct nbd_request req;
24 SERVER srv;
25 CLIENT cl;
26 FILE_INFO export;
27 int spair[2];
28
29 req.magic = NBD_REQUEST_MAGIC;
30 req.type = NBD_CMD_TRIM;
31 req.from = 0;
32 req.len = 1024*1024;
33
34 srv.exportname = "dummy";
35 srv.expected_size = 1024*1024*1024;
36 srv.listenaddr = "0.0.0.0";
37 srv.authname = NULL;
38 srv.flags = 0;
39 srv.virtstyle = VIRT_NONE;
40 srv.cidrlen = 0;
41 srv.prerun = NULL;
42 srv.postrun = NULL;
43 srv.servename = "dummy";
44 srv.transactionlog = NULL;
45 srv.cowdir = NULL;
46
47 export.fhandle = 123;
48 export.startoff = 0;
49
50 cl.exportsize = 1024*1024*1024;
51 cl.clientname = "127.0.0.1";
52 cl.exportname = "dummy";
53 cl.export = g_array_new(TRUE, TRUE, sizeof(FILE_INFO));
54 g_array_append_val(cl.export, export);
55 socketpair(AF_UNIX, SOCK_STREAM, AF_UNIX, spair);
56 cl.net = spair[0];
57 cl.server = &srv;
58 cl.difffilename = NULL;
59 cl.difffile = 0;
60 cl.difffilelen = 0;
61 cl.difmap = NULL;
62 cl.transactionlogfd = -1;
63 cl.clientfeats = 0;
64 pthread_mutex_init(&cl.lock, NULL);
65
66 /* phew. Now test: */
67
68 exptrim(&req, &cl);
69 count_assert(g_fd == 123);
70 count_assert(g_off == 0);
71 count_assert(g_len == 1024*1024);
72
73 return 0;
74 }
75