From 774d0b446ffa5b72ec06445d75cedc9b73a79c20 Mon Sep 17 00:00:00 2001 From: Jonathan Bernard Date: Wed, 26 Dec 2018 23:43:44 -0600 Subject: [PATCH] Fix typo in active runs API, add functional test for same. --- src/main/nim/strawbosspkg/server.nim | 11 ++++---- src/test/nim/functional/tserver.nim | 38 ++++++++++++++++++++++++--- src/test/test-project | 2 +- src/test/test-project.tar.gz | Bin 14493 -> 14968 bytes strawboss.nimble | 2 +- strawboss.projectdef.json | 1 - 6 files changed, 42 insertions(+), 12 deletions(-) diff --git a/src/main/nim/strawbosspkg/server.nim b/src/main/nim/strawbosspkg/server.nim index c64635a..5a8e36c 100644 --- a/src/main/nim/strawbosspkg/server.nim +++ b/src/main/nim/strawbosspkg/server.nim @@ -266,17 +266,16 @@ proc start*(cfg: StrawBossConfig): void = checkAuth() + var details = "" try: let activeRuns = workers .filterIt(it.process.running and it.projectName == @"projectName") - .mapIt(cfg.getRun(@"projecName", $it.runId)); + .mapIt(cfg.getRun(@"projectName", $it.runId)); resp($(%activeRuns), JSON) + except NotFoundException: + jsonResp(Http404, getCurrentExceptionMsg()) except: - try: raise getCurrentException() - except NotFoundException: - jsonResp(Http404, getCurrentExceptionMsg()) - except: - json500Resp(getCurrentException(), "problem loading active runs") + json500Resp(getCurrentException(), "problem loading active runs") get "/project/@projectName/run/@runId": ## Details for a specific run diff --git a/src/test/nim/functional/tserver.nim b/src/test/nim/functional/tserver.nim index 0c0f1b2..fa81b92 100644 --- a/src/test/nim/functional/tserver.nim +++ b/src/test/nim/functional/tserver.nim @@ -2,6 +2,7 @@ import cliutils, httpclient, json, os, osproc, sequtils, strutils, tempfile, times, unittest, untar, uuids from langutils import sameContents +from algorithm import sorted import ../testutil import ../../../main/nim/strawbosspkg/configuration @@ -205,9 +206,40 @@ suite "strawboss server": # Run the "build" step # Kick off a build that depends on "build" (which was run in the last test) - # TODO - #test "kick off multiple runs and check the list of active runs via the API": - # check false + test "kick off multiple runs and check the list of active runs via the API": + let http = newAuthenticatedHttpClient(apiBase, "bob@builder.com", "password") + + # Kick off multiple runs of the "long-running" job + let queuedRuns = toSeq((1..3)).map(proc (idx: int): Run = + let resp = http.post(apiBase & "/project/" & testProjName & "/step/long-running/run/0.3.1") + check resp.status.startsWith("200") + + return parseRun(parseJson(resp.body))) + + # Collect run ids. + let runIds = queuedRuns.mapIt($(it.id)).sorted(cmpIgnoreCase) + + # Check on the runs + let getActiveResp = http.get(apiBase & "/project/" & testProjName & "/runs/active") + check getActiveResp.status.startsWith("200") + + let activeRuns = parseJson(getActiveResp.body).getElems().mapIt(parseRun(it)) + let activeRunIds = activeRuns.mapIt($(it.id)).sorted(cmpIgnoreCase) + + # Make sure we see all runs in the active state. + check runIds == activeRunIds + + let completedRuns = runIds.map(proc (runId: string): Run = + return http.waitForBuild(apiBase, testProjName, runId)) + + # Make sure all are completed and all are accounted for + check completedRuns.allIt(it.status.state == BuildState.complete) + check completedRuns.mapIt($(it.id)).sorted(cmpIgnoreCase) == runIds; + + # Check that there are no more active runs + let getActiveResp2 = http.get(apiBase & "/project/" & testProjName & "/runs/active") + let remainingActiveRuns = parseJson(getActiveResp2.body).getElems().mapIt(parseRun(it)) + check remainingActiveRuns.len == 0 # Last-chance catch to kill the server in case some test err'ed and didn't # reach it's teardown handler diff --git a/src/test/test-project b/src/test/test-project index 127be8f..ab883bd 160000 --- a/src/test/test-project +++ b/src/test/test-project @@ -1 +1 @@ -Subproject commit 127be8f66fcc6d4d223acf56668d42ff9c37bfb0 +Subproject commit ab883bd9602a1373347a23c8bee4ed28dd475aec diff --git a/src/test/test-project.tar.gz b/src/test/test-project.tar.gz index ebf10e030d1a3484a1671d016251c8cb63675a4b..57e8dd452b07717e864ac4e6fe4d28b559efc5e7 100644 GIT binary patch literal 14968 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

m?4ss<@`W3 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