Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
google
GitHub Repository: google/crosvm
Path: blob/main/devices/src/virtio/vsock/sys/windows.rs
5394 views
1
// Copyright 2023 The ChromiumOS Authors
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
pub mod protocol;
6
pub mod vsock;
7
8
pub(crate) use protocol::*;
9
use serde::Deserialize;
10
use serde::Serialize;
11
use serde_keyvalue::FromKeyValues;
12
pub use vsock::Vsock;
13
pub use vsock::VsockError;
14
15
#[derive(Debug, Deserialize, Serialize, PartialEq, Eq, FromKeyValues)]
16
#[serde(deny_unknown_fields)]
17
// Configuration for a Vsock device.
18
pub struct VsockConfig {
19
/// CID to be used for this vsock device.
20
pub cid: u64,
21
}
22
23
impl VsockConfig {
24
/// Create a new vsock configuration.
25
pub fn new(cid: u64) -> Self {
26
Self { cid }
27
}
28
}
29
30
#[cfg(test)]
31
mod tests {
32
use serde_keyvalue::from_key_values;
33
use serde_keyvalue::ErrorKind;
34
use serde_keyvalue::ParseError;
35
36
use super::*;
37
38
fn from_vsock_arg(options: &str) -> Result<VsockConfig, ParseError> {
39
from_key_values(options)
40
}
41
42
#[test]
43
fn params_from_key_values() {
44
// Default device
45
assert_eq!(from_vsock_arg("cid=56").unwrap(), VsockConfig { cid: 56 });
46
47
// No argument
48
assert_eq!(
49
from_vsock_arg("").unwrap_err(),
50
ParseError {
51
kind: ErrorKind::SerdeError("missing field `cid`".into()),
52
pos: 0
53
}
54
);
55
56
// Cid passed twice
57
assert_eq!(
58
from_vsock_arg("cid=42,cid=56").unwrap_err(),
59
ParseError {
60
kind: ErrorKind::SerdeError("duplicate field `cid`".into()),
61
pos: 0,
62
}
63
);
64
65
// Invalid argument
66
assert_eq!(
67
from_vsock_arg("invalid=foo").unwrap_err(),
68
ParseError {
69
kind: ErrorKind::SerdeError("unknown field `invalid`, expected `cid`".into()),
70
pos: 0,
71
}
72
);
73
}
74
}
75
76