Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JUnit meets Docker

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Oliver Boehm Oliver Boehm
September 18, 2018

JUnit meets Docker

Foliensatz zum Dockermeeting
(s. https://www.jugs.org/va2018/09-18.html)

Avatar for Oliver Boehm

Oliver Boehm

September 18, 2018
Tweet

More Decks by Oliver Boehm

Other Decks in Programming

Transcript

  1. 1 KURZE WEGE, SCHNELLE ENTSCHEIDUNGEN 1 Die Dr. Güldener Firmengruppe

    bietet Abrechnungsdienstleistungen und Services für Ärzte, Zahnärzte, Heil- und Hilfsmittelerbringer sowie Apotheker 9 Standorte Hauptsitz Stuttgart Mehrere Mrd. € Abrechnungsvolumen Über 1.000 Mitarbeiter deutschlandweit • Mehr als 40 Jahre Erfahrung • Marktführer in der zahnärztlichen Privatliquidation • Innovative Leistungen und Services unterstützen Zahnarztpraxen, MKG- Chirurgen und Patienten • Abrechnungs- und Erstattungsunterstützung • Übernahme des gesamten Mahnwesens inklusive Forderungs- / Honorarausfallschutz • Teilzahlungsmöglichkeiten für Patienten • Mehr als 40 Jahre Erfahrung • Abrechnungs- und Finanzdienstleister im deutschen Heil- und Hilfsmittelmarkt • Abrechnung von Kassen- und Privatrezepten für Physiotherapeuten, Ergotherapeuten, Logopäden, Podologen, Sanitätshäuser • Abrechnung von Kassen- und Privatrezepten für Unternehmen aus den Bereichen Homecare und Medizintechnik • Mehr als 65 Jahre Erfahrung • Seit Jahrzehnten Partner für Apotheken und Ärzte bei der Abrechnung von Rezepten bzw. der Privatliquidation • Rezeptvorprüfung bei Apotheken „Scan & Check“ • Prüfung der Rechnungsangaben anhand der GOÄ • Gewährleistung von Datensicherheit und Liquidität Über 45.000 Kunden 60 Entwickler 8 Admins 2 DevOps
  2. www.testcontainers.org Testcontainers is a Java library that supports JUnit tests,

    providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.
  3. Beispiele @ClassRule public static PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer() .withUsername("Oli

    B.").withPassword("******"); @BeforeClass public static void setUpLogConfig() { LOG.info("Setting up logConfig..."); //URI jdbcURI = URI.create("jdbc:hsqldb:mem:logdb"); //logConfig = new LogConfig(jdbcURI, "sa", ""); URI jdbcURI = URI.create(postgreSQLContainer.getJdbcUrl()); logConfig = new LogConfig(jdbcURI, postgreSQLContainer.getUsername(), postgreSQLContainer.getPassword()); LOG.info("Setting up logConfig {} successful finished.", logConfig); } https://github.com/oboehm/gdv.xport/blob/feature/testcontainers/lib/src/test/java/gdv/xport/config/LogConfigIT.java
  4. @ClassRule public static PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer(); /** *

    Einige Properties stehen fuer Spring erst nach Initialisierung des * Containers bereit. Das betrifft insbesondere die JDBC-URL. In der * @BeforeClass-Methode ist der Docker-Container initialisiert und die * Parameter koennen fuer Spring gesetzt werden. */ @BeforeClass public static void setUpJdbcProperties() { System.setProperty("spring.datasource.url", postgreSQLContainer.getJdbcUrl()); System.setProperty("spring.datasource.username", postgreSQLContainer.getUsername()); System.setProperty("spring.datasource.password", postgreSQLContainer.getPassword()); System.setProperty("spring.datasource.driverClassName", postgreSQLContainer.getDriverClassName()); }
  5. @ClassRule public static PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer(); /** *

    Einige Properties stehen fuer Spring erst nach Initialisierung des * Containers bereit. Das betrifft insbesondere die JDBC-URL. In der * @BeforeClass-Methode ist der Docker-Container initialisiert und die * Parameter koennen fuer Spring gesetzt werden. */ @BeforeClass public static void setUpJdbcProperties() { System.setProperty("spring.datasource.url", postgreSQLContainer.getJdbcUrl()); System.setProperty("spring.datasource.username", postgreSQLContainer.getUsername()); System.setProperty("spring.datasource.password", postgreSQLContainer.getPassword()); System.setProperty("spring.datasource.driverClassName", postgreSQLContainer.getDriverClassName()); } /** * Damit nachfolgende Tests, die keinen Testcontainer verwenden, nicht * gestoert werden, loeschen wir vorsichtshalber wieder die gesetzten * System-Properties. */ @AfterClass public static void clearJdbcProperties() { System.clearProperty("spring.datasource.url"); System.clearProperty("spring.datasource.username"); System.clearProperty("spring.datasource.password"); System.clearProperty("spring.datasource.driverClassName"); }
  6. Eigenbau @Rule public GenericContainer redis = new GenericContainer("redis:3.0.6") .withExposedPorts(6379); private

    Cache cache; @Before public void setUp() throws Exception { Jedis jedis = new Jedis(redis.getContainerIpAddress(), redis.getMappedPort(6379)); cache = new RedisBackedCache(jedis, "test"); }
  7. Erfahrungswerte • klappt ganz gut, trotz Exception 09:05:47,416 ERROR main

    ientProviderStrategy ping failed with configuration Environment variables, system properties and defaults. Resolved: dockerHost=tcp://192.168.99.100:2376 apiVersion='{UNKNOWN_VERSION}' registryUrl='https://index.docker.io/v1/' registryUsername='oboehm' registryPassword='null' registryEmail='null' dockerConfig='DefaultDockerClientConfig[dockerHost=tcp://192.168.99.100:2376,registryUsername=oboehm,registryPassword=<null>,registryEmail=<null>,registryUrl=https://index.docker.io/v1/,... due to org.rnorth.ducttape.TimeoutException: org.rnorth.ducttape.TimeoutException: java.util.concurrent.TimeoutException org.rnorth.ducttape.TimeoutException: org.rnorth.ducttape.TimeoutException: java.util.concurrent.TimeoutException at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:53) at org.testcontainers.dockerclient.DockerClientProviderStrategy.ping(DockerClientProviderStrategy.java:189) at org.testcontainers.dockerclient.EnvironmentAndSystemPropertyClientProviderStrategy.test(EnvironmentAndSystemPropertyClientProviderStrategy.java:42) at org.testcontainers.dockerclient.DockerClientProviderStrategy.lambda$getFirstValidStrategy$2(DockerClientProviderStrategy.java:112) at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:267) • Startzeit Container: ca. 20 Sek. (Win8; Mac: ca. 5 Sek.) • Overhead: Faktor 2 - 3
  8. Auf dem PC ist ein Problem aufgetreten. Er muss neu

    gestartet werden. Es werden einige Fehlinformationen gesammelt, und dann wird ein Neustart ausgeführt. (0% abgeschlossen) Dieser Absturz wurde ihnen präsentiert von: Optica Abrechnungszentrum
  9. Auf dem PC ist ein Problem aufgetreten. Er muss neu

    gestartet werden. Es werden einige Fehlinformationen gesammelt, und dann wird ein Neustart ausgeführt. (2% abgeschlossen) Dieser Absturz wurde ihnen präsentiert von: Optica Abrechnungszentrum
  10. Auf dem PC ist ein Problem aufgetreten. Er muss neu

    gestartet werden. Es werden einige Fehlinformationen gesammelt, und dann wird ein Neustart ausgeführt. (5% abgeschlossen) Dieser Absturz wurde ihnen präsentiert von: Optica Abrechnungszentrum
  11. Auf dem PC ist ein Problem aufgetreten. Er muss neu

    gestartet werden. Es werden einige Fehlinformationen gesammelt, und dann wird ein Neustart ausgeführt. (8% abgeschlossen) Dieser Absturz wurde ihnen präsentiert von: Optica Abrechnungszentrum
  12. Auf dem PC ist ein Problem aufgetreten. Er muss neu

    gestartet werden. Es werden einige Fehlinformationen gesammelt, und dann wird ein Neustart ausgeführt. (0% abgeschlossen) Dieser Absturz wurde ihnen präsentiert von: Optica Abrechnungszentrum Mit testcontainers wird es schwieriger, Ausreden* dafür zu finden!
  13. Auf dem PC ist ein Problem aufgetreten. Er muss neu

    gestartet werden. Es werden einige Fehlinformationen gesammelt, und dann wird ein Neustart ausgeführt. (0% abgeschlossen) Dieser Absturz wurde ihnen präsentiert von: Optica Abrechnungszentrum Mit testcontainers wird es schwieriger, Ausreden* dafür zu finden! * gute Ausreden bitte an: [email protected]