From 5179f4621cb4dea41797ff39e9ee6d4cebe9b9d2 Mon Sep 17 00:00:00 2001 From: Piotr Kwiecinski <2151333+piotrkwiecinski@users.noreply.github.com> Date: Tue, 1 Apr 2025 21:51:09 +0200 Subject: [PATCH] nixosTests.buildbot: migrate to runTest Part of #386873 --- nixos/tests/all-tests.nix | 2 +- nixos/tests/buildbot.nix | 251 +++++++++++++++++++------------------- 2 files changed, 125 insertions(+), 128 deletions(-) diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index d1fe552bbc1f..2c34ed642fde 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -258,7 +258,7 @@ in btrbk-no-timer = handleTest ./btrbk-no-timer.nix { }; btrbk-section-order = handleTest ./btrbk-section-order.nix { }; budgie = handleTest ./budgie.nix { }; - buildbot = handleTest ./buildbot.nix { }; + buildbot = runTest ./buildbot.nix; buildkite-agents = handleTest ./buildkite-agents.nix { }; c2fmzq = handleTest ./c2fmzq.nix { }; caddy = handleTest ./caddy.nix { }; diff --git a/nixos/tests/buildbot.nix b/nixos/tests/buildbot.nix index 0f974594c275..1f734199c103 100644 --- a/nixos/tests/buildbot.nix +++ b/nixos/tests/buildbot.nix @@ -1,141 +1,138 @@ # Test ensures buildbot master comes up correctly and workers can connect +{ pkgs, ... }: +{ + name = "buildbot"; -import ./make-test-python.nix ( - { pkgs, ... }: - { - name = "buildbot"; + nodes = { + bbmaster = + { pkgs, ... }: + { + services.buildbot-master = { + enable = true; - nodes = { - bbmaster = - { pkgs, ... }: - { - services.buildbot-master = { - enable = true; - - # NOTE: use fake repo due to no internet in hydra ci - factorySteps = [ - "steps.Git(repourl='git://gitrepo/fakerepo.git', mode='incremental')" - "steps.ShellCommand(command=['bash', 'fakerepo.sh'])" - ]; - changeSource = [ - "changes.GitPoller('git://gitrepo/fakerepo.git', workdir='gitpoller-workdir', branch='master', pollInterval=300)" - ]; - }; - networking.firewall.allowedTCPPorts = [ - 8010 - 8011 - 9989 + # NOTE: use fake repo due to no internet in hydra ci + factorySteps = [ + "steps.Git(repourl='git://gitrepo/fakerepo.git', mode='incremental')" + "steps.ShellCommand(command=['bash', 'fakerepo.sh'])" ]; - environment.systemPackages = with pkgs; [ + changeSource = [ + "changes.GitPoller('git://gitrepo/fakerepo.git', workdir='gitpoller-workdir', branch='master', pollInterval=300)" + ]; + }; + networking.firewall.allowedTCPPorts = [ + 8010 + 8011 + 9989 + ]; + environment.systemPackages = with pkgs; [ + git + buildbot-full + ]; + }; + + bbworker = + { pkgs, ... }: + { + services.buildbot-worker = { + enable = true; + masterUrl = "bbmaster:9989"; + }; + environment.systemPackages = with pkgs; [ + git + buildbot-worker + ]; + }; + + gitrepo = + { pkgs, ... }: + { + services.openssh.enable = true; + networking.firewall.allowedTCPPorts = [ + 22 + 9418 + ]; + environment.systemPackages = with pkgs; [ git ]; + systemd.services.git-daemon = { + description = "Git daemon for the test"; + wantedBy = [ "multi-user.target" ]; + after = [ + "network.target" + "sshd.service" + ]; + + serviceConfig.Restart = "always"; + path = with pkgs; [ + coreutils git - buildbot-full + openssh ]; - }; - - bbworker = - { pkgs, ... }: - { - services.buildbot-worker = { - enable = true; - masterUrl = "bbmaster:9989"; + environment = { + HOME = "/root"; }; - environment.systemPackages = with pkgs; [ - git - buildbot-worker - ]; + preStart = '' + git config --global user.name 'Nobody Fakeuser' + git config --global user.email 'nobody\@fakerepo.com' + rm -rvf /srv/repos/fakerepo.git /tmp/fakerepo + mkdir -pv /srv/repos/fakerepo ~/.ssh + ssh-keyscan -H gitrepo > ~/.ssh/known_hosts + cat ~/.ssh/known_hosts + + mkdir -p /src/repos/fakerepo + cd /srv/repos/fakerepo + rm -rf * + git init + echo -e '#!/bin/sh\necho fakerepo' > fakerepo.sh + cat fakerepo.sh + touch .git/git-daemon-export-ok + git add fakerepo.sh .git/git-daemon-export-ok + git commit -m fakerepo + ''; + script = '' + git daemon --verbose --export-all --base-path=/srv/repos --reuseaddr + ''; }; + }; + }; - gitrepo = - { pkgs, ... }: - { - services.openssh.enable = true; - networking.firewall.allowedTCPPorts = [ - 22 - 9418 - ]; - environment.systemPackages = with pkgs; [ git ]; - systemd.services.git-daemon = { - description = "Git daemon for the test"; - wantedBy = [ "multi-user.target" ]; - after = [ - "network.target" - "sshd.service" - ]; + testScript = '' + gitrepo.wait_for_unit("git-daemon.service") + gitrepo.wait_for_unit("multi-user.target") - serviceConfig.Restart = "always"; - path = with pkgs; [ - coreutils - git - openssh - ]; - environment = { - HOME = "/root"; - }; - preStart = '' - git config --global user.name 'Nobody Fakeuser' - git config --global user.email 'nobody\@fakerepo.com' - rm -rvf /srv/repos/fakerepo.git /tmp/fakerepo - mkdir -pv /srv/repos/fakerepo ~/.ssh - ssh-keyscan -H gitrepo > ~/.ssh/known_hosts - cat ~/.ssh/known_hosts + with subtest("Repo is accessible via git daemon"): + bbmaster.systemctl("start network-online.target") + bbmaster.wait_for_unit("network-online.target") + bbmaster.succeed("rm -rfv /tmp/fakerepo") + bbmaster.succeed("git clone git://gitrepo/fakerepo /tmp/fakerepo") - mkdir -p /src/repos/fakerepo - cd /srv/repos/fakerepo - rm -rf * - git init - echo -e '#!/bin/sh\necho fakerepo' > fakerepo.sh - cat fakerepo.sh - touch .git/git-daemon-export-ok - git add fakerepo.sh .git/git-daemon-export-ok - git commit -m fakerepo - ''; - script = '' - git daemon --verbose --export-all --base-path=/srv/repos --reuseaddr - ''; - }; - }; - }; + with subtest("Master service and worker successfully connect"): + bbmaster.wait_for_unit("buildbot-master.service") + bbmaster.wait_until_succeeds("curl --fail -s --head http://bbmaster:8010") + bbworker.systemctl("start network-online.target") + bbworker.wait_for_unit("network-online.target") + bbworker.succeed("nc -z bbmaster 8010") + bbworker.succeed("nc -z bbmaster 9989") + bbworker.wait_for_unit("buildbot-worker.service") - testScript = '' - gitrepo.wait_for_unit("git-daemon.service") - gitrepo.wait_for_unit("multi-user.target") + with subtest("Stop buildbot worker"): + bbmaster.succeed("systemctl -l --no-pager status buildbot-master") + bbmaster.succeed("systemctl stop buildbot-master") + bbworker.fail("nc -z bbmaster 8010") + bbworker.fail("nc -z bbmaster 9989") + bbworker.succeed("systemctl -l --no-pager status buildbot-worker") + bbworker.succeed("systemctl stop buildbot-worker") - with subtest("Repo is accessible via git daemon"): - bbmaster.systemctl("start network-online.target") - bbmaster.wait_for_unit("network-online.target") - bbmaster.succeed("rm -rfv /tmp/fakerepo") - bbmaster.succeed("git clone git://gitrepo/fakerepo /tmp/fakerepo") + with subtest("Buildbot daemon mode works"): + bbmaster.succeed( + "buildbot create-master /tmp", + "mv -fv /tmp/master.cfg.sample /tmp/master.cfg", + "sed -i 's/8010/8011/' /tmp/master.cfg", + "buildbot start /tmp", + "nc -z bbmaster 8011", + ) + bbworker.wait_until_succeeds("curl --fail -s --head http://bbmaster:8011") + bbmaster.wait_until_succeeds("buildbot stop /tmp") + bbworker.fail("nc -z bbmaster 8011") + ''; - with subtest("Master service and worker successfully connect"): - bbmaster.wait_for_unit("buildbot-master.service") - bbmaster.wait_until_succeeds("curl --fail -s --head http://bbmaster:8010") - bbworker.systemctl("start network-online.target") - bbworker.wait_for_unit("network-online.target") - bbworker.succeed("nc -z bbmaster 8010") - bbworker.succeed("nc -z bbmaster 9989") - bbworker.wait_for_unit("buildbot-worker.service") - - with subtest("Stop buildbot worker"): - bbmaster.succeed("systemctl -l --no-pager status buildbot-master") - bbmaster.succeed("systemctl stop buildbot-master") - bbworker.fail("nc -z bbmaster 8010") - bbworker.fail("nc -z bbmaster 9989") - bbworker.succeed("systemctl -l --no-pager status buildbot-worker") - bbworker.succeed("systemctl stop buildbot-worker") - - with subtest("Buildbot daemon mode works"): - bbmaster.succeed( - "buildbot create-master /tmp", - "mv -fv /tmp/master.cfg.sample /tmp/master.cfg", - "sed -i 's/8010/8011/' /tmp/master.cfg", - "buildbot start /tmp", - "nc -z bbmaster 8011", - ) - bbworker.wait_until_succeeds("curl --fail -s --head http://bbmaster:8011") - bbmaster.wait_until_succeeds("buildbot stop /tmp") - bbworker.fail("nc -z bbmaster 8011") - ''; - - meta.maintainers = pkgs.lib.teams.buildbot.members; - } -) + meta.maintainers = pkgs.lib.teams.buildbot.members; +}