gocd-agent: 16.7.0 startup fixes + test improvements

- Agent now takes a full URL to the Go.CD server
- Instruct the agent to attempt restart every 30s upon failure
- Test's Accept header did not match the server's expectation
- Replace the tests' complex Awk matches with calls to `jq`

Changed files
+23 -30
nixos
modules
services
continuous-integration
gocd-agent
tests
+8 -15
nixos/modules/services/continuous-integration/gocd-agent/default.nix
···
};
goServer = mkOption {
-
default = "127.0.0.1";
+
default = "https://127.0.0.1:8154/go";
type = types.str;
description = ''
-
Address of GoCD Server to attach the Go.CD Agent to.
-
'';
-
};
-
-
goServerPort = mkOption {
-
default = 8153;
-
type = types.int;
-
description = ''
-
Port that Go.CD Server is Listening on.
+
URL of the GoCD Server to attach the Go.CD Agent to.
'';
};
···
extraOptions = mkOption {
default = [ ];
-
example = [
-
"-X debug"
+
example = [
+
"-X debug"
"-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006"
"-verbose:gc"
"-Xloggc:go-agent-gc.log"
···
config.environment.sessionVariables;
in
selectedSessionVars //
-
{
+
{
NIX_REMOTE = "daemon";
AGENT_WORK_DIR = cfg.workDir;
AGENT_STARTUP_ARGS = ''${concatStringsSep " " cfg.startupOptions}'';
···
${pkgs.jre}/bin/java ${concatStringsSep " " cfg.startupOptions} \
${concatStringsSep " " cfg.extraOptions} \
-jar ${pkgs.gocd-agent}/go-agent/agent-bootstrapper.jar \
-
${cfg.goServer} \
-
${toString cfg.goServerPort}
+
-serverUrl ${cfg.goServer}
'';
serviceConfig = {
User = cfg.user;
WorkingDirectory = cfg.workDir;
+
RestartSec = 30;
+
Restart = "on-failure";
};
};
};
+15 -15
nixos/tests/gocd-agent.nix
···
let
serverUrl = "localhost:8153/go/api/agents";
-
header = "Accept: application/vnd./go.cd/v2+json";
+
header = "Accept: application/vnd.go.cd.v2+json";
in
import ./make-test.nix ({ pkgs, ...} : {
···
maintainers = [ grahamc swarren83 ];
};
-
nodes = {
-
gocd_agent =
-
{ config, pkgs, ... }:
-
{
-
virtualisation.memorySize = 2048;
-
services.gocd-agent = {
-
enable = true;
-
};
-
services.gocd-server = {
-
enable = true;
+
nodes = {
+
gocd_agent =
+
{ config, pkgs, ... }:
+
{
+
virtualisation.memorySize = 2048;
+
services.gocd-agent = {
+
enable = true;
+
};
+
services.gocd-server = {
+
enable = true;
+
};
};
-
};
-
};
+
};
testScript = ''
startAll;
$gocd_agent->waitForUnit("gocd-server");
$gocd_agent->waitForOpenPort("8153");
$gocd_agent->waitForUnit("gocd-agent");
-
$gocd_agent->waitUntilSucceeds("curl -s -f ${serverUrl} -H '${header}' | awk -F \" '/\"uuid\":\s\"[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}/ {print $4}'");
-
$gocd_agent->waitUntilSucceeds("curl -s -f ${serverUrl} -H '${header}' | awk -F \" '/\"agent_state\":\s\"Idle\"/'");
+
$gocd_agent->waitUntilSucceeds("curl ${serverUrl} -H '${header}' | ${pkgs.jq}/bin/jq -e ._embedded.agents[0].uuid");
+
$gocd_agent->succeed("curl ${serverUrl} -H '${header}' | ${pkgs.jq}/bin/jq -e ._embedded.agents[0].agent_state | grep -q Idle");
'';
})