refactor(bare): enhance security and performance optimizations
- Remove unnecessary sorting in advertise_refs for deterministic output - Add path traversal detection and validation in bare_dir construction - Implement symlink resolution checks to prevent security vulnerabilities - Refactor cache system with CRC validation and improved metrics - Integrate repo-specific cache invalidation using indexed keys - Add comprehensive unit tests for commit operations and diff functionality - Move configuration constants to centralized config module - Optimize string operations in disk cache random value generation - Enhance license detection algorithm with cleaner matching logic - Streamline argument processing in various git operations - Update dependencies including crc32fast and flate2 for performance - Add signal handling capability to tokio runtime configuration
This commit is contained in:
@@ -63,3 +63,102 @@ fn test_list_refs_direct() {
|
||||
assert_eq!(oid.hex.len(), 40, "SHA-1 hex should be 40 chars");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn test_write_ref_and_ref_exists() {
|
||||
let (_dir, gb) = common::setup_bare_repo();
|
||||
let oid = common::get_main_oid(&gb);
|
||||
let resp = gb.write_ref(gitks::pb::WriteRefRequest {
|
||||
repository: Some(hdr()),
|
||||
ref_name: "refs/heads/test-write".into(),
|
||||
new_oid: oid,
|
||||
old_oid: String::new(),
|
||||
force: false,
|
||||
}).unwrap();
|
||||
assert!(resp.ok, "write_ref failed: {}", resp.error);
|
||||
|
||||
let exists = gb.ref_exists(gitks::pb::RefExistsRequest {
|
||||
repository: Some(hdr()),
|
||||
ref_name: "refs/heads/test-write".into(),
|
||||
}).unwrap();
|
||||
assert!(exists.exists);
|
||||
|
||||
let not_exists = gb.ref_exists(gitks::pb::RefExistsRequest {
|
||||
repository: Some(hdr()),
|
||||
ref_name: "refs/heads/nonexistent".into(),
|
||||
}).unwrap();
|
||||
assert!(!not_exists.exists);
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn test_update_references_batch() {
|
||||
let (_dir, gb) = common::setup_bare_repo();
|
||||
let oid = common::get_main_oid(&gb);
|
||||
let resp = gb.update_references(gitks::pb::UpdateReferencesRequest {
|
||||
repository: Some(hdr()),
|
||||
updates: vec![
|
||||
gitks::pb::RefUpdateEntry {
|
||||
ref_name: "refs/heads/batch-a".into(),
|
||||
new_oid: oid.clone(),
|
||||
old_oid: String::new(),
|
||||
},
|
||||
gitks::pb::RefUpdateEntry {
|
||||
ref_name: "refs/heads/batch-b".into(),
|
||||
new_oid: oid,
|
||||
old_oid: String::new(),
|
||||
},
|
||||
],
|
||||
}).unwrap();
|
||||
assert!(resp.failed_refs.is_empty(), "error: {}", resp.error);
|
||||
|
||||
let a = gb.ref_exists(gitks::pb::RefExistsRequest {
|
||||
repository: Some(hdr()),
|
||||
ref_name: "refs/heads/batch-a".into(),
|
||||
}).unwrap();
|
||||
assert!(a.exists);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_update_references_empty() {
|
||||
let (_dir, gb) = common::setup_bare_repo();
|
||||
let resp = gb.update_references(gitks::pb::UpdateReferencesRequest {
|
||||
repository: Some(hdr()),
|
||||
updates: vec![],
|
||||
}).unwrap();
|
||||
assert!(resp.failed_refs.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_delete_refs() {
|
||||
let (_dir, gb) = common::setup_bare_repo();
|
||||
let oid = common::get_main_oid(&gb);
|
||||
gb.write_ref(gitks::pb::WriteRefRequest {
|
||||
repository: Some(hdr()),
|
||||
ref_name: "refs/heads/to-delete".into(),
|
||||
new_oid: oid,
|
||||
old_oid: String::new(),
|
||||
force: false,
|
||||
}).unwrap();
|
||||
|
||||
let resp = gb.delete_refs(gitks::pb::DeleteRefsRequest {
|
||||
repository: Some(hdr()),
|
||||
ref_names: vec!["refs/heads/to-delete".into()],
|
||||
}).unwrap();
|
||||
assert!(resp.failed_refs.is_empty());
|
||||
|
||||
let exists = gb.ref_exists(gitks::pb::RefExistsRequest {
|
||||
repository: Some(hdr()),
|
||||
ref_name: "refs/heads/to-delete".into(),
|
||||
}).unwrap();
|
||||
assert!(!exists.exists);
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn test_find_default_branch_name() {
|
||||
let (_dir, gb) = common::setup_bare_repo();
|
||||
let resp = gb.find_default_branch_name().unwrap();
|
||||
assert_eq!(resp.name, "main");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user