File: test_async_405_pread_structured.rs

package info (click to toggle)
libnbd 1.24.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 10,956 kB
  • sloc: ansic: 55,158; ml: 12,325; sh: 8,811; python: 4,757; makefile: 3,038; perl: 165; cpp: 24
file content (84 lines) | stat: -rw-r--r-- 2,178 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// libnbd Rust test case
// Copyright Tage Johansson
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

#![deny(warnings)]

mod nbdkit_pattern;
use nbdkit_pattern::PATTERN;

#[tokio::test]
async fn test_async_pread_structured() {
    let nbd = libnbd::AsyncHandle::new().unwrap();
    nbd.connect_command(&[
        "nbdkit",
        "-s",
        "--exit-with-parent",
        "-v",
        "pattern",
        "size=1M",
    ])
    .await
    .unwrap();

    fn f(buf: &[u8], offset: u64, s: u32, err: &mut i32) {
        assert_eq!(*err, 0);
        *err = 42;
        assert_eq!(buf, PATTERN.as_slice());
        assert_eq!(offset, 0);
        assert_eq!(s, libnbd::READ_DATA);
    }

    let mut buf = [0; 512];
    nbd.pread_structured(
        &mut buf,
        0,
        |b, o, s, e| {
            f(b, o, s, e);
            0
        },
        None,
    )
    .await
    .unwrap();
    assert_eq!(buf.as_slice(), PATTERN.as_slice());

    nbd.pread_structured(
        &mut buf,
        0,
        |b, o, s, e| {
            f(b, o, s, e);
            0
        },
        Some(libnbd::CmdFlag::DF),
    )
    .await
    .unwrap();
    assert_eq!(buf.as_slice(), PATTERN.as_slice());

    let res = nbd
        .pread_structured(
            &mut buf,
            0,
            |b, o, s, e| {
                f(b, o, s, e);
                -1
            },
            Some(libnbd::CmdFlag::DF),
        )
        .await;
    assert_eq!(res.unwrap_err().errno(), Some(42));
}