mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-07-01 17:52:40 +00:00
Merge pull request #2714 from egernst/watcher-fixup-backport
stable-2.2 | watcher: ensure we create target mount point for storage
This commit is contained in:
commit
ebc23df752
@ -269,6 +269,19 @@ impl SandboxStorages {
|
|||||||
let entry = Storage::new(storage)
|
let entry = Storage::new(storage)
|
||||||
.await
|
.await
|
||||||
.with_context(|| "Failed to add storage")?;
|
.with_context(|| "Failed to add storage")?;
|
||||||
|
|
||||||
|
// If the storage source is a directory, let's create the target mount point:
|
||||||
|
if entry.source_mount_point.as_path().is_dir() {
|
||||||
|
fs::create_dir_all(&entry.target_mount_point)
|
||||||
|
.await
|
||||||
|
.with_context(|| {
|
||||||
|
format!(
|
||||||
|
"Unable to mkdir all for {}",
|
||||||
|
entry.target_mount_point.display()
|
||||||
|
)
|
||||||
|
})?;
|
||||||
|
}
|
||||||
|
|
||||||
self.0.push(entry);
|
self.0.push(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -475,6 +488,85 @@ mod tests {
|
|||||||
Ok((storage, src_path))
|
Ok((storage, src_path))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_empty_sourcedir_check() {
|
||||||
|
//skip_if_not_root!();
|
||||||
|
let dir = tempfile::tempdir().expect("failed to create tempdir");
|
||||||
|
|
||||||
|
let logger = slog::Logger::root(slog::Discard, o!());
|
||||||
|
|
||||||
|
let src_path = dir.path().join("src");
|
||||||
|
let dest_path = dir.path().join("dest");
|
||||||
|
let src_filename = src_path.to_str().expect("failed to create src filename");
|
||||||
|
let dest_filename = dest_path.to_str().expect("failed to create dest filename");
|
||||||
|
|
||||||
|
std::fs::create_dir_all(src_filename).expect("failed to create path");
|
||||||
|
|
||||||
|
let storage = protos::Storage {
|
||||||
|
source: src_filename.to_string(),
|
||||||
|
mount_point: dest_filename.to_string(),
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut entries = SandboxStorages {
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
|
||||||
|
entries
|
||||||
|
.add(std::iter::once(storage), &logger)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
assert!(entries.check(&logger).await.is_ok());
|
||||||
|
assert_eq!(entries.0.len(), 1);
|
||||||
|
|
||||||
|
assert_eq!(std::fs::read_dir(src_path).unwrap().count(), 0);
|
||||||
|
assert_eq!(std::fs::read_dir(dest_path).unwrap().count(), 0);
|
||||||
|
assert_eq!(std::fs::read_dir(dir.path()).unwrap().count(), 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_single_file_check() {
|
||||||
|
//skip_if_not_root!();
|
||||||
|
let dir = tempfile::tempdir().expect("failed to create tempdir");
|
||||||
|
|
||||||
|
let logger = slog::Logger::root(slog::Discard, o!());
|
||||||
|
|
||||||
|
let src_file_path = dir.path().join("src.txt");
|
||||||
|
let dest_file_path = dir.path().join("dest.txt");
|
||||||
|
|
||||||
|
let src_filename = src_file_path
|
||||||
|
.to_str()
|
||||||
|
.expect("failed to create src filename");
|
||||||
|
let dest_filename = dest_file_path
|
||||||
|
.to_str()
|
||||||
|
.expect("failed to create dest filename");
|
||||||
|
|
||||||
|
let storage = protos::Storage {
|
||||||
|
source: src_filename.to_string(),
|
||||||
|
mount_point: dest_filename.to_string(),
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
|
||||||
|
//create file
|
||||||
|
fs::write(src_file_path, "original").unwrap();
|
||||||
|
|
||||||
|
let mut entries = SandboxStorages::default();
|
||||||
|
|
||||||
|
entries
|
||||||
|
.add(std::iter::once(storage), &logger)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
assert!(entries.check(&logger).await.is_ok());
|
||||||
|
assert_eq!(entries.0.len(), 1);
|
||||||
|
|
||||||
|
// there should only be 2 files
|
||||||
|
assert_eq!(std::fs::read_dir(dir.path()).unwrap().count(), 2);
|
||||||
|
|
||||||
|
assert_eq!(fs::read_to_string(dest_file_path).unwrap(), "original");
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_watch_entries() {
|
async fn test_watch_entries() {
|
||||||
skip_if_not_root!();
|
skip_if_not_root!();
|
||||||
|
Loading…
Reference in New Issue
Block a user