2 * Copyright (C) 2011, 2013, 2014 Red Hat, Inc.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; If not, see
16 * <http://www.gnu.org/licenses/>.
18 * Author: Daniel P. Berrange <berrange@redhat.com>
27 #include "testutils.h"
34 #include "virlockspace.h"
36 #define VIR_FROM_THIS VIR_FROM_RPC
38 VIR_LOG_INIT("tests.lockspacetest");
40 #define LOCKSPACE_DIR abs_builddir "/virlockspacedata"
42 static int testLockSpaceCreate(const void *args ATTRIBUTE_UNUSED)
44 virLockSpacePtr lockspace;
49 if (!(lockspace = virLockSpaceNew(LOCKSPACE_DIR)))
52 if (!virFileIsDir(LOCKSPACE_DIR))
58 virLockSpaceFree(lockspace);
64 static int testLockSpaceResourceLifecycle(const void *args ATTRIBUTE_UNUSED)
66 virLockSpacePtr lockspace;
71 if (!(lockspace = virLockSpaceNew(LOCKSPACE_DIR)))
74 if (!virFileIsDir(LOCKSPACE_DIR))
77 if (virLockSpaceCreateResource(lockspace, "foo") < 0)
80 if (!virFileExists(LOCKSPACE_DIR "/foo"))
83 if (virLockSpaceDeleteResource(lockspace, "foo") < 0)
86 if (virFileExists(LOCKSPACE_DIR "/foo"))
92 virLockSpaceFree(lockspace);
98 static int testLockSpaceResourceLockExcl(const void *args ATTRIBUTE_UNUSED)
100 virLockSpacePtr lockspace;
103 rmdir(LOCKSPACE_DIR);
105 if (!(lockspace = virLockSpaceNew(LOCKSPACE_DIR)))
108 if (!virFileIsDir(LOCKSPACE_DIR))
111 if (virLockSpaceCreateResource(lockspace, "foo") < 0)
114 if (virLockSpaceAcquireResource(lockspace, "foo", geteuid(), 0) < 0)
117 if (!virFileExists(LOCKSPACE_DIR "/foo"))
120 if (virLockSpaceAcquireResource(lockspace, "foo", geteuid(), 0) == 0)
123 if (virLockSpaceDeleteResource(lockspace, "foo") == 0)
126 if (virLockSpaceReleaseResource(lockspace, "foo", geteuid()) < 0)
129 if (virLockSpaceDeleteResource(lockspace, "foo") < 0)
132 if (virFileExists(LOCKSPACE_DIR "/foo"))
138 virLockSpaceFree(lockspace);
139 rmdir(LOCKSPACE_DIR);
144 static int testLockSpaceResourceLockExclAuto(const void *args ATTRIBUTE_UNUSED)
146 virLockSpacePtr lockspace;
149 rmdir(LOCKSPACE_DIR);
151 if (!(lockspace = virLockSpaceNew(LOCKSPACE_DIR)))
154 if (!virFileIsDir(LOCKSPACE_DIR))
157 if (virLockSpaceCreateResource(lockspace, "foo") < 0)
160 if (virLockSpaceAcquireResource(lockspace, "foo", geteuid(),
161 VIR_LOCK_SPACE_ACQUIRE_AUTOCREATE) < 0)
164 if (!virFileExists(LOCKSPACE_DIR "/foo"))
167 if (virLockSpaceReleaseResource(lockspace, "foo", geteuid()) < 0)
170 if (virFileExists(LOCKSPACE_DIR "/foo"))
176 virLockSpaceFree(lockspace);
177 rmdir(LOCKSPACE_DIR);
182 static int testLockSpaceResourceLockShr(const void *args ATTRIBUTE_UNUSED)
184 virLockSpacePtr lockspace;
187 rmdir(LOCKSPACE_DIR);
189 if (!(lockspace = virLockSpaceNew(LOCKSPACE_DIR)))
192 if (!virFileIsDir(LOCKSPACE_DIR))
195 if (virLockSpaceCreateResource(lockspace, "foo") < 0)
198 if (virLockSpaceAcquireResource(lockspace, "foo", geteuid(),
199 VIR_LOCK_SPACE_ACQUIRE_SHARED) < 0)
202 if (virLockSpaceAcquireResource(lockspace, "foo", geteuid(), 0) == 0)
205 if (virLockSpaceAcquireResource(lockspace, "foo", geteuid(),
206 VIR_LOCK_SPACE_ACQUIRE_SHARED) < 0)
209 if (virLockSpaceDeleteResource(lockspace, "foo") == 0)
212 if (virLockSpaceReleaseResource(lockspace, "foo", geteuid()) < 0)
215 if (virLockSpaceDeleteResource(lockspace, "foo") == 0)
218 if (virLockSpaceReleaseResource(lockspace, "foo", geteuid()) < 0)
221 if (virLockSpaceDeleteResource(lockspace, "foo") < 0)
224 if (virFileExists(LOCKSPACE_DIR "/foo"))
230 virLockSpaceFree(lockspace);
231 rmdir(LOCKSPACE_DIR);
236 static int testLockSpaceResourceLockShrAuto(const void *args ATTRIBUTE_UNUSED)
238 virLockSpacePtr lockspace;
241 rmdir(LOCKSPACE_DIR);
243 if (!(lockspace = virLockSpaceNew(LOCKSPACE_DIR)))
246 if (!virFileIsDir(LOCKSPACE_DIR))
249 if (virLockSpaceCreateResource(lockspace, "foo") < 0)
252 if (virLockSpaceAcquireResource(lockspace, "foo", geteuid(),
253 VIR_LOCK_SPACE_ACQUIRE_SHARED |
254 VIR_LOCK_SPACE_ACQUIRE_AUTOCREATE) < 0)
257 if (!virFileExists(LOCKSPACE_DIR "/foo"))
260 if (virLockSpaceAcquireResource(lockspace, "foo", geteuid(),
261 VIR_LOCK_SPACE_ACQUIRE_AUTOCREATE) == 0)
264 if (!virFileExists(LOCKSPACE_DIR "/foo"))
267 if (virLockSpaceAcquireResource(lockspace, "foo", geteuid(),
268 VIR_LOCK_SPACE_ACQUIRE_SHARED |
269 VIR_LOCK_SPACE_ACQUIRE_AUTOCREATE) < 0)
272 if (!virFileExists(LOCKSPACE_DIR "/foo"))
275 if (virLockSpaceReleaseResource(lockspace, "foo", geteuid()) < 0)
278 if (!virFileExists(LOCKSPACE_DIR "/foo"))
281 if (virLockSpaceReleaseResource(lockspace, "foo", geteuid()) < 0)
284 if (virFileExists(LOCKSPACE_DIR "/foo"))
290 virLockSpaceFree(lockspace);
291 rmdir(LOCKSPACE_DIR);
296 static int testLockSpaceResourceLockPath(const void *args ATTRIBUTE_UNUSED)
298 virLockSpacePtr lockspace;
301 rmdir(LOCKSPACE_DIR);
303 if (!(lockspace = virLockSpaceNew(NULL)))
306 if (mkdir(LOCKSPACE_DIR, 0700) < 0)
309 if (virLockSpaceCreateResource(lockspace, LOCKSPACE_DIR "/foo") < 0)
312 if (virLockSpaceAcquireResource(lockspace, LOCKSPACE_DIR "/foo", geteuid(), 0) < 0)
315 if (!virFileExists(LOCKSPACE_DIR "/foo"))
318 if (virLockSpaceAcquireResource(lockspace, LOCKSPACE_DIR "/foo", geteuid(), 0) == 0)
321 if (virLockSpaceDeleteResource(lockspace, LOCKSPACE_DIR "/foo") == 0)
324 if (virLockSpaceReleaseResource(lockspace, LOCKSPACE_DIR "/foo", geteuid()) < 0)
327 if (virLockSpaceDeleteResource(lockspace, LOCKSPACE_DIR "/foo") < 0)
330 if (virFileExists(LOCKSPACE_DIR "/foo"))
336 virLockSpaceFree(lockspace);
337 rmdir(LOCKSPACE_DIR);
348 signal(SIGPIPE, SIG_IGN);
350 if (virtTestRun("Lockspace creation", testLockSpaceCreate, NULL) < 0)
353 if (virtTestRun("Lockspace res lifecycle", testLockSpaceResourceLifecycle, NULL) < 0)
356 if (virtTestRun("Lockspace res lock excl", testLockSpaceResourceLockExcl, NULL) < 0)
359 if (virtTestRun("Lockspace res lock shr", testLockSpaceResourceLockShr, NULL) < 0)
362 if (virtTestRun("Lockspace res lock excl auto", testLockSpaceResourceLockExclAuto, NULL) < 0)
365 if (virtTestRun("Lockspace res lock shr auto", testLockSpaceResourceLockShrAuto, NULL) < 0)
368 if (virtTestRun("Lockspace res full path", testLockSpaceResourceLockPath, NULL) < 0)
371 return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
374 VIRT_TEST_MAIN(mymain)