summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorjannfis <jann@mistrust.net>2020-08-04 19:45:46 +0200
committerjannfis <jann@mistrust.net>2020-08-04 19:45:46 +0200
commitbb184543e516f17c5801242645b5d77d0244c538 (patch)
tree79913d38a3f4566a4547d0923452a625518437c3 /test
Initial commit
Diffstat (limited to 'test')
-rw-r--r--test/README.md9
-rw-r--r--test/fake/kubernetes.go16
-rw-r--r--test/fixture/capture.go55
-rw-r--r--test/fixture/fileutil.go14
-rw-r--r--test/fixture/kubernetes.go33
-rw-r--r--test/testdata/docker/invalid1-config.json7
-rw-r--r--test/testdata/docker/valid-config.json7
-rw-r--r--test/testdata/kubernetes/config19
-rw-r--r--test/testdata/resources/dummy-secret.json12
9 files changed, 172 insertions, 0 deletions
diff --git a/test/README.md b/test/README.md
new file mode 100644
index 0000000..909e5a9
--- /dev/null
+++ b/test/README.md
@@ -0,0 +1,9 @@
+# What lives here
+
+The `test/` directory does not contain any tests, but all fixtures and data
+for running the unit tests.
+
+Do not add unit tests here. If a test-specific method would be useful to more
+than one package's unit test, add it to the `fixture` package. Methods defined
+as fixture are allowed to `panic()`, so they must not be used in code outside
+the unit tests.
diff --git a/test/fake/kubernetes.go b/test/fake/kubernetes.go
new file mode 100644
index 0000000..cad8b50
--- /dev/null
+++ b/test/fake/kubernetes.go
@@ -0,0 +1,16 @@
+package fake
+
+import (
+ "k8s.io/apimachinery/pkg/runtime"
+ kubefake "k8s.io/client-go/kubernetes/fake"
+)
+
+func NewFakeKubeClient() *kubefake.Clientset {
+ clientset := kubefake.NewSimpleClientset()
+ return clientset
+}
+
+func NewFakeClientsetWithResources(objects ...runtime.Object) *kubefake.Clientset {
+ clientset := kubefake.NewSimpleClientset(objects...)
+ return clientset
+}
diff --git a/test/fixture/capture.go b/test/fixture/capture.go
new file mode 100644
index 0000000..57073bb
--- /dev/null
+++ b/test/fixture/capture.go
@@ -0,0 +1,55 @@
+package fixture
+
+import (
+ "io/ioutil"
+ "os"
+)
+
+func CaptureStdout(callback func()) (string, error) {
+ oldStdout := os.Stdout
+ oldStderr := os.Stderr
+ r, w, err := os.Pipe()
+ if err != nil {
+ return "", err
+ }
+ os.Stdout = w
+ defer func() {
+ os.Stdout = oldStdout
+ os.Stderr = oldStderr
+ }()
+
+ callback()
+
+ w.Close()
+
+ data, err := ioutil.ReadAll(r)
+
+ if err != nil {
+ return "", err
+ }
+ return string(data), err
+}
+
+func CaptureStderr(callback func()) (string, error) {
+ oldStdout := os.Stdout
+ oldStderr := os.Stderr
+ r, w, err := os.Pipe()
+ if err != nil {
+ return "", err
+ }
+ os.Stderr = w
+ defer func() {
+ os.Stdout = oldStdout
+ os.Stderr = oldStderr
+ }()
+
+ callback()
+ w.Close()
+
+ data, err := ioutil.ReadAll(r)
+
+ if err != nil {
+ return "", err
+ }
+ return string(data), err
+}
diff --git a/test/fixture/fileutil.go b/test/fixture/fileutil.go
new file mode 100644
index 0000000..ce75911
--- /dev/null
+++ b/test/fixture/fileutil.go
@@ -0,0 +1,14 @@
+package fixture
+
+// Fixture functions for tests related to files
+
+import "io/ioutil"
+
+// MustReadFile must read a file from given path. Panics if it can't.
+func MustReadFile(path string) string {
+ retBytes, err := ioutil.ReadFile(path)
+ if err != nil {
+ panic(err)
+ }
+ return string(retBytes)
+}
diff --git a/test/fixture/kubernetes.go b/test/fixture/kubernetes.go
new file mode 100644
index 0000000..49d61be
--- /dev/null
+++ b/test/fixture/kubernetes.go
@@ -0,0 +1,33 @@
+package fixture
+
+import (
+ "encoding/json"
+
+ v1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+func NewSecret(namespace, name string, entries map[string][]byte) *v1.Secret {
+ secret := v1.Secret{
+ ObjectMeta: metav1.ObjectMeta{
+ Namespace: namespace,
+ Name: name,
+ },
+ Data: entries,
+ }
+ return &secret
+}
+
+func MustCreateSecretFromFile(filepath string) *v1.Secret {
+ jsonData := MustReadFile(filepath)
+ return MustCreateSecretFromJson(jsonData)
+}
+
+func MustCreateSecretFromJson(jsonData string) *v1.Secret {
+ var s v1.Secret
+ err := json.Unmarshal([]byte(jsonData), &s)
+ if err != nil {
+ panic(err)
+ }
+ return &s
+}
diff --git a/test/testdata/docker/invalid1-config.json b/test/testdata/docker/invalid1-config.json
new file mode 100644
index 0000000..244ff09
--- /dev/null
+++ b/test/testdata/docker/invalid1-config.json
@@ -0,0 +1,7 @@
+{
+ "auths": {
+ "https://registry-1.docker.io/v2/": {
+ "auth": "Zm9vOmJhcg=="
+ }
+ }
+}
diff --git a/test/testdata/docker/valid-config.json b/test/testdata/docker/valid-config.json
new file mode 100644
index 0000000..244ff09
--- /dev/null
+++ b/test/testdata/docker/valid-config.json
@@ -0,0 +1,7 @@
+{
+ "auths": {
+ "https://registry-1.docker.io/v2/": {
+ "auth": "Zm9vOmJhcg=="
+ }
+ }
+}
diff --git a/test/testdata/kubernetes/config b/test/testdata/kubernetes/config
new file mode 100644
index 0000000..2226e38
--- /dev/null
+++ b/test/testdata/kubernetes/config
@@ -0,0 +1,19 @@
+apiVersion: v1
+clusters:
+- cluster:
+ certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURBVENDQWVtZ0F3SUJBZ0lKQU1yVlBMS3JqWGx1TUEwR0NTcUdTSWIzRFFFQkN3VUFNQmN4RlRBVEJnTlYKQkFNTURERXdMakUxTWk0eE9ETXVNVEFlRncweU1EQTFNalF4TURBeU1qbGFGdzB6TURBMU1qSXhNREF5TWpsYQpNQmN4RlRBVEJnTlZCQU1NRERFd0xqRTFNaTR4T0RNdU1UQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCkFEQ0NBUW9DZ2dFQkFOeXhoWVZsLzBOUm43L2F4RjRaKytBNzJTcFZmbXVCNCs3QUFlREYxZXgvSVlFaDIzR2IKSzFuS25FUTZuNlgvemMyWVIveGdiekswSzJCV1paUENKME9WS2xWMklyckdtZ0xnMnpmTVB0RDZwNytFZEN4LwpIUW10MmRRUndrdHhyMFJqRUxFeUtZVE1BdHhnOFJUYi95TUVsY25iOEVFaGthZ2lGNUJKSTdreTlzYks1UlA2CkhJMUlMS2k1cE5hNGQ1YlhYNXFLeXM2dUFhY0V0OXQ3ZVdxMGtLamE0ckR5alZIYjk5WFg3QkV1SXZtVzV1WTAKMTI2UmVIT2UzUG1STGNEcGhrYVBncFZVN3Z3dmdGeldYT24xU1c3TFRXTG80K0p5UHpic3NjdFFRRjd1cWlKSgpwOFpWRURDTUluTFRDRURjRUlUdGxhdytyaXRFbS95SytQTUNBd0VBQWFOUU1FNHdIUVlEVlIwT0JCWUVGRDZmCktRdnljWUk3SzNLeFIreWdhL3o5ZDBnek1COEdBMVVkSXdRWU1CYUFGRDZmS1F2eWNZSTdLM0t4Uit5Z2EvejkKZDBnek1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQURBWG5PYXRQNnh4cUFxbApiYXlWUEg5SDJZQk5nN3JYd3pETnpUM2JxRWswYVg4RnJDbWU0RkhhVXl6QmlISTZOSi9wbWk0TkxwblRxa2NVCnY3M1RXUmhsZjE4dzQzUzA2ZFNmSXpSank3cUhXR2dWRnRKRTcrTXRhcllNaCsydkRwMSs1by9ic21wZk5DaDcKOEhFOGlqb3lGRDYvYnFmdGIyeU5jZmJVNmF4Wll5VmYvSlpvd2grZUtnU21iQXNaZXRLWXZmSGVEWnE2SFFsaQpjZnZqUUdMMDNMSGxtSjdQNWlBSkJyVlE5MmZLS3pOejRXQWV1aktiYlB0TlBtTnVpL3EzR0cwU3o4bGJiNXpvCnRvNitJMzAwUUJReGpVd0Uvb1AvUXkyN0dMeER2aGFFTEl4V2c1R1R3Q3NDeHBGZXUzSm0yMDNNU3pOVHlJRDYKOUZTa3Rxaz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
+ server: https://127.0.0.1:16443
+ name: mock-cluster
+contexts:
+- context:
+ cluster: mock-cluster
+ user: admin
+ name: mock-cluster
+current-context: mock-cluster
+kind: Config
+preferences: {}
+users:
+- name: admin
+ user:
+ password: foobar
+ username: admin
diff --git a/test/testdata/resources/dummy-secret.json b/test/testdata/resources/dummy-secret.json
new file mode 100644
index 0000000..7055f67
--- /dev/null
+++ b/test/testdata/resources/dummy-secret.json
@@ -0,0 +1,12 @@
+{
+ "apiVersion": "v1",
+ "data": {
+ "namespace": "YXJnb2Nk"
+ },
+ "kind": "Secret",
+ "metadata": {
+ "name": "test-secret",
+ "namespace": "test-namespace"
+ }
+}
+