2017-10-16 31 views
0

Gradle、Groovy、Junitを使用したCucumberフィーチャステップ定義のHttpBuilder-NG基本認証の実装に問題があります。私はBehat/PHPを使ってこのステップ定義を正常に実装しました。私は郵便配達員を使ってテストを検証しました。ここでステップ定義のHttpBuilder-NG基本認証に関する問題

はbuild.gradleファイルが

apply plugin: 'groovy' 
apply plugin: 'java' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile 'org.codehaus.groovy:groovy-all:2.4.12' 
    compile 'io.github.http-builder-ng:http-builder-ng-core:1.0.2' 
    testCompile 'junit:junit:4.12' 
    testCompile 'info.cukes:cucumber-groovy:1.2.5' 
    testCompile 'info.cukes:cucumber-junit:1.2.5' 
} 

あるのGitHub API /ユーザー/リポジトリのパスは、ユーザーのリポジトリ情報を取得するために認証を必要とするが、取得は、不正な例外を返しています。私がパスを外すと、私は成功しますが、ベースURLは認証を必要としません。ここ

import static cucumber.api.groovy.EN.* 
import cucumber.api.PendingException 
import static groovyx.net.http.HttpBuilder.configure 
import static groovyx.net.http.util.SslUtils.ignoreSslIssues 

Given(~/^I am an authenticated user$/) { -> 
    def github = configure { 
     ignoreSslIssues execution 
     request.uri = 'https://api.github.com' 
    request.auth.basic('githubUser', 'githubPassword', false) 
    }.get { 
     request.uri.path = '/user/repos' 
    } 
    assert github != null 
    println github.dump() 
} 

そして、私は(401)を取得しています例外されています:ここではGroovyのコードがあるそれはGitHubのように見えます

groovyx.net.http.HttpException: Unauthorized 
    at groovyx.net.http.NativeHandlers.failure(NativeHandlers.java:69) 
    at groovyx.net.http.HttpConfigs$BaseHttpConfig$$Lambda$9/15235276.apply(Unknown Source) 
    at groovyx.net.http.HttpBuilder$ResponseHandlerFunction.apply(HttpBuilder.java:2305) 
    at groovyx.net.http.JavaHttpBuilder$Action.lambda$execute$2(JavaHttpBuilder.java:168) 
    at groovyx.net.http.JavaHttpBuilder$Action$$Lambda$56/33475769.call(Unknown Source) 
    at groovyx.net.http.JavaHttpBuilder$ThreadLocalAuth.with(JavaHttpBuilder.java:331) 
    at groovyx.net.http.JavaHttpBuilder$Action.execute(JavaHttpBuilder.java:122) 
    at groovyx.net.http.JavaHttpBuilder.createAndExecute(JavaHttpBuilder.java:374) 
    at groovyx.net.http.JavaHttpBuilder.doGet(JavaHttpBuilder.java:381) 
    at groovyx.net.http.HttpBuilder$$Lambda$25/32560218.apply(Unknown Source) 
    at groovyx.net.http.HttpObjectConfigImpl.nullInterceptor(HttpObjectConfigImpl.java:47) 
    at groovyx.net.http.HttpObjectConfigImpl$Exec$$Lambda$23/7279823.apply(Unknown Source) 
    at groovyx.net.http.HttpBuilder.get(HttpBuilder.java:346) 
Gradle Test Executor 191 finished executing tests. 
    at groovyx.net.http.HttpBuilder.get(HttpBuilder.java:1297) 
    at groovyx.net.http.HttpBuilder$get$0.call(Unknown Source) 
    at repo-create_steps$_run_closure1.doCall(repo-create_steps.groovy:7) 
    at ?.Given I am an authenticated user(repo-create.feature:3) 
+0

この作業を行うために使用した設定をPostmanで追加してください。その例として、Postmanがあります。 – cjstehno

+0

また、 'core'ではなく' apache'や 'okhttp'クライアントの実装を試してみて、それがクライアントの1つにのみ問題があるかどうかを確認することもできます。 – cjstehno

+0

最後に、 'githubUser'と' githubPassword'があなたのコードの実際の値に置き換えられていると仮定しています。ちょうどチェックします;-) – cjstehno

答えて

0

は、基本的なサポート(https://developer.github.com/v3/auth/)を提供しませんが、それは非標準であり、

@Grab('io.github.http-builder-ng:http-builder-ng-core:1.0.2') 

import static groovyx.net.http.HttpBuilder.configure 
import static groovyx.net.http.util.SslUtils.ignoreSslIssues 

def username = 'blah' 
def password = 'blah' 
def creds = "$username:$password".bytes.encodeBase64() 

def github = configure { 
    ignoreSslIssues execution 
    request.uri = 'https://api.github.com' 
    request.headers['Authorization'] = "Basic $creds" 
}.get { 
    request.uri.path = '/user/repos' 
    response.failure { fs, obj-> 
     println "Status: ${fs.statusCode}" 
     fs.headers.each { h-> 
      println h 
     } 
    } 
} 

println github.dump() 

しかし、これはあなたの側で持っていない可能性があり、問題を提示:彼らはこのようになりますされ、Authorizationヘッダを自分で作成示唆しています。アカウントで2因子認証を有効にしているので、X-GitHub-OTP: required; :2fa-typeヘッダーが返されます(上記のリンクされているドキュメントを参照)。 2因子がない場合は、必要なものを用意する必要があります。

エラーケースに関する追加情報を得るためにfailureハンドラを追加しました。これはソリューションには必要ありません。

+0

これは3つのクライアント実装(core、apache、okhttp)すべてで機能しました。私は失敗の場合の追加コードを感謝します。 –