Подключение к нестандартным портам couchbase для интеграционного тестирования - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь настроить автоматические интеграционные тесты для приложения Spring Boot, которое подключается к couchbase.Я хочу протестировать свежую контейнерную базу данных с использованием случайных доступных портов, чтобы нам не приходилось беспокоиться о коллизиях портов на компьютерах разработчиков или в средах непрерывной интеграции.

До сих пор я создал тест, в котором используютсяcom.palantir.docker.compose.DockerComposeRule для раскрутки образа док-станции couchbase , который предоставляет стандартные порты на случайных доступных портах.Однако org.springframework.boot.autoconfigure.couchbase.CouchbaseProperties не предоставляет никаких свойств для портов.

Я вижу, что org.springframework.data.couchbase.config.CouchbaseEnvironmentParser предполагает, что существует какой-то способ настройки портов.Я не смог понять, как его использовать.Кто-нибудь еще мог сделать это?

Вот так выглядит мой тест:

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
@Category(IntegrationTest.class)
public class BiscuitRepositoryIT {

    private static final int COUCHBASE_PORT = 8091;
    private static final String COUCHBASE_SERVICE = "couchbase";

    @ClassRule
    public static DockerComposeRule docker = DockerComposeRule.builder()
            .file("src/test/resources/docker-compose-couchbase.yml")
            .projectName(ProjectName.random())
            .waitingForService(COUCHBASE_SERVICE, HealthChecks.toHaveAllPortsOpen())
            .build();

    @Autowired
    private BiscuitRepositoryConfig config;

    @Autowired
    private BiscuitRepository biscuitRepository;

    @BeforeClass
    public static void initialize() {
        DockerPort couchbase = docker.containers()
                .container(COUCHBASE_SERVICE)
                .port(COUCHBASE_PORT);

        log.info("couchbase ports: {}", couchbase);

        // TODO update integration-test properties file with the ports
        // before the spring context starts.
    }

    @After
    public void tearDown() throws Exception {
        biscuitRepository.deleteAll();
    }

    @Test
    public void insertBiscuit() throws Exception {
        Biscuit digestive = Biscuit.builder().name("digestive").manufacturer("biscuitCorp").build();
        Biscuit persistedBiscuit = biscuitRepository.save(digestive);
        assertThat(persistedBiscuit).isEqualToIgnoringGivenFields(digestive, "id", "version");
    }
}
...