2020 */
2121package eu.openanalytics.shinyproxyoperator.helpers
2222
23+ import com.fasterxml.jackson.databind.ObjectMapper
24+ import com.fasterxml.jackson.module.kotlin.registerKotlinModule
2325import eu.openanalytics.shinyproxyoperator.Operator
2426import eu.openanalytics.shinyproxyoperator.ShinyProxyClient
2527import eu.openanalytics.shinyproxyoperator.components.LabelFactory
2628import eu.openanalytics.shinyproxyoperator.crd.ShinyProxy
2729import eu.openanalytics.shinyproxyoperator.crd.ShinyProxyInstance
30+ import eu.openanalytics.shinyproxyoperator.crd.ShinyProxyStatus
31+ import eu.openanalytics.shinyproxyoperator.ingress.skipper.RouteGroup
2832import io.fabric8.kubernetes.api.model.HasMetadata
2933import io.fabric8.kubernetes.api.model.IntOrString
3034import io.fabric8.kubernetes.client.NamespacedKubernetesClient
3135import io.fabric8.kubernetes.client.internal.readiness.Readiness
3236import kotlinx.coroutines.TimeoutCancellationException
3337import kotlinx.coroutines.withTimeout
38+ import java.nio.file.Paths
39+ import kotlin.io.path.pathString
3440import kotlin.test.assertEquals
3541import kotlin.test.assertNotEquals
3642import kotlin.test.assertNotNull
@@ -43,6 +49,7 @@ class ShinyProxyTestInstance(private val namespace: String,
4349 private val reconcileListener : ReconcileListener ) {
4450
4551 lateinit var hash: String
52+ private val objectMapper = ObjectMapper ().registerKotlinModule()
4653
4754 fun create (): ShinyProxy {
4855 val sp: ShinyProxy = shinyProxyClient.inNamespace(namespace).load(this .javaClass.getResourceAsStream(" /configs/$fileName " )).createOrReplace()
@@ -94,6 +101,49 @@ class ShinyProxyTestInstance(private val namespace: String,
94101
95102 // check ingress
96103 assertIngressIsCorrect(sp, numInstancesRunning, isLatest)
104+
105+ // check metadata RouteGroup
106+ assertMetadataRouteGroupIsCorrect(sp)
107+ }
108+
109+ private fun assertMetadataRouteGroupIsCorrect (sp : ShinyProxy ) {
110+ val routeGroupClient = client.resources(RouteGroup ::class .java)
111+ val routeGroups = routeGroupClient.inNamespace(namespace).withLabel(LabelFactory .NAME_LABEL , sp.metadata.name).list().items
112+ assertEquals(1 , routeGroups.size)
113+ val routeGroup = routeGroups[0 ]
114+ assertEquals(" sp-${sp.metadata.name} -ing-metadata" .take(63 ), routeGroup.metadata.name)
115+ assertEquals(mapOf (
116+ LabelFactory .APP_LABEL to LabelFactory .APP_LABEL_VALUE ,
117+ LabelFactory .NAME_LABEL to sp.metadata.name
118+ ), routeGroup.metadata.labels)
119+
120+ assertEquals(1 , routeGroup.metadata.ownerReferences.size)
121+ assertTrue(routeGroup.metadata.ownerReferences[0 ].controller)
122+ assertEquals(" ShinyProxy" , routeGroup.metadata.ownerReferences[0 ].kind)
123+ assertEquals(" openanalytics.eu/v1" , routeGroup.metadata.ownerReferences[0 ].apiVersion)
124+ assertEquals(sp.metadata.name, routeGroup.metadata.ownerReferences[0 ].name)
125+
126+ assertEquals(1 , routeGroup.spec.hosts.size)
127+ assertEquals(sp.fqdn, routeGroup.spec.hosts[0 ])
128+
129+ assertEquals(1 , routeGroup.spec.backends.size)
130+ assertEquals(" shunt" , routeGroup.spec.backends[0 ].name)
131+ assertEquals(" shunt" , routeGroup.spec.backends[0 ].type)
132+
133+ assertEquals(1 , routeGroup.spec.defaultBackends.size)
134+ assertEquals(" shunt" , routeGroup.spec.defaultBackends[0 ].backendName)
135+
136+ assertEquals(1 , routeGroup.spec.routes.size)
137+ assertEquals(Paths .get(sp.subPath, " /operator/metadata" ).pathString, routeGroup.spec.routes[0 ].pathSubtree)
138+ assertEquals(1 , routeGroup.spec.routes[0 ].backends.size)
139+ assertEquals(" shunt" , routeGroup.spec.routes[0 ].backends[0 ].backendName)
140+ assertEquals(3 , routeGroup.spec.routes[0 ].filters.size)
141+ assertEquals(""" setResponseHeader("Content-Type","application/json")""" , routeGroup.spec.routes[0 ].filters[0 ])
142+ val metadata = routeGroup.spec.routes[0 ].filters[1 ].removePrefix(" inlineContent(\" " ).removeSuffix(" \" )" ).replace(" \\\" " , " \" " )
143+ val status = objectMapper.readValue(metadata, ShinyProxyStatus ::class .java)
144+ assertEquals(sp.status, status)
145+ assertEquals(""" status(200)""" , routeGroup.spec.routes[0 ].filters[2 ])
146+
97147 }
98148
99149 fun assertIngressIsCorrect (sp : ShinyProxy , numInstancesRunning : Int = 1, isLatest : Boolean = true) {
0 commit comments