Update Red Hat Copyright Notices
[nbdkit.git] / tests / test-data-size.sh
blob285ba6cff60542779c3aa869b66ac981c9502b3a
1 #!/usr/bin/env bash
2 # nbdkit
3 # Copyright Red Hat
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions are
7 # met:
9 # * Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
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.
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.
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.
33 # Test size of data expression is calculated correctly.
35 source ./functions.sh
36 set -e
37 set -x
39 requires_run
40 requires_nbdinfo
42 # Since this test is expected to fail, valgrind will also fail.
43 skip_if_valgrind
45 size ()
47 data="$1"
48 expected_size="$2"
50 size="$(
51 nbdkit -U - -fv -D data.AST=1 data "$data" --run 'nbdinfo --size "$uri"'
53 if [ "$size" -ne "$expected_size" ]; then
54 echo "$0: data has unexpected size: $data"
55 echo "$0: expected size: $expected_size"
56 echo "$0: actual size: $size"
57 exit 1
61 # Some obvious expressions.
62 size '' 0
63 size '0' 1
64 size '0 0' 2
65 size '0 1 2 3 0' 5
66 size '(0 1 2 3 0)' 5
67 size 'le16:0' 2
68 size 'be16:0' 2
69 size 'le32:0' 4
70 size 'be32:0' 4
71 size 'le64:0' 8
72 size 'be64:0' 8
74 # @offsets should extend the size even if nothing appears later.
75 size '@100' 100
76 size '@0' 0
77 size '@+100' 100
78 size '@+100 @-90' 100
80 # Nested expressions involving offsets.
81 size '(@100) (@50)' 150
82 size '(0 1 2 3 @100) (4 5 6 @50)' 150
83 size '(@100) @0 (@50)' 100
84 size '(@50) @0 (@100)' 100
85 size '(@50) @200 (@100)' 300
87 # Alignment expressions.
88 size '0 @^512' 512
89 size '0 @^512 0' 513
91 # Alignment expressions in assignments.
92 #size '@100 -> \a \a' 100 # This probably should work but doesn't
93 size '(0 @100) -> \a \a' 100
94 size '(0 @100) -> \a (0 @200) -> \b \a \b' 300
95 size '(0 @100) -> \a (0 @200) -> \b \a @0 \b' 200
97 # Scripts.
98 size '<( for i in `seq 0 99`; do printf "%04d" $i; done )' $(( 100 * 4 ))
99 size '<( while true; do echo -n .; done )[:400]' 400
101 # Strings.
102 size '""' 0
103 size '"\\"' 1
104 size '"\""' 1
105 size '"abc"' 3
107 # Comments.
108 size '# nothing' 0