upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/tests/git_remote_nostr/fetch.rs
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2024-09-09 09:42:38 +0100
committerDanConwayDev <DanConwayDev@protonmail.com>2024-09-09 09:42:38 +0100
commit2c240465633368a1bd5f936e224a99cc9b7608ec (patch)
treea437baeef1adae43c7ee2c137bf8788c0dddd865 /tests/git_remote_nostr/fetch.rs
parent9a9b13a11868fe58fa0390938a39483bf1f3cc9a (diff)
test(remote): refactor split into multiple files
to make it easier to read and navigate
Diffstat (limited to 'tests/git_remote_nostr/fetch.rs')
-rw-r--r--tests/git_remote_nostr/fetch.rs195
1 files changed, 195 insertions, 0 deletions
diff --git a/tests/git_remote_nostr/fetch.rs b/tests/git_remote_nostr/fetch.rs
new file mode 100644
index 0000000..9ae17d8
--- /dev/null
+++ b/tests/git_remote_nostr/fetch.rs
@@ -0,0 +1,195 @@
1
2use super::*;
3
4#[tokio::test]
5#[serial]
6async fn fetch_downloads_speficied_commits_from_git_server() -> Result<()> {
7 let source_git_repo = prep_git_repo()?;
8 let source_path = source_git_repo.dir.to_str().unwrap().to_string();
9
10 std::fs::write(source_git_repo.dir.join("commit.md"), "some content")?;
11 let main_commit_id = source_git_repo.stage_and_commit("commit.md")?;
12
13 source_git_repo.create_branch("vnext")?;
14 source_git_repo.checkout("vnext")?;
15 std::fs::write(source_git_repo.dir.join("vnext.md"), "some content")?;
16 let vnext_commit_id = source_git_repo.stage_and_commit("vnext.md")?;
17
18 let git_repo = prep_git_repo()?;
19 let events = vec![
20 generate_test_key_1_metadata_event("fred"),
21 generate_test_key_1_relay_list_event(),
22 generate_repo_ref_event_with_git_server(vec![
23 source_git_repo.dir.to_str().unwrap().to_string(),
24 ]),
25 ];
26 // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57)
27 let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = (
28 Relay::new(8051, None, None),
29 Relay::new(8052, None, None),
30 Relay::new(8053, None, None),
31 Relay::new(8055, None, None),
32 Relay::new(8056, None, None),
33 Relay::new(8057, None, None),
34 );
35 r51.events = events.clone();
36 r55.events = events;
37
38 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
39 assert!(git_repo.git_repo.find_commit(main_commit_id).is_err());
40 assert!(git_repo.git_repo.find_commit(vnext_commit_id).is_err());
41
42 let mut p = cli_tester_after_fetch(&git_repo)?;
43 p.send_line(format!("fetch {main_commit_id} main").as_str())?;
44 p.send_line(format!("fetch {vnext_commit_id} vnext").as_str())?;
45 p.send_line("")?;
46 p.expect(format!("fetching over filesystem from {source_path}...\r\n").as_str())?;
47 p.expect_eventually_and_print("\r\n")?;
48
49 assert!(git_repo.git_repo.find_commit(main_commit_id).is_ok());
50 assert!(git_repo.git_repo.find_commit(vnext_commit_id).is_ok());
51
52 p.exit()?;
53 for p in [51, 52, 53, 55, 56, 57] {
54 relay::shutdown_relay(8000 + p)?;
55 }
56 Ok(())
57 });
58 // launch relays
59 let _ = join!(
60 r51.listen_until_close(),
61 r52.listen_until_close(),
62 r53.listen_until_close(),
63 r55.listen_until_close(),
64 r56.listen_until_close(),
65 r57.listen_until_close(),
66 );
67 cli_tester_handle.join().unwrap()?;
68 Ok(())
69}
70
71mod when_first_git_server_fails_ {
72 use super::*;
73
74 #[tokio::test]
75 #[serial]
76 async fn fetch_downloads_speficied_commits_from_second_git_server() -> Result<()> {
77 let (state_event, source_git_repo) = generate_repo_with_state_event().await?;
78 // let source_path = source_git_repo.dir.to_str().unwrap().to_string();
79 let error_path = "./path-doesnt-exist".to_string();
80
81 let main_commit_id = source_git_repo.get_tip_of_local_branch("main")?;
82
83 let git_repo = prep_git_repo_minus_1_commit()?;
84
85 let events = vec![
86 generate_test_key_1_metadata_event("fred"),
87 generate_test_key_1_relay_list_event(),
88 generate_repo_ref_event_with_git_server(vec![
89 error_path.to_string(),
90 source_git_repo.dir.to_str().unwrap().to_string(),
91 ]),
92 state_event,
93 ];
94 // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57)
95 let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = (
96 Relay::new(8051, None, None),
97 Relay::new(8052, None, None),
98 Relay::new(8053, None, None),
99 Relay::new(8055, None, None),
100 Relay::new(8056, None, None),
101 Relay::new(8057, None, None),
102 );
103 r51.events = events.clone();
104 r55.events = events;
105
106 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
107 assert!(git_repo.git_repo.find_commit(main_commit_id).is_err());
108
109 let mut p = cli_tester_after_fetch(&git_repo)?;
110 p.send_line(format!("fetch {main_commit_id} main").as_str())?;
111 p.send_line("")?;
112 p.expect(format!("fetching over filesystem from {error_path}...\r\n").as_str())?;
113 // not sure why the below isn't appearing
114 // p.expect(format!("fetching over filesystem from
115 // {source_path}...\r\n").as_str())?;
116 p.expect_eventually_and_print("\r\n")?;
117 // p.expect("\r\n")?;
118
119 assert!(git_repo.git_repo.find_commit(main_commit_id).is_ok());
120
121 p.exit()?;
122 for p in [51, 52, 53, 55, 56, 57] {
123 relay::shutdown_relay(8000 + p)?;
124 }
125 Ok(())
126 });
127 // launch relays
128 let _ = join!(
129 r51.listen_until_close(),
130 r52.listen_until_close(),
131 r53.listen_until_close(),
132 r55.listen_until_close(),
133 r56.listen_until_close(),
134 r57.listen_until_close(),
135 );
136 cli_tester_handle.join().unwrap()?;
137 Ok(())
138 }
139}
140
141#[tokio::test]
142#[serial]
143async fn creates_commits_from_open_proposal_with_no_warngins_printed() -> Result<()> {
144 let (events, source_git_repo) = prep_source_repo_and_events_including_proposals().await?;
145 let source_path = source_git_repo.dir.to_str().unwrap().to_string();
146
147 let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = (
148 Relay::new(8051, None, None),
149 Relay::new(8052, None, None),
150 Relay::new(8053, None, None),
151 Relay::new(8055, None, None),
152 Relay::new(8056, None, None),
153 Relay::new(8057, None, None),
154 );
155 r51.events = events.clone();
156 r55.events = events.clone();
157
158 let git_repo = prep_git_repo()?;
159
160 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
161 let branch_name = get_proposal_branch_name_from_events(&events, FEATURE_BRANCH_NAME_1)?;
162 let proposal_tip = cli_tester_create_proposal_branches_ready_to_send()?
163 .get_tip_of_local_branch(FEATURE_BRANCH_NAME_1)?;
164
165 assert!(git_repo.git_repo.find_commit(proposal_tip).is_err());
166
167 let mut p = cli_tester_after_fetch(&git_repo)?;
168 p.send_line(format!("fetch {proposal_tip} refs/heads/{branch_name}").as_str())?;
169 p.send_line("")?;
170 p.expect(format!("fetching over filesystem from {source_path}...\r\n").as_str())?;
171 // expect no errors
172 p.expect_after_whitespace("\r\n")?;
173 p.exit()?;
174 for p in [51, 52, 53, 55, 56, 57] {
175 relay::shutdown_relay(8000 + p)?;
176 }
177
178 assert!(git_repo.git_repo.find_commit(proposal_tip).is_ok());
179
180 Ok(())
181 });
182 // launch relays
183 let _ = join!(
184 r51.listen_until_close(),
185 r52.listen_until_close(),
186 r53.listen_until_close(),
187 r55.listen_until_close(),
188 r56.listen_until_close(),
189 r57.listen_until_close(),
190 );
191
192 cli_tester_handle.join().unwrap()?;
193
194 Ok(())
195}