2015-06-05 15 views
6

Yaylı önyükleme entegrasyon testine katıştırılmış elasticsearch eklemenin yolunu arıyorum.Elasticsearch Yay önyükleme entegrasyonu testi

Elastik arama entegrasyon testine baktım ama her ikisi de farklı test koşucusu kullanması gerektiği için bahar botu ile birlikte çalışmıyor.

Ben maalesef hata ile çalışmaz aşağıda bir sınıf testi:

java.lang.IllegalStateException: No context information for thread: Thread[id=1, name=main, state=RUNNABLE, group=main]. Is this thread running under a class com.carrotsearch.randomizedtesting.RandomizedRunner runner context? Add @RunWith(class com.carrotsearch.randomizedtesting.RandomizedRunner.class) to your test class. Make sure your code accesses random contexts within @BeforeClass and @AfterClass boundary (for example, static test class initializers are not permitted to access random contexts).

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = App.class) 
@WebAppConfiguration 
@IntegrationTest("server.port:0") 
public class TestExample extends ElasticsearchIntegrationTest { 

    TestRestTemplate testRestTemplate = new TestRestTemplate(); 

    @Value("${local.server.port}") 
    int port; 

    @Test 
    public void testOne(){ 
     ResponseEntity<String> results = testRestTemplate.getForEntity(String.format("http://localhost:%d/client/1", port), String.class); 



    System.out.print(results); 
    } 

} 

mu herkes bazı fikirler vardır nasıl bunları yayınlayıp veya alternatifler nedir yapmak ??

+0

nasıl Abo ut: https://github.com/spring-projects/spring-boot/blob/master/spring-boot-samples/spring-boot-sample-data-elasticsearch/? – Val

+0

Bunu zaten gördüm. İlk olarak bahar verilerini kullanmıyorum, ikinci olarak ES'nin gömülü versiyonuna ihtiyacım var. –

cevap

7

Ekstra aramalı test sınama bağımlılıkları olmadan ihtiyacınız olanı yapabilirsiniz. Bu fikir temel olarak gömülü bir düğüm oluşturmak ve daha sonra onunla iletişim kurmak için NodeClient'u kullanmaktır.

<bean id="embeddedElasticsearchServer" 
     class="com.example.EmbeddedElasticsearchServer" /> 

<bean id="elasticsearchClient" 
     class="org.elasticsearch.client.node.NodeClient" 
     factory-bean="embeddedElasticsearchServer" 
     factory-method="getClient" /> 
: Bunu yapan (en integration-test-context.xml diyelim) bahar yapılandırmasında

public class EmbeddedElasticsearchServer implements InitializingBean { 

    public EmbeddedElasticsearchServer() { 

     ImmutableSettings.Builder elasticsearchSettings = ImmutableSettings.settingsBuilder() 
       .put("http.enabled", "false") 
       .put("path.data", "target/elasticsearch-data"); 

     node = nodeBuilder() 
       .local(true) 
       .settings(elasticsearchSettings.build()) 
       .node(); 

     client = node.client(); 


    } 

    @Override 
    public void afterPropertiesSet() throws Exception { 
     // Initialization stuff: 
     // - create required indices 
     // - define mappings 
     // - populate with test data 
    } 

    public Client getClient() { 
     return client; 
    } 

} 

Sonra: Bunun için

, ben şöyle kendi EmbeddedElasticsearchServer sınıf (az ya da çok) oluşturuldu

Sonra sadece bu gibi testinde müşteri autowire edebilirsiniz:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("/integration-test-context.xml") 
public abstract class AbstractElasticsearchIntegrationTest { 

    @Autowired 
    private Client elasticsearchClient; 

    // Your rests go here... 

} 
+0

Cevabınız için çok teşekkür ederim. Bunu deneyeceğim ve sonra cevabı kabul edeceğim. :) –

+0

Bu cevap bana çok yardımcı oldu. Tüm günümü bir JerseyTest'te gömdüğüm org.elasticsearch.test.InternalTestCluster sürümünü yapmaya çalışarak geçirdim. Bu işleri daha kolay hale getirdi. Dikkat edilmesi gereken bir nokta, düğümü ve müşteriyi bir yere kapattığınızdan emin olmaktır. Temizlenmeleri gerekiyor. – Jon

+0

Başka birisine yardım etmesi durumunda, bu yalnızca path.data mutlak bir yol olduğunda (ES 1.7.3 ile) benim için çalıştı. –

İlgili konular