Skip to content

Conversation

karle0wne
Copy link
Contributor

@karle0wne karle0wne commented Jul 22, 2021

разве не прекрасно?
было
image

стало
image

@karle0wne
Copy link
Contributor Author

еще пруф про использование аннотации @Transactional для использования интеграционных тестов с сингтоном

без него (разъебывает из за грязных данных)
image

с ним 👌
image

@karle0wne
Copy link
Contributor Author

ролбек после теста
image

@karle0wne
Copy link
Contributor Author

на самом деле подобная фишка уже в магисте использовалась. были тесты на DslQuery с аннотацией @Sql - на них висела @Transactional чтоб миграция откатывалась после теста

Copy link
Contributor

@ex01tus ex01tus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Выигрыш в 2+ раза по скорости – лайк. Интересное использование @Transactional, не сталкивался раньше с таким.

import static org.assertj.core.api.Assertions.assertThat;

@Slf4j
public abstract class AbstractKafkaSingletonContainerConfig extends AbstractDbSingletonContainerConfig {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

На этом месте становится совсем тяжко. Абстрактный кафка-конфиг, который наследуется от абстрактного дб-конфига и который является родителем для абстратного кафка-и-дао-конфига, который порождает, собственно, тест.

Для меня шансы разобраться как работает (или почему не работает) тест в такой ситуации околонулевые. Я бы подумал над тем, как уйти от наследования в тестах совсем. Кажется, что оно сильно усложняет тестовые классы и лишает их одной из основных функций – простого и понятного документирования кода.

Можно посмотреть в сторону явного подключения конфиг-бинов в тестовый класс или что-то такое.

@D-Baykov
Copy link
Contributor

D-Baykov commented Jul 23, 2021

Можно в целом отказаться от абстрактных классов и наследования и в сетапе теста создавать нужные инстансы для теста. Например, если надо поднять PG и kafka, то

private PostgresTestEnviroment postgresTestEnviroment;
private KafkaTestEnviroment kafkaTestEnviroment;

@Before
public void setup() {
    postgresTestEnviroment = new PostgresTestEnviroment();
    kafkaTestEnviroment = new KafkaTestEnviroment();
}

и далее работать уже с этими инстансами (если надо)

@ex01tus ex01tus requested review from echerniak and inallyoung July 23, 2021 09:51
@inallyoung
Copy link
Contributor

лично мне кажется лучше пожертвовать скоростью ради чистоты прохождения тестов.

Copy link

@ggmaleva ggmaleva left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Согласен с Сашей, такое наследование выглядит тяжеловато для восприятия, чтобы сразу въехать как писать тесты.

Мб стоит вынести в отдельный стартер тестовые конфиги под различные кейсы - бд, кафка и тд.
И подключать как вариант через анноташки.

Я вроде видел задачку в бэклоге на выработку подхода и унифицирование тестов. Это как раз выглядит как ее реализация.

@echerniak
Copy link
Contributor

Поресёрчил в контексте переиспользования контейнеров непосредственно в рамках функционала testcontainers - там разработчики by design сделали так, чтобы подобная фича могла нормально работать только на локальной машине (требуется создавать конфигурацию в home-директории, что заставляет создавать файлы на всех серверах, где будут гонятся подобные тесты). Основная причина - в таком режиме контейнеры могут не вырубиться и продолжить "висеть" после прохождения всех тестов.

@karle0wne
Copy link
Contributor Author

Поресёрчил в контексте переиспользования контейнеров непосредственно в рамках функционала testcontainers - там разработчики by design сделали так, чтобы подобная фича могла нормально работать только на локальной машине (требуется создавать конфигурацию в home-директории, что заставляет создавать файлы на всех серверах, где будут гонятся подобные тесты). Основная причина - в таком режиме контейнеры могут не вырубиться и продолжить "висеть" после прохождения всех тестов.

круто, конечно, хоть я не все уловил, на самом деле, что там имелось ввиду.

это может быть использовано в кейсах, когда мы создаем в рамках конфига контейнер, например, через @Container или @ClassRule, в таких кейсах контейнер заново переподнимается каждый раз, а с опцией .withReuse(true) видимо он не дает конейнеру закрыться. и при этом эта фича еще имеет некоторые ограничения , подходит только для использования на локальной машине 🤔

возможно это лучше, чем static{} , но я уже не готов еще раз перелопачивать 😅

если по теме, то контейнеры реализуют интерфейс AutoCloseable поэтому в такой конфигурации как описаны здесь, через static{}, проблем с подвисшими контейнерами быть не должно (не больше чем с обычным конфигом)

@karle0wne
Copy link
Contributor Author

лично мне кажется лучше пожертвовать скоростью ради чистоты прохождения тестов.

чистота поддерживается аннотацией Transactional

* add usage 'testcontainers-annotations:1.0.0' artifact
@karle0wne
Copy link
Contributor Author

немного переосмыслил в #308 архитектуру

@karle0wne karle0wne merged commit 1c43d68 into ft/JD-449/invoice-template Jul 26, 2021
@karle0wne karle0wne deleted the singleton-config-for-tests branch July 26, 2021 09:06
karle0wne pushed a commit that referenced this pull request Jul 26, 2021
* add implementation
* add usage 'testcontainers-annotations:1.0.0' artifact (#306)
* create singletons containers
* add create topic by adminClient logic
* add validation connection and topics for kafka container
* refactor test configs and test lifecycle (#308)
* remove invoiceId from migration (#307)
* add InvoiceTemplateServiceTest
echerniak added a commit that referenced this pull request Aug 11, 2021
* JD-378: New payouts processing

* Saving payout_tool_id

* Upd proto

* Added test, bump service-parent-pom

* Bump service-parent-pom

* Fix test, removed duplicated test

* Fix test

* Fix after review

* Fix test

* bump pg-embedded-plugin

* actualize topice name for payouts (#303)

* Added statPayout changes

* Revert "JD-265: add allocation" (#304)

* Revert "JD-265: add allocation (#298)"

This reverts commit 7809393.

* bump deps

* Fixes

* Added allocation script

* Fix test

* Fix test

* Fix readme

* Fix after review

* JD-449: invoice-template  saved handler impl (#305)

* add implementation
* add usage 'testcontainers-annotations:1.0.0' artifact (#306)
* create singletons containers
* add create topic by adminClient logic
* add validation connection and topics for kafka container
* refactor test configs and test lifecycle (#308)
* remove invoiceId from migration (#307)
* add InvoiceTemplateServiceTest

* bacl allocation migration, fix order (#309)

* return old KafkaConfig for invoicing topic (#311)

* return MachineEventDeserializer (#312)

* delete MachineEventDeserializer (#313)

* JD-536: remove exception logic in handling (#314)

allow skip and rewrite at duplicate events

* merging actual master (#315)

* Upd damsel

* JD-378: New payouts processing (#302)

* JD-378: New payouts processing

* Saving payout_tool_id

* Upd proto

* Added test, bump service-parent-pom

* Bump service-parent-pom

* Fix test, removed duplicated test

* Fix test

* Fix after review

* Fix test

* bump pg-embedded-plugin

* actualize topice name for payouts (#303)

* Added statPayout changes

* Added allocation script

* Fix test

* Fix test

* Fix readme

* Fix after review

* merging actual master (#315)

* Upd damsel

* Upd service-parent-pom

Co-authored-by: karleowne <karleowne@gmail.com>
Co-authored-by: Anatoly Karlov <a.karlov@rbkmoney.com>

* Remove payouter polling (#317)

* WIP. Allocations restored from split branch

* WIP.Refunds and payments stat now contains allocations

* Saving externalId implemented

* Tests updated with allocations, junit5 additional migration

* Null checkout of payout type (#320)

* bump deps, remove junit4 (#318)

* add coverage for tests on payout search handler (#321)

* Ft/fix filters (#323)

* Fix filters

* Fix filters

* Added test

* Fix test

* Changed mapper's scheme to handlers (#324)

* Update damsel version

* Static import added

* Remove redundant files after merge

* Empty files removed

* Empty file removed

* Collect moved to new line

* Feedback edits

Co-authored-by: inallyoung <in.all.young@gmail.com>
Co-authored-by: karleowne <karleowne@gmail.com>
Co-authored-by: Anatoly Karlov <a.karlov@rbkmoney.com>
Co-authored-by: e.chernyak <e.chernyak@rbkmoney.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants