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