at master 4.5 kB view raw
1# Test ensures buildbot master comes up correctly and workers can connect 2{ pkgs, ... }: 3{ 4 name = "buildbot"; 5 6 nodes = { 7 bbmaster = 8 { pkgs, ... }: 9 { 10 services.buildbot-master = { 11 enable = true; 12 13 # NOTE: use fake repo due to no internet in hydra ci 14 factorySteps = [ 15 "steps.Git(repourl='git://gitrepo/fakerepo.git', mode='incremental')" 16 "steps.ShellCommand(command=['bash', 'fakerepo.sh'])" 17 ]; 18 changeSource = [ 19 "changes.GitPoller('git://gitrepo/fakerepo.git', workdir='gitpoller-workdir', branch='master', pollInterval=300)" 20 ]; 21 }; 22 networking.firewall.allowedTCPPorts = [ 23 8010 24 8011 25 9989 26 ]; 27 environment.systemPackages = with pkgs; [ 28 git 29 buildbot-full 30 ]; 31 }; 32 33 bbworker = 34 { pkgs, ... }: 35 { 36 services.buildbot-worker = { 37 enable = true; 38 masterUrl = "bbmaster:9989"; 39 }; 40 environment.systemPackages = with pkgs; [ 41 git 42 buildbot-worker 43 ]; 44 }; 45 46 gitrepo = 47 { pkgs, ... }: 48 { 49 services.openssh.enable = true; 50 networking.firewall.allowedTCPPorts = [ 51 22 52 9418 53 ]; 54 environment.systemPackages = with pkgs; [ git ]; 55 systemd.services.git-daemon = { 56 description = "Git daemon for the test"; 57 wantedBy = [ "multi-user.target" ]; 58 after = [ 59 "network.target" 60 "sshd.service" 61 ]; 62 63 serviceConfig.Restart = "always"; 64 path = with pkgs; [ 65 coreutils 66 git 67 openssh 68 ]; 69 environment = { 70 HOME = "/root"; 71 }; 72 preStart = '' 73 git config --global user.name 'Nobody Fakeuser' 74 git config --global user.email 'nobody\@fakerepo.com' 75 rm -rvf /srv/repos/fakerepo.git /tmp/fakerepo 76 mkdir -pv /srv/repos/fakerepo ~/.ssh 77 ssh-keyscan -H gitrepo > ~/.ssh/known_hosts 78 cat ~/.ssh/known_hosts 79 80 mkdir -p /src/repos/fakerepo 81 cd /srv/repos/fakerepo 82 rm -rf * 83 git init 84 echo -e '#!/bin/sh\necho fakerepo' > fakerepo.sh 85 cat fakerepo.sh 86 touch .git/git-daemon-export-ok 87 git add fakerepo.sh .git/git-daemon-export-ok 88 git commit -m fakerepo 89 ''; 90 script = '' 91 git daemon --verbose --export-all --base-path=/srv/repos --reuseaddr 92 ''; 93 }; 94 }; 95 }; 96 97 testScript = '' 98 gitrepo.wait_for_unit("git-daemon.service") 99 gitrepo.wait_for_unit("multi-user.target") 100 101 with subtest("Repo is accessible via git daemon"): 102 bbmaster.systemctl("start network-online.target") 103 bbmaster.wait_for_unit("network-online.target") 104 bbmaster.succeed("rm -rfv /tmp/fakerepo") 105 bbmaster.succeed("git clone git://gitrepo/fakerepo /tmp/fakerepo") 106 107 with subtest("Master service and worker successfully connect"): 108 bbmaster.wait_for_unit("buildbot-master.service") 109 bbmaster.wait_until_succeeds("curl --fail -s --head http://bbmaster:8010") 110 bbworker.systemctl("start network-online.target") 111 bbworker.wait_for_unit("network-online.target") 112 bbworker.succeed("nc -z bbmaster 8010") 113 bbworker.succeed("nc -z bbmaster 9989") 114 bbworker.wait_for_unit("buildbot-worker.service") 115 116 with subtest("Stop buildbot worker"): 117 bbmaster.succeed("systemctl -l --no-pager status buildbot-master") 118 bbmaster.succeed("systemctl stop buildbot-master") 119 bbworker.fail("nc -z bbmaster 8010") 120 bbworker.fail("nc -z bbmaster 9989") 121 bbworker.succeed("systemctl -l --no-pager status buildbot-worker") 122 bbworker.succeed("systemctl stop buildbot-worker") 123 124 with subtest("Buildbot daemon mode works"): 125 bbmaster.succeed( 126 "buildbot create-master /tmp", 127 "mv -fv /tmp/master.cfg.sample /tmp/master.cfg", 128 "sed -i 's/8010/8011/' /tmp/master.cfg", 129 "buildbot start /tmp", 130 "nc -z bbmaster 8011", 131 ) 132 bbworker.wait_until_succeeds("curl --fail -s --head http://bbmaster:8011") 133 bbmaster.wait_until_succeeds("buildbot stop /tmp") 134 bbworker.fail("nc -z bbmaster 8011") 135 ''; 136 137 meta.maintainers = pkgs.lib.teams.buildbot.members; 138}