~ubuntu-branches/ubuntu/wily/nbdkit/wily

« back to all changes in this revision

Viewing changes to tests/test-lang-plugins.c

  • Committer: Package Import Robot
  • Author(s): Hilko Bengen
  • Date: 2014-02-17 19:31:33 UTC
  • mfrom: (1.1.4)
  • Revision ID: package-import@ubuntu.com-20140217193133-xvmd9uadu73nslod
Tags: 1.1.6-1
* New upstream version
* Split package
* Cherry-picked post-1.1.6-bugfix from upstream git

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* nbdkit
 
2
 * Copyright (C) 2013-2014 Red Hat Inc.
 
3
 * All rights reserved.
 
4
 *
 
5
 * Redistribution and use in source and binary forms, with or without
 
6
 * modification, are permitted provided that the following conditions are
 
7
 * met:
 
8
 *
 
9
 * * Redistributions of source code must retain the above copyright
 
10
 * notice, this list of conditions and the following disclaimer.
 
11
 *
 
12
 * * Redistributions in binary form must reproduce the above copyright
 
13
 * notice, this list of conditions and the following disclaimer in the
 
14
 * documentation and/or other materials provided with the distribution.
 
15
 *
 
16
 * * Neither the name of Red Hat nor the names of its contributors may be
 
17
 * used to endorse or promote products derived from this software without
 
18
 * specific prior written permission.
 
19
 *
 
20
 * THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND
 
21
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 
22
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 
23
 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR
 
24
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 
25
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 
26
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 
27
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 
28
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 
29
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 
30
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 
31
 * SUCH DAMAGE.
 
32
 */
 
33
 
 
34
#include <config.h>
 
35
 
 
36
#include <stdio.h>
 
37
#include <stdlib.h>
 
38
#include <stdint.h>
 
39
#include <inttypes.h>
 
40
#include <string.h>
 
41
#include <unistd.h>
 
42
 
 
43
#include <guestfs.h>
 
44
 
 
45
#include "test.h"
 
46
 
 
47
int
 
48
main (int argc, char *argv[])
 
49
{
 
50
  guestfs_h *g;
 
51
  int r;
 
52
  char *data;
 
53
 
 
54
  if (test_start_nbdkit (NBDKIT_PLUGIN (LANG), "script=" SCRIPT, NULL) == -1)
 
55
    exit (EXIT_FAILURE);
 
56
 
 
57
  g = guestfs_create ();
 
58
  if (g == NULL) {
 
59
    perror ("guestfs_create");
 
60
    exit (EXIT_FAILURE);
 
61
  }
 
62
 
 
63
  r = guestfs_add_drive_opts (g, "",
 
64
                              GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw",
 
65
                              GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, "nbd",
 
66
                              GUESTFS_ADD_DRIVE_OPTS_SERVER, server,
 
67
                              -1);
 
68
  if (r == -1)
 
69
    exit (EXIT_FAILURE);
 
70
 
 
71
  if (guestfs_launch (g) == -1)
 
72
    exit (EXIT_FAILURE);
 
73
 
 
74
  /* The test script creates an empty disk.  We format it, write some
 
75
   * data, and check we can read it back.
 
76
   */
 
77
 
 
78
  if (guestfs_part_disk (g, "/dev/sda", "mbr") == -1)
 
79
    exit (EXIT_FAILURE);
 
80
  if (guestfs_mkfs (g, "ext4", "/dev/sda1") == -1)
 
81
    exit (EXIT_FAILURE);
 
82
 
 
83
  if (guestfs_mount (g, "/dev/sda1", "/") == -1)
 
84
    exit (EXIT_FAILURE);
 
85
 
 
86
#define filename "/hello.txt"
 
87
#define content "hello, people of the world"
 
88
 
 
89
  if (guestfs_write (g, filename, content, strlen (content)) == -1)
 
90
    exit (EXIT_FAILURE);
 
91
 
 
92
  data = guestfs_cat (g, filename);
 
93
  if (!data)
 
94
    exit (EXIT_FAILURE);
 
95
 
 
96
  if (strcmp (data, content) != 0) {
 
97
    fprintf (stderr, "%s FAILED: unexpected content of %s file (actual: %s, expected: %s)\n",
 
98
             program_name, filename, data, content);
 
99
    exit (EXIT_FAILURE);
 
100
  }
 
101
 
 
102
  /* Run sync to test flush path. */
 
103
  if (guestfs_sync (g) == -1)
 
104
    exit (EXIT_FAILURE);
 
105
 
 
106
  /* Run fstrim to test trim path.  However only recent versions of
 
107
   * libguestfs have this, and it probably only works in recent
 
108
   * versions of qemu.
 
109
   */
 
110
#ifdef GUESTFS_HAVE_FSTRIM
 
111
  if (guestfs_fstrim (g, "/", -1) == -1)
 
112
    exit (EXIT_FAILURE);
 
113
#endif
 
114
 
 
115
  if (guestfs_shutdown (g) == -1)
 
116
    exit (EXIT_FAILURE);
 
117
 
 
118
  guestfs_close (g);
 
119
  exit (EXIT_SUCCESS);
 
120
}