Add some differentiate/integrate unit tests
Some checks failed
continuous-integration/drone the build failed

Closes #55.
This commit is contained in:
Olivier 'reivilibre' 2021-09-27 19:09:47 +01:00
parent 1ce0478b2c
commit eacb3114b5
3 changed files with 251 additions and 2 deletions

View File

@ -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;

View File

@ -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};

View File

@ -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);
}
}