source: web/old/remctl-2.14/tests/util/xwrite-t.c @ f6f3e91

web
Last change on this file since f6f3e91 was f6f3e91, checked in by Jessica B. Hamrick <jhamrick@…>, 15 years ago

Preserve directory hierarchy (not sure what happened to it)

  • Property mode set to 100644
File size: 3.8 KB
Line 
1/*
2 * Test suite for xwrite and xwritev.
3 *
4 * Written by Russ Allbery <rra@stanford.edu>
5 * Copyright 2009 Board of Trustees, Leland Stanford Jr. University
6 * Copyright (c) 2004, 2005, 2006
7 *     by Internet Systems Consortium, Inc. ("ISC")
8 * Copyright (c) 1991, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
9 *     2002, 2003 by The Internet Software Consortium and Rich Salz
10 *
11 * See LICENSE for licensing terms.
12 */
13
14#include <config.h>
15#include <portable/system.h>
16#include <portable/uio.h>
17
18#include <tests/tap/basic.h>
19#include <util/util.h>
20
21/* The data array we'll use to do testing. */
22char data[256];
23
24/* These come from fakewrite. */
25extern char write_buffer[];
26extern size_t write_offset;
27extern int write_interrupt;
28extern int write_fail;
29
30
31static void
32test_write(int status, int total, const char *name)
33{
34    is_int(total, status, "%s return status", name);
35    ok(memcmp(data, write_buffer, 256) == 0, "%s output", name);
36}
37
38
39int
40main(void)
41{
42    int i;
43    struct iovec iov[4];
44
45    plan(38);
46
47    /* Test xwrite. */
48    for (i = 0; i < 256; i++)
49        data[i] = i;
50    test_write(xwrite(0, data, 256), 256, "xwrite");
51    write_offset = 0;
52    write_interrupt = 1;
53    memset(data, 0, 256);
54    test_write(xwrite(0, data, 256), 256, "xwrite interrupted");
55    write_offset = 0;
56    for (i = 0; i < 32; i++)
57        data[i] = i * 2;
58    test_write(xwrite(0, data, 32), 32, "xwrite first block");
59    for (i = 32; i < 65; i++)
60        data[i] = i * 2;
61    test_write(xwrite(0, data + 32, 33), 33, "xwrite second block");
62    write_offset = 0;
63    write_interrupt = 0;
64
65    /* Test xwritev. */
66    memset(data, 0, 256);
67    iov[0].iov_base = data;
68    iov[0].iov_len = 256;
69    test_write(xwritev(0, iov, 1), 256, "xwritev");
70    write_offset = 0;
71    for (i = 0; i < 256; i++)
72        data[i] = i;
73    iov[0].iov_len = 128;
74    iov[1].iov_base = &data[128];
75    iov[1].iov_len = 16;
76    iov[2].iov_base = &data[144];
77    iov[2].iov_len = 112;
78    test_write(xwritev(0, iov, 3), 256, "xwritev with multiple iovs");
79    write_offset = 0;
80    write_interrupt = 1;
81    memset(data, 0, 256);
82    iov[0].iov_len = 32;
83    iov[1].iov_base = &data[32];
84    iov[1].iov_len = 224;
85    test_write(xwritev(0, iov, 2), 256, "xwritev interrupted");
86    for (i = 0; i < 32; i++)
87        data[i] = i * 2;
88    write_offset = 0;
89    test_write(xwritev(0, iov, 1), 32, "xwritev first block");
90    for (i = 32; i < 65; i++)
91        data[i] = i * 2;
92    iov[0].iov_base = &data[32];
93    iov[0].iov_len = 16;
94    iov[1].iov_base = &data[48];
95    iov[1].iov_len = 1;
96    iov[2].iov_base = &data[49];
97    iov[2].iov_len = 8;
98    iov[3].iov_base = &data[57];
99    iov[3].iov_len = 8;
100    test_write(xwritev(0, iov, 4), 33, "xwritev second block");
101    write_offset = 0;
102    write_interrupt = 0;
103
104    /* Test xpwrite. */
105    for (i = 0; i < 256; i++)
106        data[i] = i;
107    test_write(xpwrite(0, data, 256, 0), 256, "xpwrite");
108    write_interrupt = 1;
109    memset(data + 1, 0, 255);
110    test_write(xpwrite(0, data + 1, 255, 1), 255, "xpwrite interrupted");
111    for (i = 0; i < 32; i++)
112        data[i + 32] = i * 2;
113    test_write(xpwrite(0, data + 32, 32, 32), 32, "xpwrite first block");
114    for (i = 32; i < 65; i++)
115        data[i + 32] = i * 2;
116    test_write(xpwrite(0, data + 64, 33, 64), 33, "xpwrite second block");
117    write_interrupt = 0;
118
119    /* Test failures. */
120    write_fail = 1;
121    test_write(xwrite(0, data + 1, 255), -1, "xwrite fail");
122    iov[0].iov_base = data + 1;
123    iov[0].iov_len = 255;
124    test_write(xwritev(0, iov, 1), -1, "xwritev fail");
125    test_write(xpwrite(0, data + 1, 255, 0), -1, "xpwrite fail");
126
127    /* Test zero-length writes. */
128    test_write(xwrite(0, "   ", 0), 0, "xwrite zero length");
129    test_write(xpwrite(0, "   ", 0, 2), 0, "xpwrite zero length");
130    iov[0].iov_base = data + 1;
131    iov[0].iov_len = 2;
132    test_write(xwritev(0, iov, 0), 0, "xwritev zero length");
133
134    return 0;
135}
Note: See TracBrowser for help on using the repository browser.