Tarjoaa rajapinnan ulkoisille palveluille uuden koulutustarjonnan indeksoituun dataan.
Mahdollistaa myös kouta-backendin hakujen luonnin ja muokkauksen.
Kouta-external on Scalatralla toteutettu HTTP API, joka tarjoilee kouta-indeksoijan Elasticsearchiin indeksoimaa kouta-backendin dataa.
Asenna haluamallasi tavalla koneellesi
- IntelliJ IDEA + scala plugin
- Docker (postgresia ja elasticsearchia varten)
- Maven Jos haluat ajaa komentoriviltä Mavenia, mutta idean Mavenilla pärjää kyllä hyvin, joten tämä ei ole pakollinen
Lisäksi tarvitset Java SDK:n ja Scala SDK:n (Unix pohjaisissa käyttöjärjestelmissä auttaa esim. SDKMAN!). Kirjoitushetkellä käytössä openJDK11 ja scala 2.12.10.
PostgreSQL kontti-image buildataan (täytyy tehdä vain kerran) komennnolla:
# projektin juuressa
cd postgresql/docker
docker build --tag koutaexternal-postgres .
Kopioi lokaalia kehitystä varten konfiguraatiotiedosto '/src/test/resources/dev-vars.template.yml' -> '/src/test/resources/dev-vars.yml'. Dev-vars.yml on ignoroitu Gitissä ettei salasanat valu repoon.
Lokaalin ajon asetuksia voi muuttaa muokkaamalla '/src/test/resources/dev-vars.yml'-tiedostoa.
Testejä varten täytyy Docker daemon olla käynnissä. Yksittäisen testisuiten tai testin voi ajaa IntelliJ IDEA:ssa halutun testiluokan tai funktion päältä, run -> scalaTest. Testien ajaminen käynnistää docker-kontteihin PostgreSQL-tietokannan ja Elasticsearch-hakukoneen. PostgreSQL-tietokanta käynnistyy test-vars.yml-tiedostossa määritelyyn porttiin (oletuksena 5435). Elasticsearch-kontti käynnistetään satunnaiseen porttiin käyttäen TestContainers-työkalua. Ennen testien ajamista Elasticsearchiin ladataan dataa, joka on luotu kouta-indeksoijalla käyttäen ElasticDump-työkalua.
Jos Maven on asennettuna, voi testit ajaa myös komentoriviltä mvn test
komennolla tai rajaamalla
ajettavien testejä mvn test -Dsuites="<testiluokan nimet pilkulla erotettuna>"
.
Esimerkiksi mvn test -Dsuites="fi.oph.kouta.external.integration.HakukohdeSpec"
Koska Elasticsearch-datadumpin lataaminen kestää jonkin aikaa, luku-rajapintojen testejä toteuttaessa kannattaa ajaa testejä valmiiksi käynnistetyllä Elasticsearchilla.
Katso ohjeet Elasticsearch-kontin käynnistämiseen kouta-indeksoijan README:sta.
Huom! Jos käytät linuxia, vaihda komennon parametri -p 127.0.0.1:9200:9200
-> -p 9200:9200
. Muuten elasticdump ei saa yhteyttä elasticsearchiin.
Aseta sitten muuttuja useTestContainersElastic = false
täällä: https://github.com/Opetushallitus/kouta-external/blob/master/src/test/scala/fi/oph/kouta/external/TempElastic.scala#L9.
Nyt voit ajaa testejä ilman jatkuvaa Elasticsearchin uudelleenkäynnistelyä ja dumppien latailua. Muista palauttaa useTestContainersElastic = true
, kun olet valmis.
Migraatiot ajetaan automaattisesti testien alussa tai kun kouta-external käynnistetään.
Ennen lokaalia ajoa täytyy olla elasticsearch pyörimässä. Katso ohjeet elasticsearch-kontin käynnistämiseen kouta-indeksoijan README:sta
Tämän jälkeen käynnistä Ideassa embeddedJettyLauncher.scala (right-click -> Run). Tämä käynnistää samalla postgresql kontin. Sovellus käynnistyy porttiin 8097.
Luo seuraavanlainen src/test/resources/dev-vars.yml
-tiedosto ja korvaa *YMPÄRISTÖ*
testiympäristön arvolla testi
, hahtuva
tai untuva
:
host_postgresql_koutaexternal: localhost
host_postgresql_koutaexternal_port: 5435
postgres_app_user: oph
host_postgresql_koutaexternal_app_password: oph
cas_url: https://virkailija.*YMPÄRISTÖ*opintopolku.fi/cas
kouta_external_cas_service: http://localhost:8097/kouta-external/auth/login
kouta_external_cas_username: DUMMY
kouta_external_cas_password: DUMMY
kouta_external_elasticsearch7_url: *ES_URL*
kouta_external_elasticsearch_auth_enabled: true
kouta_external_elasticsearch_username: *ES_TUNNUS*
kouta_external_elasticsearch_password: *ES_SALASANA*
host_virkailija: virkailija.*YMPÄRISTÖ*opintopolku.fi
host_alb_virkailija: virkailija.*YMPÄRISTÖ*opintopolku.fi
kouta_external_api_modify_enabled: true
Korvaa myös *ES_URL*
ES:n ympäristökohtaisella julkisella osoitteella, joka löytyy täältä: https://wiki.eduuni.fi/pages/viewpage.action?pageId=266406750
Korvaa *ES_TUNNUS*
ja *ES_SALASANA*
oikeilla testiympäristön salasanoilla, jotka voit katsa SSM:stä AWS:n konsolin kautta tai config.py-komentorivityökalulla
Kytke päälle Opintopolun VPN.
Huom! Jos käytät SSM:stä löytyvää ElasticSearchin sisäverkon osoitetta etkä julkista, joudut tunneloimaan liikenteen bastionin läpi. Julkisella osoitteella riittää, että kytket päälle Opintopolun VPN:n
Käynnistä kouta-external lokaalisti ajamalla IntelliJ IDEA:ssa EmbeddedJettyLauncher ja mene osoitteeseen:
http://localhost:8097/kouta-external/auth/login
Kirjaudu sisään omilla testitunnuksillasi.
Lokaalin kouta-externalin pitäisi nyt ohjata kyselyt valitsemasi ympäristön ElasticSearchiin.
Swagger löytyy osoitteesta http://localhost:8097/kouta-external/swagger/
Suositeltava kehitysympäristö on IntelliJ IDEA + scala plugin
Katso kouta-indeksoijan readme:stä kuinka saat lokaaliin elasticsearchiin indeksoitua dataa. Tämän jälkeen käynnistä kouta-external tätä lokaalia elasticsearchia vasten.
Kouta-indeksoijan avulla saat päivitettyä tarvittaessa myös testien käyttämän mock-data-dumpin.
Testiympäristöjen swaggerit löytyvät seuraavista osoitteista:
Asennus hoituu samoilla työkaluilla kuin muidenkin OPH:n palvelujen. Cloud-basen dokumentaatiosta ja ylläpidolta löytyy apuja.
Lokit löytyvät AWS:n CloudWatchista. Log groupin nimemssä on etuliitteenä ympäristön nimi, esim. untuva-app-kouta-external
Projekti käyttää Scalafmt formatteria koodin formatoitiin. Voit vaihtaa idean scalan code style asetuksista formatteriksi scalafmt ja laittaa vaikka päälle automaattisen formatoinnin tallennuksen yhteydessä.