2016-03-21 9 views
1

Ich habe versucht, Betamax v2.0.0-alpha-1 zu konfigurieren, um HTTP (S) -Aufrufe von meinen Spock-Tests nachzuahmen. Anrufe an Nicht-SSL-Sites arbeiten, aber ein Anruf an eine HTTPS-Site führt die folgende Ausnahme:Wie konfiguriere ich Betamax, um SSL für meine Spock-Tests zu verwenden?

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 

Ich habe den Code unten auf das unten gezeigt gekocht und groovy BetamaxTestSpec.groovy Aufruf sollten Sie die Ausnahme geben. Wie Sie im Code sehen können, verwende ich die Jersey-Client-Bibliothek.

Gist: https://gist.github.com/dedickinson/6ad96679a15b24b2e3d3

Code:

@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

Wenn er gestartet wird, werden Sie zwei Dateien erstellt bemerken: „littleproxy_cert“ und „littleproxy_keystore.jks“. Möglicherweise muss ich dieses Zertifikat einrichten. – Duncan

Antwort

2

Sie müssen das Zertifikat JRE importieren, um es zu arbeiten. das Skript zwei Dateien Nach dem Ausführen wird (wie in den Kommentaren) auftreten: - littleproxy_cert - littleproxy_keystore.jks

Führen Sie den folgenden Befehl, um das Zertifikat zu importieren:

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

Das Standardpasswort ist changeit. Sie haben es wahrscheinlich nicht geändert;)

P.S. Upvoted für die Vorbereitung eines laufenden Beispiels - noch so selten hier.

+1

Vielen Dank dafür - es hat das Problem gelöst. Ich musste 'keytool' mit sudo unter OS X ausführen und der Test funktioniert für HTTPS. – Duncan