//! The four tools' arguments: `brokerd` writes them to a container's standard input, `toolkit` //! reads them back, and both use these types. Do not edit. use proto::tools::{HttpFetchArgs, ReadFileArgs, ShellArgs, WriteFileArgs}; #[test] fn each_type_round_trips_in_field_order() { let read = ReadFileArgs { path: "/n/a.md".to_string(), }; assert_eq!( serde_json::to_string(&read).unwrap(), r#"{"path":"/n/a.md"}"# ); let write = WriteFileArgs { path: "/n/a.md".to_string(), content: "hi\n".to_string(), }; let text = serde_json::to_string(&write).unwrap(); assert_eq!(text, r#"{"path":"/n/a.md","content":"hi\n"}"#); assert_eq!(serde_json::from_str::(&text).unwrap(), write); let fetch = HttpFetchArgs { url: "https://example.com/".to_string(), }; assert_eq!( serde_json::to_string(&fetch).unwrap(), r#"{"url":"https://example.com/"}"# ); } #[test] fn a_shell_cwd_is_left_out_when_absent_and_may_be_null_or_missing() { let bare = ShellArgs { command: "ls".to_string(), cwd: None, }; assert_eq!(serde_json::to_string(&bare).unwrap(), r#"{"command":"ls"}"#); for text in [r#"{"command":"ls"}"#, r#"{"command":"ls","cwd":null}"#] { assert_eq!(serde_json::from_str::(text).unwrap(), bare); } let with = ShellArgs { command: "ls".to_string(), cwd: Some("/n".to_string()), }; assert_eq!( serde_json::to_string(&with).unwrap(), r#"{"command":"ls","cwd":"/n"}"# ); } #[test] fn unknown_and_missing_fields_are_refused() { assert!(serde_json::from_str::(r#"{"path":"/a","mode":"x"}"#).is_err()); assert!(serde_json::from_str::(r#"{}"#).is_err()); assert!(serde_json::from_str::(r#"{"path":"/a"}"#).is_err()); assert!(serde_json::from_str::(r#"{"command":"ls","env":{}}"#).is_err()); assert!( serde_json::from_str::(r#"{"url":"https://a.b/","method":"POST"}"#).is_err() ); }