Update Red Hat Copyright Notices
[nbdkit.git] / tests / test-tmpdisk.c
blob5230c02e95e6613e1d8c2b9a278836479028eeba
1 /* nbdkit
2 * Copyright Red Hat
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * * Neither the name of Red Hat nor the names of its contributors may be
16 * used to endorse or promote products derived from this software without
17 * specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
22 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
27 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
29 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
33 #include <config.h>
35 #include <stdio.h>
36 #include <stdlib.h>
37 #include <stdbool.h>
38 #include <stdint.h>
39 #include <inttypes.h>
40 #include <string.h>
41 #include <unistd.h>
43 #include <guestfs.h>
45 #include "test.h"
47 int
48 main (int argc, char *argv[])
50 guestfs_h *g1, *g2;
51 int r;
52 char *label;
54 /* Start nbdkit. */
55 if (test_start_nbdkit ("tmpdisk", "1G", "label=TEST", NULL) == -1)
56 exit (EXIT_FAILURE);
58 /* We can open multiple connections and they should see different
59 * disks.
61 g1 = guestfs_create ();
62 if (g1 == NULL) {
63 perror ("guestfs_create");
64 exit (EXIT_FAILURE);
66 guestfs_set_identifier (g1, "g1");
68 r = guestfs_add_drive_opts (g1, "",
69 GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
70 GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "nbd",
71 GUESTFS_ADD_DRIVE_OPTS_SERVER, server,
72 -1);
73 if (r == -1)
74 exit (EXIT_FAILURE);
76 if (guestfs_launch (g1) == -1)
77 exit (EXIT_FAILURE);
79 g2 = guestfs_create ();
80 if (g2 == NULL) {
81 perror ("guestfs_create");
82 exit (EXIT_FAILURE);
84 guestfs_set_identifier (g2, "g2");
86 r = guestfs_add_drive_opts (g2, "",
87 GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
88 GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "nbd",
89 GUESTFS_ADD_DRIVE_OPTS_SERVER, server,
90 -1);
91 if (r == -1)
92 exit (EXIT_FAILURE);
94 if (guestfs_launch (g2) == -1)
95 exit (EXIT_FAILURE);
97 /* But they should both see the same filesystem label. */
98 label = guestfs_vfs_label (g1, "/dev/sda");
99 if (!label)
100 exit (EXIT_FAILURE);
101 if (strcmp (label, "TEST") != 0) {
102 fprintf (stderr, "%s FAILED: unexpected label: %s\n",
103 program_name, label);
104 exit (EXIT_FAILURE);
106 free (label);
108 label = guestfs_vfs_label (g2, "/dev/sda");
109 if (!label)
110 exit (EXIT_FAILURE);
111 if (strcmp (label, "TEST") != 0) {
112 fprintf (stderr, "%s FAILED: unexpected label: %s\n",
113 program_name, label);
114 exit (EXIT_FAILURE);
116 free (label);
118 /* Mount both disks. */
119 if (guestfs_mount (g1, "/dev/sda", "/") == -1)
120 exit (EXIT_FAILURE);
121 if (guestfs_mount (g2, "/dev/sda", "/") == -1)
122 exit (EXIT_FAILURE);
124 /* Create some files and directories on each. */
125 if (guestfs_mkdir (g1, "/test1") == -1)
126 exit (EXIT_FAILURE);
127 if (guestfs_touch (g1, "/test1/file1") == -1)
128 exit (EXIT_FAILURE);
129 if (guestfs_mkdir (g2, "/test2") == -1)
130 exit (EXIT_FAILURE);
131 if (guestfs_touch (g2, "/test2/file2") == -1)
132 exit (EXIT_FAILURE);
134 if (guestfs_sync (g1) == -1 || guestfs_sync (g2) == -1)
135 exit (EXIT_FAILURE);
137 if (guestfs_is_file (g1, "/test1/file1") != 1) {
138 fprintf (stderr, "%s FAILED: /test1/file1 is not a file\n",
139 program_name);
140 exit (EXIT_FAILURE);
142 if (guestfs_is_file (g2, "/test2/file2") != 1) {
143 fprintf (stderr, "%s FAILED: /test2/file2 is not a file\n",
144 program_name);
145 exit (EXIT_FAILURE);
148 /* Shut down the connection. */
149 if (guestfs_shutdown (g1) == -1)
150 exit (EXIT_FAILURE);
151 if (guestfs_shutdown (g2) == -1)
152 exit (EXIT_FAILURE);
153 guestfs_close (g1);
154 guestfs_close (g2);
156 exit (EXIT_SUCCESS);