1616
1717package nextflow.scm
1818
19+ import org.eclipse.jgit.transport.CredentialItem
20+ import org.eclipse.jgit.transport.URIish
1921import spock.lang.Ignore
2022import spock.lang.Requires
2123import spock.lang.Specification
@@ -106,7 +108,11 @@ class BitbucketServerRepositoryProviderTest extends Specification {
106108 def ' should list branches' () {
107109 given :
108110 def token = System . getenv(' NXF_BITBUCKET_SERVER_ACCESS_TOKEN' )
109- def config = new ProviderConfig (' bbs' , [server :' http://slurm.seqera.io:7990' , platform :' bitbucketsever' ]). setAuth(token)
111+ def items = token. tokenize(' :' )
112+
113+ def config = items > 1
114+ ? new ProviderConfig (' bbs' , [server :' http://slurm.seqera.io:7990' , platform :' bitbucketsever' ]). setUser(items[0 ]). setToken(items[1 ])
115+ : new ProviderConfig (' bbs' , [server :' http://slurm.seqera.io:7990' , platform :' bitbucketsever' ]). setToken(token)
110116 and :
111117 def repo = new BitbucketServerRepositoryProvider (' scm/hello/hello' , config)
112118
@@ -131,6 +137,95 @@ class BitbucketServerRepositoryProviderTest extends Specification {
131137 result. contains( new RepositoryProvider.TagInfo (' v1.0' , ' c62df3d9c2464adcaa0fb6c978c8e32e2672b191' ) )
132138 }
133139
140+ @Unroll
141+ def ' should validate hasCredentials' () {
142+ given :
143+ def provider = new BitbucketServerRepositoryProvider (' proj/repo' , PROVIDER )
144+
145+ expect :
146+ provider. hasCredentials() == EXPECTED
147+
148+ where :
149+ EXPECTED | PROVIDER
150+ false | new ProviderConfig (' bbs' , [platform :' bitbucketserver' ])
151+ false | new ProviderConfig (' bbs' , [platform :' bitbucketserver' ]). setUser(' foo' )
152+ false | new ProviderConfig (' bbs' , [platform :' bitbucketserver' ]). setPassword(' bar' )
153+ true | new ProviderConfig (' bbs' , [platform :' bitbucketserver' ]). setToken(' xyz' )
154+ true | new ProviderConfig (' bbs' , [platform :' bitbucketserver' ]). setUser(' foo' ). setPassword(' bar' )
155+ true | new ProviderConfig (' bbs' , [platform :' bitbucketserver' ]). setUser(' foo' ). setToken(' xyz' )
156+ true | new ProviderConfig (' bbs' , [platform :' bitbucketserver' ]). setUser(' foo' ). setPassword(' bar' ). setToken(' xyz' )
157+ }
158+
159+ @Unroll
160+ def ' should validate getAuth' () {
161+ given :
162+ def provider = new BitbucketServerRepositoryProvider (' proj/repo' , PROVIDER )
163+
164+ expect :
165+ provider. getAuth() == EXPECTED as String []
166+
167+ where :
168+ EXPECTED | PROVIDER
169+ null | new ProviderConfig (' bbs' , [platform :' bitbucketserver' ])
170+ [" Authorization" , " Bearer xyz" ] | new ProviderConfig (' bbs' , [platform :' bitbucketserver' ]). setToken(' xyz' )
171+ [" Authorization" , " Basic ${ "foo:bar".bytes.encodeBase64()} " ] | new ProviderConfig (' bbs' , [platform :' bitbucketserver' ]). setUser(' foo' ). setPassword(' bar' )
172+ [" Authorization" , " Bearer xyz" ] | new ProviderConfig (' bbs' , [platform :' bitbucketserver' ]). setUser(' foo' ). setToken(' xyz' )
173+ [" Authorization" , " Bearer xyz" ] | new ProviderConfig (' bbs' , [platform :' bitbucketserver' ]). setUser(' foo' ). setPassword(' bar' ). setToken(' xyz' )
174+ }
175+
176+ def ' should pass token as password in getGitCredentials' () {
177+ given :
178+ def config = new ProviderConfig (' bbs' , [platform :' bitbucketserver' ])
179+ .setUser(' foo' )
180+ .setToken(' xyz' )
181+ def provider = new BitbucketServerRepositoryProvider (' proj/repo' , config)
182+ def user = new CredentialItem.Username ()
183+ def pass = new CredentialItem.Password ()
184+
185+ when :
186+ def creds = provider. getGitCredentials()
187+ creds. get(new URIish (' https://bitbucket.server.com/scm/proj/repo.git' ), user, pass)
188+
189+ then :
190+ user. value == ' foo'
191+ new String (pass. value) == ' xyz'
192+ }
193+
194+ def ' should use token-only in getGitCredentials when no user is set' () {
195+ given :
196+ def config = new ProviderConfig (' bbs' , [platform :' bitbucketserver' ])
197+ .setAuth(' xyz' )
198+ def provider = new BitbucketServerRepositoryProvider (' proj/repo' , config)
199+ def user = new CredentialItem.Username ()
200+ def pass = new CredentialItem.Password ()
201+
202+ when :
203+ def creds = provider. getGitCredentials()
204+ creds. get(new URIish (' https://bitbucket.server.com/scm/proj/repo.git' ), user, pass)
205+
206+ then :
207+ user. value == ' '
208+ new String (pass. value) == ' xyz'
209+ }
210+
211+ def ' should fall back to password in getGitCredentials when token absent' () {
212+ given :
213+ def config = new ProviderConfig (' bbs' , [platform :' bitbucketserver' ])
214+ .setUser(' foo' )
215+ .setPassword(' bar' )
216+ def provider = new BitbucketServerRepositoryProvider (' proj/repo' , config)
217+ def user = new CredentialItem.Username ()
218+ def pass = new CredentialItem.Password ()
219+
220+ when :
221+ def creds = provider. getGitCredentials()
222+ creds. get(new URIish (' https://bitbucket.server.com/scm/proj/repo.git' ), user, pass)
223+
224+ then :
225+ user. value == ' foo'
226+ new String (pass. value) == ' bar'
227+ }
228+
134229 @Requires ( { System .getenv(' NXF_BITBUCKET_SERVER_ACCESS_TOKEN' ) } )
135230 def ' should list root directory contents' () {
136231 given :
0 commit comments