Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Yder indlæseren benytter i vid udstrækning docker til integrations test, for at kunne teste så vidt muligt med de rigtige afhængigheder.

...

Der anvendes unittests i yder indlæseren ved brug af JUnit.

Yder indlæserens unittest-setup er specielt på to punkter, i det der benyttes mocks for at kunne teste Camel, samt at der benyttes TestContainers, således at unittests kan ramme en rigtig lokalt kørende mariadb database og SFTP server kørende i docker (https://www.testcontainers.org).

Unittests kan køres ved at eksekvere

mvn test

...


Tests i Camel

I det Camel kører asynkront, er det nødvendigt for unittests at vide, hvornår Camel er færdig med at indlæse en fil, hvis testen skal vide, hvornår den kan kontrollere, om det gik som forventet. Dette gøres i yder indlæseren, i klassen BaseMockTest, hvor Camel-routen mockes ved at tilføje et sidste MockEndpoint, som en test kan vente påved i YderRouteBuilderTestSetup at holde øje med confirm filerne (.done og failure) og frigive en Semaphore (routeHandshake) der først frigives når de forventede filer er fundne.

Hvis ikke der benyttes mocks dette trick til Camel kan man være nødsaget til at indsætte waits, hvilket gør testeksekveringen langsommere, samt kan være afhængig af eksekveringsmaskinens computerkraft.

...

I det yder indlæseren selv migrerer databaseskemaet (via Liquibase), samt i overensstemmelse med NSP husregler ikke benytter ORM som Hibernate, er det blevet godkendt at unittests selv starter en mariadb database via docker, og tester ved brug af den.

TestContainers er et java bibliotek som tillader programmatisk instruering af docker starter op, og herved starter en ny tom mariadb container op, som applikationen kan køre databasemigreringer mod, og herefter benytte i alle unittests. 

For eksempel se https://svn.nspop.dk/svn/importers/yderindlaeser/trunk/src/test/java/dk/nsi/sdm/yder/BaseTest.java klassen i yder indlæser-projektet.

) anvender unit testene in memory databasen H2.

Codecoverage

Efter afvikling af unit-tests genereres en testrapport med Maven-plugin’et JaCoCo. Rapporten kan ses ved at åbne følgende fil i en browser target/site/jacoco/index.html.

...

Disse integrationstests giver mulighed for at teste hele indlæseren med de afhængigheder den vil benytte sig af, når den kører i produktion, som fx. SKRS (registerkopiservice) eller SYES (enkeltopslagsservicen).

Tests til integrationstests er markeret i koden med en custom testkategori og projektet er sat op så disse Integrations test kan køres ved at køre (mvn test -Pintegrationtest).eksekvere

cd dk.nsp.sdm.yder-integrationtest

mvn verify -Pintegrationtest

Disse tests kræver at indlæseren samt de korrekte afhængigheder allerede kører, hvilket typisk laves via docker-compose. For yder indlæseren er compose/test/docker-compose.yml lavet således, at denne starter en yder indlæser, database samt SKRS i en opsætning, som kan testes via integrationstestene. Så man kan starte denne docker-compose fil lokalt (docker-compose up) og så ved siden af køre integrationstestene, som vil lægge en fil op, vente på at den bliver indlæst, og herefter se efter i både database samt SKRS om indlæsningerne er gået godt. Det local development compose setup er lavet med et galera cluster med flere instanser.

Docker compose startes med:

docker-compose -f compose/development/docker-compose.yml up --build

Testene kan fejle pga. manglende rettigheder til de anvendte ftp foldere (sker når docker selv opretter dem). Dette kan løses med "sudo chmod 777 test_sftp" (og test_sftp_ekstern).

...