Size: a a a

2022 February 15

OS

Oleg Shelajev in JUG.ru
я бы сказал врядли :) но это засивит от того кому вы документацию пишете и договоренностей с теми командами / юзерами
источник

OS

Oleg Shelajev in JUG.ru
ссылки нельзя — твиттер atomicjar, твиттер shelajev

можно на ютубе прям подписаться на atomicjar
источник

OS

Oleg Shelajev in JUG.ru
интересный вопрос, я бы сказал что можно посмотреть в сторону докеризации обоих консюмеров и запуска их и очереди в отдельном тесте
источник

OS

Oleg Shelajev in JUG.ru
+ можно посмотреть на testcontainers модуль toxiproxy (ссылки нельзя, на сайте найти можно) и там сделать дополнительно условий как что ломается такой chaos engineerign with testcontaienrs
источник

OS

Oleg Shelajev in JUG.ru
ура!
источник

AK

Aleksandr Kovtoniuk in JUG.ru
Спасибо. А то со слов не получалось находить.
источник

DT

Dmitry Tiomkin in JUG.ru
Да
источник

AC

Alexander Cherepanov in JUG.ru
Спасибо!
источник
2022 February 16

IZ

Ivan Zemlyankiy in JUG.ru
Олег, спасибо за ответ в чатике по jpoint, я ток увидел, что чат доклада - это тут.
Вопрос по тест контейнерс:
как переиспользовать запущенный контейнер? Я понимаю что это не бест практис, но для траблшутинга бывает ооочень часто нужна подобная фича. Или просто для поиграться. У нас сейчас есть своя нашлёпка похожая на тестконтейнерс (возраста может даже немного бОльшего, чем ваша либа, так что её наличие - это просто легаси), я пытался переехать, но столкнулся с вот таким ограничением, что нет функциональности просто держать контейнеры включёнными
источник

OS

Oleg Shelajev in JUG.ru
в ~/.testcontainers.properties написать testcontainers.reuse.enable=true`и потом контейнеру сказать `container.withReuse(true);
он там посчитает hash-и, запишет в лэйблы контейнеров и потом не будет заново стартовать если нет изменений.

это недокументированная экспериментальная фича, потому что непонятно кому и когда эти контейнеры все-таки останавливать.
поэтому и экспериментальная и конфигурация в environment specific location чтобы проект или например просто парочка ENV_VARS не могли загрязнять среду
источник

OS

Oleg Shelajev in JUG.ru
вот начиная примерно с https://www.youtube.com/watch?v=wLrrhHjOHsE&t=2776s
YouTube
Testcontainers Live: Neo4j with Gerrit Meier
Gerrit Meier is working as a Software engineer at Neo4j and is mainly responsible for the development of the Spring Data Neo4j library. He wants to inspire people to try new things and make the world a better place by sharing knowledge and ideas.

In this stream we learn about how storing data in a graph database give us the advantage of not only having a nice visualization but also fast query times when it comes to traversing relationships.

Let us create and explore the wonderful nerdy world of the Pokémon card game in Neo4j.
You learn how you can import the data yourself, create a Spring Data Neo4j application on top and issue more advanced queries to find information in the graph.

You can follow Gerrit or ask him questions on Twitter: https://twitter.com/meistermeier
Other helpful links:
Neo4j community: https://community.neo4j.com/
The app project: https://github.com/meistermeier/pokemon-tcg-app
Pokemon TCG API https://pokemontcg.io/
and data on GitHub: https://github.com/PokemonTCG/pokemon-tcg-data
Bblog post the TestApplication pattern:
https://bsideup.github.io/posts/local_development_with_testcontainers/

Contents:
0:00 - Introductions
2:26 - What's a Graph database?
5:08 - What Neo4j is good for?
11:43 - Looking at the data for the example
24:26 - Exploring the Import scripts
34:00 - Neo4j container with Testcontainers!
39:00 - The first test to check if app loads
40:51 - Understanding Reusable containers
44:20 - Exploring data in Neo4j console
47:35 - Introducing Spring Data Neo4j (SDN)
56:42 - Working with predefined methods on Repositories
1:02:14 - Running Neo4j containers using Testcontainers Cloud!
1:08:30 - Running it all together: Spring, Testcontainers, Neo4j
1:14:11 - Conclusions and final words
источник

OS

Oleg Shelajev in JUG.ru
вот например в ютуб видео — "Testcontainers Live: Neo4j with Gerrit Meier" где-то с 2775 секунды пример показан
источник

OS

Oleg Shelajev in JUG.ru
там глава — 40:51 - Understanding Reusable containers
источник

OS

Oleg Shelajev in JUG.ru
ну или можно просто сделать в
public class Main {

 public static void main(String[] args) throws Throwable {
   var c = new GenericContainer("blah");
   c.start();
   new Scanner(System.in).nextLine();
 }
}
источник

IZ

Ivan Zemlyankiy in JUG.ru
спасибо! А есть где-то issue на это?
Не было предложения просто задать как-то своё имя и если на docker ps этот контейнера нет, то создаём, если есть - не создаём?
источник

OS

Oleg Shelajev in JUG.ru
Issue есть строго надо посмотреть в гитабе тут все равно ссылки нельзя
источник

OS

Oleg Shelajev in JUG.ru
А если я немного тест поменял например добавил копирование какой нибудь schema.sql
источник

OS

Oleg Shelajev in JUG.ru
То по имени контейнер найдётся но дебажить почему не работает врагу не пожелаешь
источник

IZ

Ivan Zemlyankiy in JUG.ru
нуууууу.... хз, конечно, по моему опыту не такая уж и проблема.
Да, было такое, мол wtf, должно же работать, но если используешь это часто, то тесты запускаются намного быстрее и довольно быстро приходишь к тому что неплохо бы сделать docker ps перед тем как траблшутить.

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

 private static Optional<RedisClusterClient> getExternalRedisClient() {
   try {
     Process p =
         new ProcessBuilder(
                 "docker",
                 "ps",
                 "--filter",
                 "status=running",
                 "--format",
                 "{{.ID}}\\t{{.Image}}\\t{{.Ports}}")
             .start();
     p.waitFor();
     return IOUtils.readLines(p.getInputStream(), StandardCharsets.UTF_8).stream()
         .map(l -> l.split("\t", 3))
         .filter(s -> s[1].contains("docker-test-redis"))
         .map(s -> Ints.tryParse(RegExUtils.replaceAll(s[2], ".*->([0-9]+).*", "$1")))
         .filter(port -> port != null)
         .map(
             port ->
                 RedisClusterClient.create(
                     ClientResources.builder().build(),
                     Collections.singleton(RedisURI.create("127.0.0.1", port))))
         .findFirst();
   } catch (Exception e) {
     return Optional.empty();
   }
 }
источник

OS

Oleg Shelajev in JUG.ru
Не знаю наверное для каких-то случаев может подходит. В общем наверное сложно сказать
источник