Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
T
theodolite
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Sören Henning
theodolite
Commits
4e9338b8
Commit
4e9338b8
authored
3 years ago
by
Sören Henning
Browse files
Options
Downloads
Patches
Plain Diff
Fix ConfigMapResourceSet test
parent
b6ca11ee
No related branches found
No related tags found
1 merge request
!257
Allow Theodolite to deploy arbitrary resources
Pipeline
#7072
failed
3 years ago
Stage: build
Stage: test
Stage: check
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
theodolite/src/test/kotlin/theodolite/benchmark/ConfigMapResourceSetTest.kt
+164
-119
164 additions, 119 deletions
...t/kotlin/theodolite/benchmark/ConfigMapResourceSetTest.kt
with
164 additions
and
119 deletions
theodolite/src/test/kotlin/theodolite/benchmark/ConfigMapResourceSetTest.kt
+
164
−
119
View file @
4e9338b8
package
theodolite.benchmark
package
theodolite.benchmark
import
com.
google.gson.Gson
import
com.
fasterxml.jackson.databind.ObjectMapper
import
io.fabric8.kubernetes.api.model.*
import
io.fabric8.kubernetes.api.model.*
import
io.fabric8.kubernetes.api.model.apps.Deployment
import
io.fabric8.kubernetes.api.model.apps.Deployment
import
io.fabric8.kubernetes.api.model.apps.DeploymentBuilder
import
io.fabric8.kubernetes.api.model.apps.DeploymentBuilder
import
io.fabric8.kubernetes.api.model.apps.StatefulSet
import
io.fabric8.kubernetes.api.model.apps.StatefulSet
import
io.fabric8.kubernetes.api.model.apps.StatefulSetBuilder
import
io.fabric8.kubernetes.api.model.apps.StatefulSetBuilder
import
io.fabric8.kubernetes.client.dsl.MixedOperation
import
io.fabric8.kubernetes.client.dsl.Resource
import
io.fabric8.kubernetes.client.dsl.base.ResourceDefinitionContext
import
io.fabric8.kubernetes.client.server.mock.KubernetesServer
import
io.fabric8.kubernetes.client.server.mock.KubernetesServer
import
io.quarkus.test.junit.QuarkusTest
import
io.quarkus.test.junit.QuarkusTest
import
io.quarkus.test.kubernetes.client.KubernetesTestServer
import
io.quarkus.test.kubernetes.client.WithKubernetesTestServer
import
org.junit.jupiter.api.AfterEach
import
org.junit.jupiter.api.AfterEach
import
org.junit.jupiter.api.Assertions.assertEquals
import
org.junit.jupiter.api.Assertions.assertEquals
import
org.junit.jupiter.api.Assertions.assertTrue
import
org.junit.jupiter.api.Assertions.assertTrue
import
org.junit.jupiter.api.BeforeEach
import
org.junit.jupiter.api.BeforeEach
import
org.junit.jupiter.api.Test
import
org.junit.jupiter.api.Test
import
org.junit.jupiter.api.assertThrows
import
org.junit.jupiter.api.assertThrows
import
theodolite.k8s.CustomResourceWrapper
import
org.mockito.kotlin.mock
import
theodolite.k8s.resourceLoader.K8sResourceLoaderFromFile
import
registerResource
import
theodolite.TestBenchmark
import
theodolite.execution.operator.BenchmarkCRDummy
import
theodolite.execution.operator.ExecutionClient
import
theodolite.execution.operator.ExecutionEventHandler
import
theodolite.execution.operator.ExecutionStateHandler
import
theodolite.model.crd.BenchmarkCRD
import
theodolite.model.crd.ExecutionCRD
import
theodolite.util.DeploymentFailedException
import
theodolite.util.DeploymentFailedException
import
java.io.FileInputStream
private
const
val
testResourcePath
=
"./src/test/resources/k8s-resource-files/"
// TODO move somewhere else
typealias
BenchmarkClient
=
MixedOperation
<
BenchmarkCRD
,
KubernetesResourceList
<
BenchmarkCRD
>,
Resource
<
BenchmarkCRD
>>
@QuarkusTest
@QuarkusTest
class
ConfigMapResourceSetTest
{
@WithKubernetesTestServer
private
val
server
=
KubernetesServer
(
false
,
true
)
internal
class
ConfigMapResourceSetTest
{
@KubernetesTestServer
private
lateinit
var
server
:
KubernetesServer
private
val
objectMapper
:
ObjectMapper
=
ObjectMapper
()
private
lateinit
var
executionClient
:
ExecutionClient
private
lateinit
var
benchmarkClient
:
BenchmarkClient
@BeforeEach
@BeforeEach
fun
setUp
()
{
fun
setUp
()
{
server
.
before
()
server
.
before
()
this
.
server
.
client
.
apiextensions
().
v1
()
.
customResourceDefinitions
()
.
load
(
FileInputStream
(
"crd/crd-execution.yaml"
))
.
create
()
this
.
server
.
client
.
apiextensions
().
v1
()
.
customResourceDefinitions
()
.
load
(
FileInputStream
(
"crd/crd-benchmark.yaml"
))
.
create
()
this
.
executionClient
=
this
.
server
.
client
.
resources
(
ExecutionCRD
::
class
.
java
)
this
.
benchmarkClient
=
this
.
server
.
client
.
resources
(
BenchmarkCRD
::
class
.
java
)
}
}
@AfterEach
@AfterEach
...
@@ -34,184 +69,194 @@ class ConfigMapResourceSetTest {
...
@@ -34,184 +69,194 @@ class ConfigMapResourceSetTest {
server
.
after
()
server
.
after
()
}
}
fun
deployAndGetResource
(
resource
:
String
):
Collection
<
Pair
<
String
,
Kubernetes
Resource
>>
{
private
fun
deployAndGetResource
(
vararg
resource
s
:
HasMetadata
):
ConfigMap
Resource
Set
{
val
configMap
1
=
ConfigMapBuilder
()
val
configMap
=
ConfigMapBuilder
()
.
withNewMetadata
().
withName
(
"test-configmap"
).
endMetadata
()
.
withNewMetadata
().
withName
(
"test-configmap"
).
endMetadata
()
.
addToData
(
"test-resource.yaml"
,
resource
)
.
let
{
resources
.
foldIndexed
(
it
)
{
i
,
b
,
r
->
b
.
addToData
(
"resource_$i.yaml"
,
objectMapper
.
writeValueAsString
(
r
))
}
}
.
build
()
.
build
()
server
.
client
.
configMaps
().
createOrReplace
(
configMap
1
)
server
.
client
.
configMaps
().
createOrReplace
(
configMap
)
val
resourceSet
=
ConfigMapResourceSet
()
val
resourceSet
=
ConfigMapResourceSet
()
resourceSet
.
name
=
"test-configmap"
resourceSet
.
name
=
"test-configmap"
return
resourceSet
.
getResourceSet
(
server
.
client
)
return
resourceSet
}
}
@Test
@Test
fun
testLoadDeployment
()
{
fun
testLoadDeployment
()
{
val
resourceBuilder
=
DeploymentBuilder
()
val
resource
=
DeploymentBuilder
()
resourceBuilder
.
withNewSpec
().
endSpec
()
.
withNewSpec
()
resourceBuilder
.
withNewMetadata
().
endMetadata
()
.
endSpec
()
val
resource
=
resourceBuilder
.
build
()
.
withNewMetadata
()
resource
.
metadata
.
name
=
"test-deployment"
.
withName
(
"test-deployment"
)
.
endMetadata
()
.
build
()
val
createdResource
=
deployAndGetResource
(
resource
=
Gson
().
toJson
(
resource
)
)
val
createdResource
=
deployAndGetResource
(
resource
).
getResourceSet
(
server
.
client
)
assertEquals
(
1
,
createdResource
.
size
)
assertEquals
(
1
,
createdResource
.
size
)
assertTrue
(
createdResource
.
to
MutableSe
t
().
first
().
second
is
Deployment
)
assertTrue
(
createdResource
.
to
Lis
t
().
first
().
second
is
Deployment
)
assertTrue
(
createdResource
.
to
MutableSe
t
().
first
().
second
.
toString
().
contains
(
other
=
resource
.
metadata
.
name
))
assertTrue
(
createdResource
.
to
Lis
t
().
first
().
second
.
toString
().
contains
(
other
=
resource
.
metadata
.
name
))
}
}
@Test
@Test
fun
testLoadStateFulSet
()
{
fun
testLoadStateFulSet
()
{
val
resourceBuilder
=
StatefulSetBuilder
()
val
resource
=
StatefulSetBuilder
()
resourceBuilder
.
withNewSpec
().
endSpec
()
.
withNewSpec
()
resourceBuilder
.
withNewMetadata
().
endMetadata
()
.
endSpec
()
val
resource
=
resourceBuilder
.
build
()
.
withNewMetadata
()
resource
.
metadata
.
name
=
"test-resource"
.
withName
(
"test-sts"
)
.
endMetadata
()
.
build
()
val
createdResource
=
deployAndGetResource
(
resource
=
Gson
().
toJson
(
resource
)
)
val
createdResource
=
deployAndGetResource
(
resource
).
getResourceSet
(
server
.
client
)
assertEquals
(
1
,
createdResource
.
size
)
assertEquals
(
1
,
createdResource
.
size
)
assertTrue
(
createdResource
.
to
MutableSe
t
().
first
().
second
is
StatefulSet
)
assertTrue
(
createdResource
.
to
Lis
t
().
first
().
second
is
StatefulSet
)
assertTrue
(
createdResource
.
to
MutableSe
t
().
first
().
second
.
toString
().
contains
(
other
=
resource
.
metadata
.
name
))
assertTrue
(
createdResource
.
to
Lis
t
().
first
().
second
.
toString
().
contains
(
other
=
resource
.
metadata
.
name
))
}
}
@Test
@Test
fun
testLoadService
()
{
fun
testLoadService
()
{
val
resourceBuilder
=
ServiceBuilder
()
val
resource
=
ServiceBuilder
()
resourceBuilder
.
withNewSpec
().
endSpec
()
.
withNewSpec
()
resourceBuilder
.
withNewMetadata
().
endMetadata
()
.
endSpec
()
val
resource
=
resourceBuilder
.
build
()
.
withNewMetadata
()
resource
.
metadata
.
name
=
"test-resource"
.
withName
(
"test-service"
)
.
endMetadata
()
.
build
()
val
createdResource
=
deployAndGetResource
(
resource
=
Gson
().
toJson
(
resource
)
)
val
createdResource
=
deployAndGetResource
(
resource
).
getResourceSet
(
server
.
client
)
assertEquals
(
1
,
createdResource
.
size
)
assertEquals
(
1
,
createdResource
.
size
)
assertTrue
(
createdResource
.
to
MutableSe
t
().
first
().
second
is
Service
)
assertTrue
(
createdResource
.
to
Lis
t
().
first
().
second
is
Service
)
assertTrue
(
createdResource
.
to
MutableSe
t
().
first
().
second
.
toString
().
contains
(
other
=
resource
.
metadata
.
name
))
assertTrue
(
createdResource
.
to
Lis
t
().
first
().
second
.
toString
().
contains
(
other
=
resource
.
metadata
.
name
))
}
}
@Test
@Test
fun
testLoadConfigMap
()
{
fun
testLoadConfigMap
()
{
val
resourceBuilder
=
ConfigMapBuilder
()
val
resource
=
ConfigMapBuilder
()
resourceBuilder
.
withNewMetadata
().
endMetadata
()
.
withNewMetadata
()
val
resource
=
resourceBuilder
.
build
()
.
withName
(
"test-configmap"
)
resource
.
metadata
.
name
=
"test-resource"
.
endMetadata
()
.
build
()
val
createdResource
=
deployAndGetResource
(
resource
=
Gson
().
toJson
(
resource
)
)
val
createdResource
=
deployAndGetResource
(
resource
).
getResourceSet
(
server
.
client
)
assertEquals
(
1
,
createdResource
.
size
)
assertEquals
(
1
,
createdResource
.
size
)
assertTrue
(
createdResource
.
to
MutableSe
t
().
first
().
second
is
ConfigMap
)
assertTrue
(
createdResource
.
to
Lis
t
().
first
().
second
is
ConfigMap
)
assertTrue
(
createdResource
.
to
MutableSe
t
().
first
().
second
.
toString
().
contains
(
other
=
resource
.
metadata
.
name
))
assertTrue
(
createdResource
.
to
Lis
t
().
first
().
second
.
toString
().
contains
(
other
=
resource
.
metadata
.
name
))
}
}
@Test
@Test
fun
testLoadExecution
()
{
fun
testLoadExecution
()
{
val
loader
=
K8sResourceLoaderFromFile
(
server
.
client
)
val
stream
=
javaClass
.
getResourceAsStream
(
"/k8s-resource-files/test-execution.yaml"
)
val
resource
=
loader
.
loadK8sResource
(
"Execution"
,
testResourcePath
+
"test-execution.yaml"
)
as
CustomResourceWrapper
val
execution
=
this
.
executionClient
.
load
(
stream
).
get
()
val
createdResource
=
deployAndGetResource
(
resource
=
Gs
on
(
).
toJson
(
resource
.
crAsMap
)
)
val
createdResource
=
deployAndGetResource
(
executi
on
).
getResourceSet
(
server
.
client
)
assertEquals
(
1
,
createdResource
.
size
)
assertEquals
(
1
,
createdResource
.
size
)
assertTrue
(
createdResource
.
toMutableSet
().
first
().
second
is
CustomResourceWrapper
)
val
loadedResource
=
createdResource
.
toList
().
first
().
second
assertTrue
(
loadedResource
is
ExecutionCRD
)
val
loadedResource
=
createdResource
.
toMutableSet
().
first
().
second
assertEquals
(
"example-execution"
,
loadedResource
.
metadata
.
name
)
if
(
loadedResource
is
CustomResourceWrapper
){
assertTrue
(
loadedResource
.
getName
()
==
"example-execution"
)
}
}
}
@Test
@Test
fun
testLoadBenchmark
()
{
fun
testLoadBenchmark
()
{
val
loader
=
K8sResourceLoaderFromFile
(
server
.
client
)
val
benchmark
=
BenchmarkCRDummy
(
"example-benchmark"
).
getCR
()
val
resource
=
loader
.
loadK8sResource
(
"Benchmark"
,
testResourcePath
+
"test-benchmark.yaml"
)
as
CustomResourceWrapper
val
createdResource
=
deployAndGetResource
(
benchmark
).
getResourceSet
(
server
.
client
)
val
createdResource
=
deployAndGetResource
(
resource
=
Gson
().
toJson
(
resource
.
crAsMap
))
assertEquals
(
1
,
createdResource
.
size
)
assertEquals
(
1
,
createdResource
.
size
)
assertTrue
(
createdResource
.
toMutableSet
().
first
().
second
is
CustomResourceWrapper
)
val
loadedResource
=
createdResource
.
toList
().
first
().
second
assertTrue
(
loadedResource
is
BenchmarkCRD
)
val
loadedResource
=
createdResource
.
toMutableSet
().
first
().
second
assertEquals
(
"example-benchmark"
,
loadedResource
.
metadata
.
name
)
if
(
loadedResource
is
CustomResourceWrapper
){
assertTrue
(
loadedResource
.
getName
()
==
"example-benchmark"
)
}
}
}
@Test
@Test
fun
testLoadServiceMonitor
()
{
fun
testLoadServiceMonitor
()
{
val
loader
=
K8sResourceLoaderFromFile
(
server
.
client
)
val
serviceMonitorContext
=
ResourceDefinitionContext
.
Builder
()
val
resource
=
loader
.
loadK8sResource
(
"ServiceMonitor"
,
testResourcePath
+
"test-service-monitor.yaml"
)
as
CustomResourceWrapper
.
withGroup
(
"monitoring.coreos.com"
)
val
createdResource
=
deployAndGetResource
(
resource
=
Gson
().
toJson
(
resource
.
crAsMap
))
.
withKind
(
"ServiceMonitor"
)
.
withPlural
(
"servicemonitors"
)
.
withNamespaced
(
true
)
.
withVersion
(
"v1"
)
.
build
()
server
.
registerResource
(
serviceMonitorContext
)
assertEquals
(
1
,
createdResource
.
size
)
val
stream
=
javaClass
.
getResourceAsStream
(
"/k8s-resource-files/test-service-monitor.yaml"
)
assertTrue
(
createdResource
.
toMutableSet
().
first
().
second
is
CustomResourceWrapper
)
val
serviceMonitor
=
server
.
client
.
load
(
stream
).
get
()[
0
]
val
createdResource
=
deployAndGetResource
(
serviceMonitor
).
getResourceSet
(
server
.
client
)
val
loadedResource
=
createdResource
.
toMutableSet
().
first
().
second
assertEquals
(
1
,
createdResource
.
size
)
if
(
loadedResource
is
CustomResourceWrapper
){
val
loadedResource
=
createdResource
.
toList
().
first
().
second
assertTrue
(
loadedResource
.
getName
()
==
"test-service-monitor"
)
assertTrue
(
loadedResource
is
GenericKubernetesResource
)
}
assertEquals
(
"ServiceMonitor"
,
loadedResource
.
kind
)
assertEquals
(
"test-service-monitor"
,
loadedResource
.
metadata
.
name
)
}
}
@Test
@Test
fun
testMultipleFiles
(){
fun
testMultipleFiles
(){
val
resourceBuilder
=
DeploymentBuilder
()
val
deployment
=
DeploymentBuilder
()
resourceBuilder
.
withNewSpec
().
endSpec
()
.
withNewSpec
()
resourceBuilder
.
withNewMetadata
().
endMetadata
()
.
endSpec
()
val
resource
=
resourceBuilder
.
build
()
.
withNewMetadata
()
resource
.
metadata
.
name
=
"test-deployment"
.
withName
(
"test-deployment"
)
.
endMetadata
()
val
resourceBuilder1
=
ConfigMapBuilder
()
.
build
()
resourceBuilder1
.
withNewMetadata
().
endMetadata
()
val
configMap
=
ConfigMapBuilder
()
val
resource1
=
resourceBuilder1
.
build
()
.
withNewMetadata
()
resource1
.
metadata
.
name
=
"test-configmap"
.
withName
(
"test-configmap"
)
.
endMetadata
()
val
configMap1
=
ConfigMapBuilder
()
.
withNewMetadata
().
withName
(
"test-configmap"
).
endMetadata
()
.
addToData
(
"test-deployment.yaml"
,
Gson
().
toJson
(
resource
))
.
addToData
(
"test-configmap.yaml"
,
Gson
().
toJson
(
resource1
))
.
build
()
.
build
()
server
.
client
.
configMaps
().
createOrReplace
(
configMap1
)
val
createdResourceSet
=
deployAndGetResource
(
deployment
,
configMap
).
getResourceSet
(
server
.
client
)
val
resourceSet
=
ConfigMapResourceSet
()
resourceSet
.
name
=
"test-configmap"
val
createdResourcesSet
=
resourceSet
.
getResourceSet
(
server
.
client
)
assertEquals
(
2
,
createdResource
s
Set
.
size
)
assertEquals
(
2
,
createdResourceSet
.
size
)
assert
(
createdResource
s
Set
.
to
Mutable
List
()[
0
].
second
is
Deployment
)
assert
(
createdResourceSet
.
toList
()[
0
].
second
is
Deployment
)
assert
(
createdResource
s
Set
.
to
Mutable
List
()[
1
].
second
is
ConfigMap
)
assert
(
createdResourceSet
.
toList
()[
1
].
second
is
ConfigMap
)
}
}
@Test
@Test
fun
testFileIsSet
(){
fun
testFilesRestricted
()
{
val
resourceBuilder
=
DeploymentBuilder
()
val
deployment
=
DeploymentBuilder
()
resourceBuilder
.
withNewSpec
().
endSpec
()
.
withNewSpec
()
resourceBuilder
.
withNewMetadata
().
endMetadata
()
.
endSpec
()
val
resource
=
resourceBuilder
.
build
()
.
withNewMetadata
()
resource
.
metadata
.
name
=
"test-deployment"
.
withName
(
"test-deployment"
)
.
endMetadata
()
val
resourceBuilder1
=
ConfigMapBuilder
()
.
build
()
resourceBuilder1
.
withNewMetadata
().
endMetadata
()
val
configMap
=
ConfigMapBuilder
()
val
resource1
=
resourceBuilder1
.
build
()
.
withNewMetadata
()
resource1
.
metadata
.
name
=
"test-configmap"
.
withName
(
"test-configmap"
)
.
endMetadata
()
val
configMap1
=
ConfigMapBuilder
()
.
withNewMetadata
().
withName
(
"test-configmap"
).
endMetadata
()
.
addToData
(
"test-deployment.yaml"
,
Gson
().
toJson
(
resource
))
.
addToData
(
"test-configmap.yaml"
,
Gson
().
toJson
(
resource1
))
.
build
()
.
build
()
server
.
client
.
configMaps
().
createOrReplace
(
configMap1
)
val
createdResourceSet
=
deployAndGetResource
(
deployment
,
configMap
)
val
allResources
=
createdResourceSet
.
getResourceSet
(
server
.
client
)
val
resourceSet
=
ConfigMapResourceSet
()
assertEquals
(
2
,
allResources
.
size
)
resourceSet
.
name
=
"test-configmap"
createdResourceSet
.
files
=
listOf
(
allResources
.
first
().
first
)
// only select first file from ConfigMa
resourceSet
.
files
=
listOf
(
"test-deployment.yaml"
)
val
resources
=
createdResourceSet
.
getResourceSet
(
server
.
client
)
assertEquals
(
1
,
resources
.
size
)
assertTrue
(
resources
.
toList
().
first
().
second
is
Deployment
)
}
val
createdResourcesSet
=
resourceSet
.
getResourceSet
(
server
.
client
)
@Test
fun
testFileNotExist
()
{
val
resource
=
DeploymentBuilder
()
.
withNewSpec
()
.
endSpec
()
.
withNewMetadata
()
.
withName
(
"test-deployment"
)
.
endMetadata
()
.
build
()
assertEquals
(
1
,
createdResourcesSet
.
size
)
val
resourceSet
=
deployAndGetResource
(
resource
)
assert
(
createdResourcesSet
.
toMutableSet
().
first
().
second
is
Deployment
)
resourceSet
.
files
=
listOf
(
"non-existing-file.yaml"
)
assertThrows
<
DeploymentFailedException
>
{
resourceSet
.
getResourceSet
(
server
.
client
)
}
}
}
@Test
@Test
fun
testConfigMapNotExist
()
{
fun
testConfigMapNotExist
()
{
val
resourceSet
=
ConfigMapResourceSet
()
val
resourceSet
=
ConfigMapResourceSet
()
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment