From bf025b4977543a371df9dbdddfe9cc2f02f2a8d0 Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Sun, 9 Feb 2025 23:56:38 +0100 Subject: First integration test Sets up a whole slew of docker instances, all started from clean slate for test. --- server/tests/integration_test.rs | 128 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 server/tests/integration_test.rs (limited to 'server/tests/integration_test.rs') diff --git a/server/tests/integration_test.rs b/server/tests/integration_test.rs new file mode 100644 index 0000000..242655b --- /dev/null +++ b/server/tests/integration_test.rs @@ -0,0 +1,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)); + } +} -- cgit v1.2.3-70-g09d2