2016-03-21 14 views
1

Betamax v2.0.0-alpha-1'i spock testlerimden HTTP (S) çağrılarını aldatmaya çalışıyorum. SSL olmayan sitelere Aramalar çalışmak ancak bir HTTPS sitesine bir çağrı şu duruma neden olur:Betamax'ı Spock testlerim için SSL kullanacak şekilde nasıl yapılandırabilirim?

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 

ben kod aşağı aşağıda gösterilen ve groovy BetamaxTestSpec.groovy arayarak size özel durum vermelidir haşlanmış ettik. Kodda gördüğünüz gibi jersey-client kütüphanesini kullanıyorum.

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

Kodu:

@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

Çalıştırıldığında, iki dosyanın oluşturulduğunu görürsünüz: "littleproxy_cert" ve "littleproxy_keystore.jks". Bu sertifikayı ayarlamanız gerekebilir. – Duncan

cevap

2

Bunu çalışması için JRE sertifika alma gerekiyor. littleproxy_cert - - littleproxy_keystore.jks

çalıştırın aşağıdaki komutu sertifikası almak için: (yorumlar gibi) oluşacak komut dosyası iki dosya çalıştırdıktan sonra

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

Varsayılan şifre changeit olduğunu. Muhtemelen değiştirmediniz;)

P.S. Çalışmakta olan bir örnek hazırlamak için aşağı çekildi - hala burada çok nadir.

+1

Bunun için teşekkürler - sorunu çözdü. OS X üzerinde sudo ile 'keytool' çalıştırmak zorunda kaldı ve test HTTPS için çalışıyor. – Duncan

İlgili konular