summaryrefslogtreecommitdiff
path: root/server/tests/integration_test.rs
blob: 200657e88d9e50ff39eaa09fbb93d8035b1a54be (plain)
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
129
130
use std::path::PathBuf;
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, "ssh-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, "ssh-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());
    let remote_git_key = PathBuf::from(ctx.remote_git_key());
    common::create_project(ctx, &mut client1, "fake", &remote_git, &remote_git_key)
        .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));
    }
}