1

スポック テストからの HTTP(S) 呼び出しをモックするように Betamax v2.0.0-alpha-1 を構成しようとしています。非 SSL サイトへの呼び出しは機能しますが、HTTPS サイトへの呼び出しは次の例外を引き起こします。

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)
        }
    }
}
4

1 に答える 1

2

証明書を機能させるには、証明書を JRE にインポートする必要があります。スクリプトを実行すると、(コメントにあるように) 2 つのファイルが生成されます: - littleproxy_cert - littleproxy_keystore.jks

次のコマンドを実行して、証明書をインポートします。

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

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

PS実行中の例を準備するために賛成票を投じました-ここではまだ非常にまれです。

于 2016-03-21T08:38:58.883 に答える