Add some differentiate/integrate unit tests
Some checks failed
continuous-integration/drone the build failed
Some checks failed
continuous-integration/drone the build failed
Closes #55.
This commit is contained in:
parent
1ce0478b2c
commit
eacb3114b5
@ -21,7 +21,7 @@ use crate::tree::{scan, FileTree, FileTree1};
|
||||
use anyhow::{anyhow, bail};
|
||||
use arc_interner::ArcIntern;
|
||||
use chrono::{DateTime, Utc};
|
||||
use log::{error, info, warn};
|
||||
use log::{info, warn};
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::fmt::Debug;
|
||||
use std::io::Write;
|
||||
|
||||
@ -16,6 +16,7 @@ along with Yama. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
use anyhow::anyhow;
|
||||
use log::warn;
|
||||
use sodiumoxide::crypto::secretbox;
|
||||
use sodiumoxide::crypto::secretbox::{Key, Nonce, NONCEBYTES};
|
||||
|
||||
|
||||
250
yama/src/tree.rs
250
yama/src/tree.rs
@ -305,7 +305,7 @@ mod tests {
|
||||
use crate::definitions::{
|
||||
FilesystemOwnership, FilesystemPermissions, RecursiveChunkRef, TreeNode,
|
||||
};
|
||||
use crate::tree::differentiate_node_in_place;
|
||||
use crate::tree::{differentiate_node_in_place, integrate_node_in_place};
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
#[test]
|
||||
@ -467,4 +467,252 @@ mod tests {
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
pub fn test_differentiate_node_in_place_mega_example() {
|
||||
// TODO extend this example
|
||||
let parent = TreeNode::Directory {
|
||||
ownership: FilesystemOwnership { uid: 47, gid: 49 },
|
||||
permissions: FilesystemPermissions { mode: 0660 },
|
||||
children: vec![(
|
||||
"dir1".to_string(),
|
||||
TreeNode::Directory {
|
||||
ownership: FilesystemOwnership { uid: 46, gid: 50 },
|
||||
permissions: FilesystemPermissions { mode: 0550 },
|
||||
children: vec![
|
||||
(
|
||||
"file1".to_string(),
|
||||
TreeNode::NormalFile {
|
||||
mtime: 1996,
|
||||
ownership: FilesystemOwnership { uid: 54, gid: 59 },
|
||||
permissions: FilesystemPermissions { mode: 0311 },
|
||||
content: RecursiveChunkRef {
|
||||
chunk_id: [37; 32],
|
||||
depth: 2,
|
||||
},
|
||||
},
|
||||
),
|
||||
(
|
||||
"file2".to_string(),
|
||||
TreeNode::NormalFile {
|
||||
mtime: 1970,
|
||||
ownership: FilesystemOwnership { uid: 55, gid: 60 },
|
||||
permissions: FilesystemPermissions { mode: 0321 },
|
||||
content: RecursiveChunkRef {
|
||||
chunk_id: [42; 32],
|
||||
depth: 29,
|
||||
},
|
||||
},
|
||||
),
|
||||
]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
},
|
||||
)]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
};
|
||||
|
||||
let child_full = TreeNode::Directory {
|
||||
ownership: FilesystemOwnership { uid: 47, gid: 49 },
|
||||
permissions: FilesystemPermissions { mode: 0660 },
|
||||
children: vec![(
|
||||
"dir1".to_string(),
|
||||
TreeNode::Directory {
|
||||
ownership: FilesystemOwnership { uid: 46, gid: 50 },
|
||||
permissions: FilesystemPermissions { mode: 0560 },
|
||||
children: vec![
|
||||
(
|
||||
"file1".to_string(),
|
||||
TreeNode::NormalFile {
|
||||
mtime: 1996,
|
||||
ownership: FilesystemOwnership { uid: 54, gid: 59 },
|
||||
permissions: FilesystemPermissions { mode: 0311 },
|
||||
content: RecursiveChunkRef {
|
||||
chunk_id: [37; 32],
|
||||
depth: 2,
|
||||
},
|
||||
},
|
||||
),
|
||||
(
|
||||
"file42".to_string(),
|
||||
TreeNode::NormalFile {
|
||||
mtime: 1970,
|
||||
ownership: FilesystemOwnership { uid: 55, gid: 60 },
|
||||
permissions: FilesystemPermissions { mode: 0321 },
|
||||
content: RecursiveChunkRef {
|
||||
chunk_id: [42; 32],
|
||||
depth: 29,
|
||||
},
|
||||
},
|
||||
),
|
||||
]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
},
|
||||
)]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
};
|
||||
|
||||
let mut child_diff = child_full.clone();
|
||||
differentiate_node_in_place(&mut child_diff, &parent).unwrap();
|
||||
|
||||
let expected_child_diff = TreeNode::Directory {
|
||||
ownership: FilesystemOwnership { uid: 47, gid: 49 },
|
||||
permissions: FilesystemPermissions { mode: 0660 },
|
||||
children: vec![(
|
||||
"dir1".to_string(),
|
||||
TreeNode::Directory {
|
||||
ownership: FilesystemOwnership { uid: 46, gid: 50 },
|
||||
permissions: FilesystemPermissions { mode: 0560 },
|
||||
children: vec![
|
||||
("file2".to_string(), TreeNode::Deleted),
|
||||
(
|
||||
"file42".to_string(),
|
||||
TreeNode::NormalFile {
|
||||
mtime: 1970,
|
||||
ownership: FilesystemOwnership { uid: 55, gid: 60 },
|
||||
permissions: FilesystemPermissions { mode: 0321 },
|
||||
content: RecursiveChunkRef {
|
||||
chunk_id: [42; 32],
|
||||
depth: 29,
|
||||
},
|
||||
},
|
||||
),
|
||||
]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
},
|
||||
)]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
};
|
||||
|
||||
assert_eq!(child_diff, expected_child_diff);
|
||||
}
|
||||
|
||||
#[test]
|
||||
pub fn test_integrate_node_in_place_mega_example() {
|
||||
// TODO extend this example
|
||||
let parent = TreeNode::Directory {
|
||||
ownership: FilesystemOwnership { uid: 47, gid: 49 },
|
||||
permissions: FilesystemPermissions { mode: 0660 },
|
||||
children: vec![(
|
||||
"dir1".to_string(),
|
||||
TreeNode::Directory {
|
||||
ownership: FilesystemOwnership { uid: 46, gid: 50 },
|
||||
permissions: FilesystemPermissions { mode: 0550 },
|
||||
children: vec![
|
||||
(
|
||||
"file1".to_string(),
|
||||
TreeNode::NormalFile {
|
||||
mtime: 1996,
|
||||
ownership: FilesystemOwnership { uid: 54, gid: 59 },
|
||||
permissions: FilesystemPermissions { mode: 0311 },
|
||||
content: RecursiveChunkRef {
|
||||
chunk_id: [37; 32],
|
||||
depth: 2,
|
||||
},
|
||||
},
|
||||
),
|
||||
(
|
||||
"file2".to_string(),
|
||||
TreeNode::NormalFile {
|
||||
mtime: 1970,
|
||||
ownership: FilesystemOwnership { uid: 55, gid: 60 },
|
||||
permissions: FilesystemPermissions { mode: 0321 },
|
||||
content: RecursiveChunkRef {
|
||||
chunk_id: [42; 32],
|
||||
depth: 29,
|
||||
},
|
||||
},
|
||||
),
|
||||
]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
},
|
||||
)]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
};
|
||||
|
||||
let child_diff = TreeNode::Directory {
|
||||
ownership: FilesystemOwnership { uid: 47, gid: 49 },
|
||||
permissions: FilesystemPermissions { mode: 0660 },
|
||||
children: vec![(
|
||||
"dir1".to_string(),
|
||||
TreeNode::Directory {
|
||||
ownership: FilesystemOwnership { uid: 46, gid: 50 },
|
||||
permissions: FilesystemPermissions { mode: 0560 },
|
||||
children: vec![
|
||||
("file2".to_string(), TreeNode::Deleted),
|
||||
(
|
||||
"file42".to_string(),
|
||||
TreeNode::NormalFile {
|
||||
mtime: 1970,
|
||||
ownership: FilesystemOwnership { uid: 55, gid: 60 },
|
||||
permissions: FilesystemPermissions { mode: 0321 },
|
||||
content: RecursiveChunkRef {
|
||||
chunk_id: [42; 32],
|
||||
depth: 29,
|
||||
},
|
||||
},
|
||||
),
|
||||
]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
},
|
||||
)]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
};
|
||||
|
||||
let mut child_full = child_diff.clone();
|
||||
integrate_node_in_place(&mut child_full, &parent).unwrap();
|
||||
|
||||
let expected_child_full = TreeNode::Directory {
|
||||
ownership: FilesystemOwnership { uid: 47, gid: 49 },
|
||||
permissions: FilesystemPermissions { mode: 0660 },
|
||||
children: vec![(
|
||||
"dir1".to_string(),
|
||||
TreeNode::Directory {
|
||||
ownership: FilesystemOwnership { uid: 46, gid: 50 },
|
||||
permissions: FilesystemPermissions { mode: 0560 },
|
||||
children: vec![
|
||||
(
|
||||
"file1".to_string(),
|
||||
TreeNode::NormalFile {
|
||||
mtime: 1996,
|
||||
ownership: FilesystemOwnership { uid: 54, gid: 59 },
|
||||
permissions: FilesystemPermissions { mode: 0311 },
|
||||
content: RecursiveChunkRef {
|
||||
chunk_id: [37; 32],
|
||||
depth: 2,
|
||||
},
|
||||
},
|
||||
),
|
||||
(
|
||||
"file42".to_string(),
|
||||
TreeNode::NormalFile {
|
||||
mtime: 1970,
|
||||
ownership: FilesystemOwnership { uid: 55, gid: 60 },
|
||||
permissions: FilesystemPermissions { mode: 0321 },
|
||||
content: RecursiveChunkRef {
|
||||
chunk_id: [42; 32],
|
||||
depth: 29,
|
||||
},
|
||||
},
|
||||
),
|
||||
]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
},
|
||||
)]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
};
|
||||
|
||||
assert_eq!(child_full, expected_child_full);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user