Skip to content
This repository was archived by the owner on Mar 14, 2025. It is now read-only.

Nais-applikasjon som kjører integrasjonstester for applikasjoner som er deployet "on-premise"

License

Notifications You must be signed in to change notification settings

navikt/bidrag-cucumber-onprem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bidrag-cucumber-onprem

Nais applikasjon som kjører integrasjonstester for applikasjoner som er deployet på cloud "on-premise"

workflows

build and deploy test build on pull request nightly run of cucumber tests

beskrivelse

Funksjonelle tester av bidrag nais applikasjoner som er designet for å kunne kjøre en "sanity check" på en laptop som har innstallert naisdevice og vil gjelde applikasjoner som kjører på cloud "on-premise"

Teknisk beskrivelse

Modulen er skrevet i Kotlin som gjør det enkelt å skape lett-leselige tester satt opp med Gherkin-filer (*.feature) som har norsk tekst og ligger i src/main/resources/<no.nav.bidrag.cucumber.onprem.pakkenavn>

BDD (Behaviour driven development) beskrives i Gherkin-filene (*.feature) som kjører automatiserte tester på bakgrunnen av funksjonaliteten som skal støttes. Eks: på en gherkin fil på norsk

01: # language: no
02  @oppslagstjenesten
03: Egenskap: oppslagstjeneste
04:   <detaljert beskrivelse av egenskapen>
05: 
06:   Scenario: fant ikke person
07:    Gitt liste over "tidligere ansatte"
09:    Når man forsøker å finne "Ola"
09:    Så skal svaret være "Ola" er ikke ansatt her
10:
11:  Scenario: fant person
12:    Gitt liste over "ansatte"
13:    Når man forsøker å finne "Per"
14:    Så skal svaret være "Per" er i "kantina"

Kort forklart:

  • linje 1: språk
  • linje 2: "tag" av test
  • linje 3: egenskapen som testes (feature)
  • linje 4: tekstlig beskrivelse av egenskapen
  • linje 6: et scenario som denne egenskapen skal støtte
  • linje 7: "Gitt" en ressurs
  • linje 8: "Når" man utfører noe
  • linje 9: "Så" forventer man et resultat
  • linje 11: et annet scenario som denne egenskapen skal støtte
  • linje 12-14: "Gitt" - "Når" - "Så": forventet oppførsel til dette scenarioet

Norske kodeord for gherkin: Gitt - Når - er de fremste kodeordene for norsk BDD. Alle norske nøkkelord som kan brukes i gherkin-filer er Egenskap, Bakgrunn, Scenario, Eksepmel, Abstrakt scenario, Gitt, Når, Og, Men, , Eksempler

Cucumber støtter flere språk og for mer detaljert oversikt over funksjonaliteten som gherkin gir, se detaljert beskrivelse på nett: https://cucumber.io/docs/gherkin/reference/

Test av scenario

Et scenario for en nais applikasjon er implementert på følgende måte:

  • en *.feature som er tagget, eks @<tag>, må ha en ingress for en nais applikasjon som brukes i feature
  • scenario-steget Gitt nais applikasjon 'bidrag-sak' vil bruke ingressen som er oppgitt for nais applikasjonen som i dette tilfellet er bidrag-sak
  • hvis en tag ikke er en nais applikasjon blant ingressen(e) som oppgies så må den nevnes i egen liste over tags som skal brukes

Funksjonelle krav

Nedenfor så vises de nødvendige input for kjøring (1 og 2):

  1. ingress som skal testes
  2. tag som bruker denne ingressen
  • hvis ingressen til applikasjon også skal fungere som en tag, brukes ingress@tag:<nais applikasjon>
  • det finnes en egen liste for å liste opp tags, tags
  • PS! det er standard at appnavn blir brukt som context path etter ingress. Hvis det ikke skal gjøres må noContextPathForApps også listes opp

Dette er hva som må til for å kjøre testing av en applikasjon som ikke har sikkerhet. Når applikasjonen har sikkerhet implementert, må også en testbruker angies.

  1. testbruker (for simulering av nav-ident, bruker med sikkerhet implementert i Azure)

Hvis kjøring av denne applikasjonen gjøres lokalt (fra naisdevice) og mot en applikasjon som kjører under sikkerhet, så kan en fullstendig testkjøring ikke gjøres uten at azure token blir send med når testen starter. Azure Ad brukes for å lage sikkerhetstoken for testbruker. Det er derfor nødvendig med et ekstra parameter som forteller bidrag-cucumber-onprem at testbruker har et manuelt generert sikkerhetstoken eller kjøringen er en "sanity check" for å teste at den tekniske implementasjonen til cucumber er ok.

  1. securityToken
  2. sanityCheck=true

Disse verdiene sendes som json til test-endepunkt, se avsnittet om Kjøring lokalt. Eksempel på en slik json (sanityCheck, noContextPathForApps, tags, navUsername og testUser er valgfri):

{
  "ingressesForApps": [
    "<ingress>@tag:app.a/tag.1>",
    "<ingress>@tag:app.b/tag.2>",
    "<ingress>@app.c>"
  ],
  "tags": [
    "<@tag.3>"
  ],
  "noContextPathForApps": [
    "<app.b>"
  ],
  "testUser": "z123456",
  "navUsername": "x123456",
  "sanityCheck": true,
  "securityToken": "<isso token for testbruker>"
}

Kjøring lokalt

Lokalt på et naisdevice, vil sanity check av en cucumber test være alt som er mulig hvis ikke et sikkerhetstoken blir manuelt generert og sendt med som input til testen. Applikasjonene som testes via denne applikasjonen er for applikasjoner deployet "on premise" og ikke krever zero-trust satt opp.

Variabler for kjøring

json Beskrivelse Kommentar
ingressesForApps kommaseparert liste over ingress og nais-applikasjon som testes Eks:https://[email protected],https://[email protected]
noContextPathForApps kommaseparert liste over applikasjoner (fra ingressesForApps) som ikke bruker appnavn som context-path etter ingress
tags kommaseparert liste over tags som skal kjøres (som ikke nevnes blant ingressene ala https://some-app@tag:some-name)
testUser Testbruker (saksbehandler) med ident ala z123456 unødvendig for sanity check, men må brukes med securityToken (hvis kjøring lokalt).
navUsername Reell bruker som må være med når man ønsker å hente gyldig token for testbruker

Testbruker ved kjøring i nais-applikasjon

Testbruker simulerer en saksbehandler hos NAV. Testbrukeren må ha et gyldig brukernavn og passord. Dette er en såkalt Z-bruker og det må sørges for at den har et gyldig passord og at "two factor authentication" er slått av for brukeren.

Kjøring lokalt

Ved kjøring lokalt kan det vøre ønskelig å bare teste at det tekniske "fungerer". Dette kan gjøres ved å sette miljøvariabelen SANITY_CHECK=true. Da vil bare resultatene fra operasjoner logges til konsoll i stedet for at den aktuelle sjekken gjøres.

Miljøvariabler for kjøring lokalt (trengs ikke når invokering gjøres via curl)

SECURITY_TOKEN - manuelt generert sikkerhetstoken for testbruker, Den kan også sendes med json til test-endpoint når testing foregår via lokal spring-boot

SANITY_CHECK=true - for tjenester som har implementert sikkerhet, så kan denne settes slik at selve sjekken bare logges til konsoll og ikke feiler. Den kan også sendes med json til test-endpoint når testing foregår via lokal spring-boot

Kjøring med maven

PS! Når du ikke sender med SANITY_CHECK=true, så må du sende med SECURITY_TOKEN (evt. fullstendig authentisering).

mvn exec:java                                        \
    -DSANITY_CHECK=true                              \
    -DSECURITY_TOKEN=<isso generert id-token>        \
    -DNAV_USERNAME="<nav bruker ala x123456>         \
    -DTEST_USER="<test bruker ala z123456>           \
    -DSECURITY_TOKEN="<abc...xyz>                    \
    -DINGRESSES_FOR_APPS=<ingress@app1,ingress@app2> \
    -DTAGS=<@tag1>,<@tagp2>                          \
    -Dexec.mainClass=no.nav.bidrag.cucumber.BidragCucumberOnprem

NB

  • Fjern -DSANITY_CHECK (eller sett den til -DSANITY_CHECH=false) hvis du vil kjøre en fullskala test.
  • Når -DSANITY_CHECK=true vil det være unødvendig å bruke -DTEST_USER, -DNAV_USERNAME og -DSECURITY_TOKEN.
  • Når -DSANITY_CHECK=false (eller -DSANITY_CHECK ikke er med) må man ha med -DTEST_USER, -DNAV_USERNAME og -DSECURITY_TOKEN.
Kjøring med maven og spring-boot
  • åpne terminal og kjør kommandoen mvn spring-boot:run
  • for sanity check, åpne ny terminal kjør kommandoen
    curl -X 'POST' http://localhost:8080/bidrag-cucumber-onprem/run \
      -H 'accept: */*' \
      -H 'Content-Type: application/json' \
      -d '{"tags":["@tag1","@tag2"],"sanityCheck":true,"ingressesForApps":["<ingress.som.testes@tag:navn>"]}' \
    
  • for fullstendig test, åpne ny terminal og kjør kommandoen
    curl -X 'POST' http://localhost:8080/bidrag-cucumber-onprem/run \
      -H 'accept: */*' \
      -H 'Content-Type: application/json' \
      -d '{"tags":["@tag1","@tag2"],"testUsername":"<z123456>","ingressesForApps":["<ingress.som.testes@tag:navn>"],"securityToken"="<security token (uten Bearer)}'
    
Kjøring med IntelliJ

Man kan ogå bruke IntelliJ til å kjøre cucumber testene direkte. IntelliJ har innebygd støtte for cucumber (java), men hvis du vil navigere i koden ut fra testene som kjøres, så bør du installere plugin Cucumber Kotlin (IntelliJ settings/prefrences -> Plugins)

Kjør cucumber features
  • alle testene: høyreklikk på prosjektet og velg Run 'All features in bidrag-cucumber-onprem'
  • en feature: høyreklikk på feature-fil, eks sak.featureprosjektet og velg Run 'Feature: ...'

NB! Husk å legg inn miljøvariablene SANITY_CHECK og INGRESSES_FOR_APPS i Edit Configurations... under Run-drop down menyen...

Lagre features som er kjørt i intelliJ sin run-drop down

Det anbefales at man lagrer ovennevnte konfigurasjon, slik dette ikke må settes opp på ny...

  • Velg Save '<program/feature>' Configuration fra Run-drop down menyen...
Kjør spring-boot i IntelliJ
  • start spring-boot applikasjonen med IntelliJ
  • for sanity check: åpne ny terminal kjør kommandoen
    curl -X 'POST' http://localhost:8080/bidrag-cucumber-onprem/run \
      -H 'accept: */*' \
      -H 'Content-Type: application/json' \
      -d '{"tags":["@tag1","@tag2"],"sanityCheck":true,"ingressesForApps":["<ingress.som.testes@tag:navn>"]}'
    
  • for fullstendig test, åpne ny terminal og kjør kommandoen
    curl -X 'POST' http://localhost:8080/bidrag-cucumber-onprem/run \
      -H 'accept: */*' \
      -H 'Content-Type: application/json' \
      -d '{"tags":["@tag1","@tag2"],"testUsername":"<z123456>","ingressesForApps":["<ingress.som.testes@tag:navn>"],"securityToken"="<security token (uten Bearer)}'
    
Kjøring med swagger
lokalhost
  1. Start spring-boot applikasjon
  2. Gå til url: http://localhost:8080/bidrag-cucumber-onprem/swagger-ui/index.html?configUrl=/bidrag-cucumber-onprem/v3/api-docs/swagger-config#/
  3. Ekspander endpoint /run
  4. Trykk på "Try it out"
  5. Endre json-schema med ingress@tag:navn, sanity check evt. testbruker med security token
  6. Press Execute
on premise
  1. Gå til url for main eller feature branch
  2. Ekspander endpoint /run
  3. Trykk på "Try it out"
  4. Endre json-schema med ingress@tag, sanity check evt. testbruker med security token
  5. Press Execute

About

Nais-applikasjon som kjører integrasjonstester for applikasjoner som er deployet "on-premise"

Resources

License

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors 8