1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
use std::thread::sleep;
use std::time::Duration;
use test_context::test_context;
use tokio::fs;
mod common;
const TESTKEY1: &str = "-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAIEAspbADQDeHyGkqeo6WLoPcEJ6+2B5X94cJUMopqNdh9Kee2YJGW5+
PiUTPj2g/7fGk0zZkoXE3VxheKBdsRY8QuX/LsZdFBkC5OOWCWfB14mJKthPgGWlL9gybV
HyTHTVmhkBD3puhVMllUWHLq21sY3jdj4aon8rZNpHLD8mVmsAAAIIcJ0+zHCdPswAAAAH
c3NoLXJzYQAAAIEAspbADQDeHyGkqeo6WLoPcEJ6+2B5X94cJUMopqNdh9Kee2YJGW5+Pi
UTPj2g/7fGk0zZkoXE3VxheKBdsRY8QuX/LsZdFBkC5OOWCWfB14mJKthPgGWlL9gybVHy
THTVmhkBD3puhVMllUWHLq21sY3jdj4aon8rZNpHLD8mVmsAAAADAQABAAAAgHpEtaXxcy
GzQe5G+71lXU6JZXOXQGH/ShvE2B8Gd/GWpIRtfktYF7xqW7tgLEsHQj/0/HzRcs/vAJi6
iorEY2pwDdSrBdklOZEyRUhvLnuDBrBhFMktZhumZOsKsGXE0ysnyEK8KCPYow7H8azchi
TzHSBGQyRut/y87zU/BT4pAAAAQF3f2MrjYstJot8SVqizkmVzX5SX8XhReCGEpAUeETNF
/inHlEmPl17rr6knzu/fiWC9hmjHfQ/QMgemhik/MmoAAABBAOhHNz7KgIc+4HlQJkAHxA
z/Juixg3nLmAKxar+WvABn1/brN4HmsI3VRvZnChpcsntuS3wm2mywCg1pGaKJPA0AAABB
AMTT22KcAbU6HOpb059GTr8geQaKd84lQOEchEEUkXI/5cxqNq4BjtQNMghaGbYPUwP/4H
syLbjecIEiDAa9JlcAAAANdGhlX2prQHdpbGxvdwECAwQFBg==
-----END OPENSSH PRIVATE KEY-----
";
const TESTKEY1_PUB: &str = "AAAAB3NzaC1yc2EAAAADAQABAAAAgQCylsANAN4fIa\
Sp6jpYug9wQnr7YHlf3hwlQyimo12H0p57ZgkZbn4+JRM+PaD/t8aTTNmShcTdXGF4oF2x\
FjxC5f8uxl0UGQLk45YJZ8HXiYkq2E+AZaUv2DJtUfJMdNWaGQEPem6FUyWVRYcurbWxje\
N2Phqifytk2kcsPyZWaw==";
const TESTKEY2: &str = "-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAIEAsPcgaQGgRevDiPX7lve4AyycMIT8ZcnQ93z1IeIEWlTNzcRofI/8
7tcvZL0rR/kHLGdbDYE2cfmvVa13cF0wPTPibaJP8vZbpF5s4yvJXLcDpC7gB/kTMQ0b72
KFL6J/nsQreY8qaq/JNT2XMpHZ7lUHE8cLZO5KsJsImtowQksAAAIIl0WVZZdFlWUAAAAH
c3NoLXJzYQAAAIEAsPcgaQGgRevDiPX7lve4AyycMIT8ZcnQ93z1IeIEWlTNzcRofI/87t
cvZL0rR/kHLGdbDYE2cfmvVa13cF0wPTPibaJP8vZbpF5s4yvJXLcDpC7gB/kTMQ0b72KF
L6J/nsQreY8qaq/JNT2XMpHZ7lUHE8cLZO5KsJsImtowQksAAAADAQABAAAAgEZ1vxPQL+
5nFu27czcC3uN0qaOv74bfujIwMLIS+cS1q1PYdfnSotS+HQKxR0Ba6P5HELvpzLHIxoUI
klvM3t11M+x6cLmZi4zLQufiwojsBCFFsDwAIW95CW2iNmRyPB4TJwOKKEmnRJnqFCDalk
bb+wOOpCLMCISVqhSVamEhAAAAQQCwcXfOGOJa0MgFiVoU2GQuLAXu4MBA3NWXKsD6gY8q
bZrXdZjEtASFi8BTp7x0FZZNg5VidqLuQrLa+u38KYAUAAAAQQDqqHxXCItVlmU1+iB7mX
Tih/NTiaJykswnAauKIO2X2okPY0pU/S1JSsGbb02pqBrTqGpdiUqESMdhAcoMCp7jAAAA
QQDBD2MOIH7HULFElpj09LYGi+y5Lnhbu4Rn97SIyZiLyYTFMcKhkDtEGF6myTtF9D16U7
KtQ4lA6EyRX9rgP4N5AAAADXRoZV9qa0B3aWxsb3cBAgMEBQ==
-----END OPENSSH PRIVATE KEY-----
";
const TESTKEY2_PUB: &str = "AAAAB3NzaC1yc2EAAAADAQABAAAAgQCw9yBpAaBF68\
OI9fuW97gDLJwwhPxlydD3fPUh4gRaVM3NxGh8j/zu1y9kvStH+QcsZ1sNgTZx+a9VrXdw\
XTA9M+Jtok/y9lukXmzjK8lctwOkLuAH+RMxDRvvYoUvon+exCt5jypqr8k1PZcykdnuVQ\
cTxwtk7kqwmwia2jBCSw==";
#[test_context(common::DockerComposeContext)]
#[tokio::test]
async fn test_sanity(ctx: &mut common::DockerComposeContext) {
let mut client1 = common::create_client().expect("client1");
common::login(ctx, &mut client1, "user01", "password1")
.await
.expect("user01 login");
common::user_key_add(ctx, &mut client1, "sha-rsa", TESTKEY1_PUB)
.await
.expect("user01 key add");
ctx.setup_ssh_key("client1", TESTKEY1)
.await
.expect("user01 ssh_config setup");
let mut client2 = common::create_client().expect("client2");
common::login(ctx, &mut client2, "user02", "password2")
.await
.expect("user02 login");
common::user_key_add(ctx, &mut client2, "sha-rsa", TESTKEY2_PUB)
.await
.expect("user02 key add");
ctx.setup_ssh_key("client2", TESTKEY2)
.await
.expect("user02 ssh_config setup");
let remote_git = String::from(ctx.remote_git());
common::create_project(ctx, &mut client1, "fake", &remote_git)
.await
.expect("create fake project");
ctx.git_clone("client1").await.expect("git clone user01");
{
let dir = ctx.git_dir("client1");
ctx.git_cmd("client1", &["config", "set", "user.name", "John Smith"])
.await
.expect("config set");
ctx.git_cmd(
"client1",
&["config", "set", "user.email", "user01@example.org"],
)
.await
.expect("config set");
ctx.git_cmd("client1", &["checkout", "-b", "user01/review1"])
.await
.expect("checkout");
fs::write(dir.join("README"), "Hello World!")
.await
.expect("rewrite README");
fs::write(dir.join("empty"), "")
.await
.expect("create empty");
ctx.git_cmd("client1", &["add", "README", "empty"])
.await
.expect("git add");
ctx.git_cmd("client1", &["commit", "-m", "Improve spelling"])
.await
.expect("git commit");
ctx.git_cmd(
"client1",
&["push", "--set-upstream", "origin", "user01/review1"],
)
.await
.expect("git push");
}
for _ in 0..5 {
let reviews = common::list_reviews(ctx, &mut client2, "fake")
.await
.expect("list reviews");
if reviews.reviews.len() > 0 {
assert_eq!(reviews.reviews[0].branch, "user01/review1");
break;
}
sleep(Duration::from_millis(500));
}
}
|