2016-03-21 10 views
1

私はSpockテストからHTTP(S)コールを模擬するためにBetamax v2.0.0-alpha-1を設定しようとしています。コールへの非SSLサイトでは動作しますが、HTTPSサイトへの呼び出しは、次の例外が発生します。SpockテストにSSLを使用するようにBetamaxを設定するにはどうすればよいですか?

javax.ws.rs.ProcessingException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

私は、以下に示すダウンとコードを煮てきたとgroovy BetamaxTestSpec.groovyを呼び出すと、あなたの例外を与える必要があります。コードでわかるように、私はjersey-clientライブラリを使用しています。

要旨:https://gist.github.com/dedickinson/6ad96679a15b24b2e3d3

コード:

@Grab('org.spockframework:spock-core:1.0-groovy-2.4') 
@Grab('software.betamax:betamax-junit:2.0.0-alpha-1') 
@Grab('org.glassfish.jersey.core:jersey-client:2.22.1') 
import org.junit.Rule 
import software.betamax.ProxyConfiguration 
import software.betamax.TapeMode 
import software.betamax.junit.Betamax 
import software.betamax.junit.RecorderRule 
import spock.lang.Specification 

import javax.ws.rs.client.ClientBuilder 
import javax.ws.rs.core.MediaType 

import groovy.json.JsonSlurper 

class BetamaxTestSpec extends Specification { 
    @Rule 
    RecorderRule recorderRule = new RecorderRule(ProxyConfiguration.builder() 
      .sslEnabled(true) 
      .build()) 

    @Betamax(tape = 'jCenterKeywordQuery.tape', mode = TapeMode.WRITE_ONLY) 
    def "Test basic keyword query with JCenter"() { 
     given: 
     def searcher = new Searcher() 
     def result = searcher.searchJCenter('groovy*') 
     expect: 
     1 == 1 
    } 

    @Betamax(tape = 'mvnKeywordQuery.tape', mode = TapeMode.WRITE_ONLY) 
    def "Test basic keyword query with Maven Central"() { 
     given: 
     def searcher = new Searcher() 
     def result = searcher.searchMavenCentral('groovy') 
     expect: 
     1 == 1 
    } 

    class Searcher { 
     def searchJCenter(qry) { 
      new JsonSlurper().parseText ClientBuilder.newClient(). 
        target('https://api.bintray.com/search/packages/maven/'.toURI()). 
        queryParam('q', qry). 
        request(MediaType.APPLICATION_JSON_TYPE).get(String) 
     } 

     def searchMavenCentral(qry) { 
      new JsonSlurper().parseText ClientBuilder.newClient(). 
        target('http://search.maven.org/solrsearch/select'.toURI()). 
        queryParam('q', qry). 
        queryParam('rows', 20). 
        queryParam('wt', 'json'). 
        request(). 
        get(String) 
     } 
    } 
} 
+1

実行すると、「littleproxy_cert」と「littleproxy_keystore.jks」という2つのファイルが作成されます。この証明書をセットアップする必要があるかもしれません。 – Duncan

答えて

2

あなたはそれを動作させるために、JREに証明書をインポートする必要があります。 - littleproxy_cert - 証明書をインポートするにはlittleproxy_keystore.jks

次のコマンドを実行します:2つのファイルが(コメントのように)が発生しますスクリプトの実行後

keytool -import -file littleproxy_cert -alias littleproxy -keystore $JAVA_HOME/jre/lib/security/cacerts 

をデフォルトのパスワードはchangeitとです。あなたはおそらくそれを変更していない;)

P.S.実行例を準備するためにアップアップされました。

+1

ありがとうございます - それが問題を解決しました。 OS Xでsudoを使って 'keytool'を実行しなければならず、テストはHTTPSのために働いています。 – Duncan

関連する問題