diff --git a/node/src/test/arbitrary.rs b/node/src/test/arbitrary.rs index 0989875e..9fc0b64e 100644 --- a/node/src/test/arbitrary.rs +++ b/node/src/test/arbitrary.rs @@ -4,6 +4,12 @@ use crate::identity::{ProjId, UserId}; use crate::storage; use crate::test::storage::MockStorage; +pub fn gen(size: usize) -> T { + let mut gen = quickcheck::Gen::new(size); + + T::arbitrary(&mut gen) +} + impl quickcheck::Arbitrary for storage::Remotes { fn arbitrary(g: &mut quickcheck::Gen) -> Self { let remotes: HashMap> = diff --git a/node/src/test/fixtures.rs b/node/src/test/fixtures.rs index 8f62a077..992a407d 100644 --- a/node/src/test/fixtures.rs +++ b/node/src/test/fixtures.rs @@ -1,89 +1,67 @@ use std::path::Path; -use std::str::FromStr; - -use once_cell::sync::Lazy; use crate::identity::{ProjId, UserId}; use crate::storage::git::Storage; use crate::storage::{WriteRepository, WriteStorage}; - -pub static USER_IDS: Lazy<[UserId; 16]> = Lazy::new(|| { - [ - UserId::from_str("zCBH2FXDERonR1rDopkZTKAZAFKpXkiFc46XHYz1Qcyb4").unwrap(), - UserId::from_str("z68bx7oq3JX3d5RVQSZzh7S9qP6a7AFNQnRas8EiELeGm").unwrap(), - UserId::from_str("z8QVc8haUs3rc23ZfQYcFdntDCE5TGVWGhB1Piit2FyLW").unwrap(), - UserId::from_str("zAmTnRTXhk49nShSWDFvi93SMFgTRGKAAJyHpXJ4rAFb8").unwrap(), - UserId::from_str("z4RqaY63zcPZY2UudyUxfUrWu2FpTLMrCCfskah6YWxww").unwrap(), - UserId::from_str("zHvS7fNSn3b8kE9Vy83wuitRTqkyqvRC7G7q8B1kbxPfG").unwrap(), - UserId::from_str("z9Q8YnVrkpTCEx4ffFgXhEMNSbwX7unMJYLLTNF78Vjd9").unwrap(), - UserId::from_str("zBTfXzjQhNgob6f5D3rhpJjTpFzjbLzU85QoKdS3CgT6v").unwrap(), - UserId::from_str("z8qQNwfQZqYPQp9xyDssZyh7QctGWAjvq7A2T8vE4oWLr").unwrap(), - UserId::from_str("z5YzpLeMn6ozf95bELziodGNpyTs5jQ7ssfofdv4rhB92").unwrap(), - UserId::from_str("z8YUtfXfp5bthrongT11C9fYcSsT6QKY1SgfENxB5KXvj").unwrap(), - UserId::from_str("zBSUVcBSUWPtYWoPPxZg9QPDDTFVQe2dZaXLaCvFvd9Di").unwrap(), - UserId::from_str("z6ba5eWTvR22JL4ej4qErnGcxJTZF3YCHEH9FMriQbsmj").unwrap(), - UserId::from_str("z6MJB1N1WfwWzt69k39eRmHGZ7CCefo4h68zX1gBEWKyh").unwrap(), - UserId::from_str("zD2UwYEK4FGcrX7HqAPnT5i42uYG6ZgeeSo3C52a21ktJ").unwrap(), - UserId::from_str("z5NVinWZWpNz7EbU26mdZ2nQV3inK3ZHw3YuW8Dd6puyw").unwrap(), - ] -}); - -pub static PROJ_IDS: Lazy<[ProjId; 16]> = Lazy::new(|| { - [ - ProjId::from_str("z3VDhnNMUwoaQHxNm5iNMEYuwY6RRi1e6WZ74oJKAWJzS").unwrap(), - ProjId::from_str("zZXpj5rW3GsGnBXhszTYN5hru45AoKdqc7rbD7KK23y2").unwrap(), - ProjId::from_str("z35ytZY1YSnk2M7Riz9KbEVfdrWAbrLdLKP5bpgPZR1uM").unwrap(), - ProjId::from_str("zJDZF6mV6g1owvYnqbc8rGzYxbigsP7SAMkFZZXnwwxyc").unwrap(), - ProjId::from_str("z7vwbcQRR8nu3GaHSyxQd2AvQuVsiKEFtV4EoBZGGSECn").unwrap(), - ProjId::from_str("zDNvLCdwYAsRzH2UQzb1D5CjV5xf2rDsARsFXUymqswJF").unwrap(), - ProjId::from_str("zAo9SpyTcwYxSe3ReaZj42T2zAFik3gY2A2eJhchLrArA").unwrap(), - ProjId::from_str("zFXbHCdxjJpYJ1rYW8T7qUoZnkMcPwxR3xARZZpSqdGgg").unwrap(), - ProjId::from_str("zDT5dWPNUudw9T8gD2vBZ6RZ6tXjzgnvoj1UdMnCGHeFr").unwrap(), - ProjId::from_str("z7aD9ReLj8RbchMJuVgy928oT764iWq7p4wKCwWqroH7V").unwrap(), - ProjId::from_str("z3PRwULg4pDXpv5GJe2z563hM7YuJFQdWPbouFkpEfUoS").unwrap(), - ProjId::from_str("zBTQxg8xG8gGqUFtJwWotft3QuFuPPhA1aEBFLhqHuX4c").unwrap(), - ProjId::from_str("z8exxN2CzTJDcFC5n8CPzskrpUYdu7rzupwCzjTUgmtb4").unwrap(), - ProjId::from_str("z5Fa2PbkXKMLnvf4ZEbdHDiTmKVcqKRgxZn8xwVBZHkn1").unwrap(), - ProjId::from_str("zEG2mTq7ExW3wBEgjwUDHqDQXZgamyv8cDmZud3b27SaJ").unwrap(), - ProjId::from_str("z3dCpDtvBFj55HLvEW3grgqiYeanNHxW1hYS1TSK8epS4").unwrap(), - ] -}); +use crate::test::arbitrary; pub fn storage>(path: P) -> Storage { let path = path.as_ref(); let storage = Storage::new(path); + let proj_ids = arbitrary::gen::>(9); + let user_ids = arbitrary::gen::>(9); - for proj in PROJ_IDS.iter().take(3) { + for proj in proj_ids.iter() { log::debug!("creating {}...", proj); let mut repo = storage.repository(proj).unwrap(); - for user in USER_IDS.iter().take(3) { + for user in user_ids.iter() { let repo = repo.namespace(user).unwrap(); - let head_oid = initial_commit(repo).unwrap(); - let head = repo.find_commit(head_oid).unwrap(); + let head = initial_commit(repo, &user.to_string()).unwrap(); log::debug!("{}: creating {}...", proj, repo.namespace().unwrap()); - repo.reference("refs/rad/root", head_oid, false, "test") + repo.reference("refs/rad/root", head.id(), false, "test") .unwrap(); - // TODO: Different commits. + let head = commit(repo, &head, "Second commit", &user.to_string()).unwrap(); repo.branch("master", &head, false).unwrap(); + + let head = commit(repo, &head, "Third commit", &user.to_string()).unwrap(); repo.branch("patch/3", &head, false).unwrap(); } } storage } +/// Create a commit. +fn commit<'a>( + repo: &'a git2::Repository, + parent: &'a git2::Commit, + message: &str, + user: &str, +) -> Result, git2::Error> { + let sig = git2::Signature::now(user, "anonymous@radicle.xyz")?; + let tree_id = repo.index()?.write_tree()?; + let tree = repo.find_tree(tree_id)?; + let oid = repo.commit(None, &sig, &sig, message, &tree, &[parent])?; + let commit = repo.find_commit(oid).unwrap(); + + Ok(commit) +} + /// Create an initial empty commit. -fn initial_commit(repo: &git2::Repository) -> Result { - let sig = git2::Signature::now("cloudhead", "cloudhead@radicle.xyz")?; - // Now let's create an empty tree for this commit. +fn initial_commit<'a>( + repo: &'a git2::Repository, + user: &str, +) -> Result, git2::Error> { + let sig = git2::Signature::now(user, "anonymous@radicle.xyz")?; let tree_id = repo.index()?.write_tree()?; let tree = repo.find_tree(tree_id)?; let oid = repo.commit(None, &sig, &sig, "Initial commit", &tree, &[])?; + let commit = repo.find_commit(oid).unwrap(); - Ok(oid) + Ok(commit) } #[cfg(test)]