diff --git a/plugins/nf-wave/src/main/io/seqera/wave/plugin/SubmitContainerTokenRequest.groovy b/plugins/nf-wave/src/main/io/seqera/wave/plugin/SubmitContainerTokenRequest.groovy index c14bd5eb34..685b3f46e9 100644 --- a/plugins/nf-wave/src/main/io/seqera/wave/plugin/SubmitContainerTokenRequest.groovy +++ b/plugins/nf-wave/src/main/io/seqera/wave/plugin/SubmitContainerTokenRequest.groovy @@ -36,6 +36,11 @@ class SubmitContainerTokenRequest { */ String towerAccessToken + /** + * Tower refresh token + */ + String towerRefreshToken + /** * Tower workspace id */ diff --git a/plugins/nf-wave/src/main/io/seqera/wave/plugin/WaveClient.groovy b/plugins/nf-wave/src/main/io/seqera/wave/plugin/WaveClient.groovy index b47253ca75..f9965ff94b 100644 --- a/plugins/nf-wave/src/main/io/seqera/wave/plugin/WaveClient.groovy +++ b/plugins/nf-wave/src/main/io/seqera/wave/plugin/WaveClient.groovy @@ -144,6 +144,7 @@ class WaveClient { SubmitContainerTokenResponse sendRequest(WaveAssets assets) { final req = makeRequest(assets) req.towerAccessToken = tower.accessToken + req.towerRefreshToken = tower.refreshToken req.towerWorkspaceId = tower.workspaceId req.towerEndpoint = tower.endpoint return sendRequest(req) @@ -174,6 +175,7 @@ class WaveClient { // set the request access token request.towerAccessToken = accessToken + request.towerRefreshToken = refreshToken final body = JsonOutput.toJson(request) final uri = URI.create("${endpoint}/container-token") diff --git a/plugins/nf-wave/src/test/io/seqera/wave/plugin/WaveClientTest.groovy b/plugins/nf-wave/src/test/io/seqera/wave/plugin/WaveClientTest.groovy index ad0fd053fe..e053bd31be 100644 --- a/plugins/nf-wave/src/test/io/seqera/wave/plugin/WaveClientTest.groovy +++ b/plugins/nf-wave/src/test/io/seqera/wave/plugin/WaveClientTest.groovy @@ -600,6 +600,31 @@ class WaveClientTest extends Specification { } + def 'should send request with tower access token and refresh token' () { + given: + SysEnv.push([TOWER_WORKFLOW_ID:'1234', TOWER_REFRESH_TOKEN: 'xyz', TOWER_ACCESS_TOKEN: 'foo']) + and: + def config = [wave:[:], tower:[endpoint: 'http://foo.com']] + def sess = Mock(Session) {getConfig() >> config } + and: + def wave = Spy(new WaveClient(sess)) + def assets = Mock(WaveAssets) + def request = new SubmitContainerTokenRequest() + when: + wave.sendRequest(assets) + then: + 1 * wave.makeRequest(assets) >> request + 1 * wave.sendRequest(request) >> { List it -> + assert (it[0] == request) + assert (it[0] as SubmitContainerTokenRequest).towerAccessToken == 'foo' + assert (it[0] as SubmitContainerTokenRequest).towerRefreshToken == 'xyz' + assert (it[0] as SubmitContainerTokenRequest).towerEndpoint == 'http://foo.com' + } + + cleanup: + SysEnv.pop() + } + // --== launch web server ==-- @Shared def CONFIG_RESP = [