Skip to content

Instantly share code, notes, and snippets.

@gotwarlost
Last active July 17, 2024 22:07
Show Gist options
  • Save gotwarlost/cb9e50fcb221894a87fc328b6b005698 to your computer and use it in GitHub Desktop.
Save gotwarlost/cb9e50fcb221894a87fc328b6b005698 to your computer and use it in GitHub Desktop.
unit testing for cue crossplane functions
go install github.com/crossplane-contrib/function-cue/cmd/fn-cue-tools@v0.3.0
fn-cue-tools cue-test --test-dir ./tests/ ./implementation/
-- implementation/init.cue --
package implementation
#request: {...}
composite: #request.observed.composite.resource
compName: composite.metadata.name
params: composite.spec.parameters
configMapName: [
if params.name != _|_ {params.name},
composite.metadata.labels["crossplane.io/claim-name"],
][0]
-- implementation/resources.cue --
package implementation
for ns in params.namespaces {
response: desired: resources: "config_map_\(ns)": resource: {
apiVersion: "kubernetes.crossplane.io/v1alpha2"
kind: "Object"
metadata: name: "cm-\(compName)-\(ns)"
spec: forProvider: manifest: {
apiVersion: "v1"
kind: "ConfigMap"
metadata: {
namespace: ns
name: configMapName
labels: composite.metadata.labels
}
data: params.data
}
}
}
-- tests/basic.cue --
@if(basic)
package replicatedmap
#request: {
context: "apiextensions.crossplane.io/environment": {
apiVersion: "internal.crossplane.io/v1alpha1"
kind: "Environment"
}
desired: {}
observed: composite: resource: {
apiVersion: "simple.cuefn.example.com/v1alpha1"
kind: "XReplicatedMap"
metadata: {
finalizers: [
"composite.apiextensions.crossplane.io",
]
generateName: "map1-"
labels: {
"crossplane.io/claim-name": "map1"
"crossplane.io/claim-namespace": "claims"
"crossplane.io/composite": "map1-mwtrw"
}
name: "map1-mwtrw"
}
spec: {
claimRef: {
apiVersion: "simple.cuefn.example.com/v1alpha1"
kind: "ReplicatedMap"
name: "map1"
namespace: "claims"
}
compositionRef: name: "xreplicatedmaps.simple.cuefn.example.com"
compositionRevisionRef: name: "xreplicatedmaps.simple.cuefn.example.com-f5c46a5"
compositionUpdatePolicy: "Automatic"
parameters: {
data: meaning_of_life: "42"
namespaces: [
"foo",
"bar",
"baz",
]
}
}
}
}
{
response: desired: resources: {
config_map_bar: resource: {
apiVersion: "kubernetes.crossplane.io/v1alpha2"
kind: "Object"
metadata: name: "cm-map1-mwtrw-bar"
spec: forProvider: manifest: {
apiVersion: "v1"
data: meaning_of_life: "42"
kind: "ConfigMap"
metadata: {
labels: {
"crossplane.io/claim-name": "map1"
"crossplane.io/claim-namespace": "claims"
"crossplane.io/composite": "map1-mwtrw"
}
name: "map1"
namespace: "bar"
}
}
}
config_map_baz: resource: {
apiVersion: "kubernetes.crossplane.io/v1alpha2"
kind: "Object"
metadata: name: "cm-map1-mwtrw-baz"
spec: forProvider: manifest: {
apiVersion: "v1"
data: meaning_of_life: "42"
kind: "ConfigMap"
metadata: {
labels: {
"crossplane.io/claim-name": "map1"
"crossplane.io/claim-namespace": "claims"
"crossplane.io/composite": "map1-mwtrw"
}
name: "map1"
namespace: "baz"
}
}
}
config_map_foo: resource: {
apiVersion: "kubernetes.crossplane.io/v1alpha2"
kind: "Object"
metadata: name: "cm-map1-mwtrw-foo"
spec: forProvider: manifest: {
apiVersion: "v1"
data: meaning_of_life: "42"
kind: "ConfigMap"
metadata: {
labels: {
"crossplane.io/claim-name": "map1"
"crossplane.io/claim-namespace": "claims"
"crossplane.io/composite": "map1-mwtrw"
}
name: "map1"
namespace: "foo"
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment