Skip to content

Commit

Permalink
exposition.go tested
Browse files Browse the repository at this point in the history
  • Loading branch information
davidefalcone1 committed Jan 5, 2021
1 parent cfb9292 commit e243108
Show file tree
Hide file tree
Showing 3 changed files with 213 additions and 40 deletions.
39 changes: 39 additions & 0 deletions operators/pkg/instance-creation/cloud-init_test.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,52 @@
package instance_creation

import (
"strings"
"testing"

"github.com/stretchr/testify/assert"
"gopkg.in/yaml.v2"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func TestCreateUserData(t *testing.T) {
var (
nextUsername = "usertest"
nextPassword = "passtest"
nextCloudBaseUrl = "nextcloud.url"
)
publicKeys := []string{"key1", "key2", "key3"}

rawConfig := createUserdata(nextUsername, nextPassword, nextCloudBaseUrl, publicKeys)

var config cloudInitConfig

err := yaml.Unmarshal([]byte(rawConfig["userdata"]), &config)

assert.Equal(t, err, nil, "Yaml parser should return nil error.")

// check if header comment is present
hc := strings.HasPrefix(rawConfig["userdata"], "#cloud-config\n")

var (
expectedmount = []string{nextCloudBaseUrl + "/remote.php/dav/files/" + nextUsername, "/media/MyDrive", "davfs", "_netdev,auto,user,rw,uid=1000,gid=1000", "0", "0"}
expectedcontent = "/media/MyDrive " + nextUsername + " " + nextPassword
expectedpath = "/etc/davfs2/secrets"
expectedpermissions = "0600"
)
assert.Equal(t, hc, true, "Cloud-init head comment should be present.")
assert.Equal(t, config.Network.Version, 2, "Network version should be set to 2.")
assert.Equal(t, config.Network.Dhcp4, true, "DHCPv4 should be set to true.")
assert.Equal(t, config.Mounts[0], expectedmount, "Nextcloud mount should be set to "+strings.Join(expectedmount, ", ")+".")
assert.Equal(t, config.WriteFiles[0].Content, expectedcontent, "Nextcloud secret should be se to "+expectedcontent+" .")
assert.Equal(t, config.WriteFiles[0].Path, expectedpath, "Nextcloud secret path should be set to "+expectedpath+".")
assert.Equal(t, config.WriteFiles[0].Permissions, expectedpermissions, "Nextcloud secret permissions should be set to "+expectedpermissions+" .")
assert.Equal(t, config.SSHAuthorizedKeys[0], publicKeys[0], "Public key should be set to"+publicKeys[0]+" .")
assert.Equal(t, config.SSHAuthorizedKeys[1], publicKeys[1], "Public key should be set to"+publicKeys[1]+" .")
assert.Equal(t, config.SSHAuthorizedKeys[2], publicKeys[2], "Public key should be set to"+publicKeys[2]+" .")

}

func TestCreateCloudInitSecret(t *testing.T) {
var (
name = "name"
Expand Down
40 changes: 0 additions & 40 deletions operators/pkg/instance-creation/creation_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@ package instance_creation

import (
"strconv"
"strings"
"testing"

"github.com/netgroup-polito/CrownLabs/operators/api/v1alpha2"
"k8s.io/apimachinery/pkg/api/resource"

"github.com/stretchr/testify/assert"
"gopkg.in/yaml.v2"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
Expand Down Expand Up @@ -49,44 +47,6 @@ func TestWhitelist(t *testing.T) {
assert.Equal(t, c2, false, "The two labels set should be different and return false.")
}

func TestCreateUserData(t *testing.T) {
var (
nextUsername = "usertest"
nextPassword = "passtest"
nextCloudBaseUrl = "nextcloud.url"
)
publicKeys := []string{"key1", "key2", "key3"}

rawConfig := createUserdata(nextUsername, nextPassword, nextCloudBaseUrl, publicKeys)

var config cloudInitConfig

err := yaml.Unmarshal([]byte(rawConfig["userdata"]), &config)

assert.Equal(t, err, nil, "Yaml parser should return nil error.")

// check if header comment is present
hc := strings.HasPrefix(rawConfig["userdata"], "#cloud-config\n")

var (
expectedmount = []string{nextCloudBaseUrl + "/remote.php/dav/files/" + nextUsername, "/media/MyDrive", "davfs", "_netdev,auto,user,rw,uid=1000,gid=1000", "0", "0"}
expectedcontent = "/media/MyDrive " + nextUsername + " " + nextPassword
expectedpath = "/etc/davfs2/secrets"
expectedpermissions = "0600"
)
assert.Equal(t, hc, true, "Cloud-init head comment should be present.")
assert.Equal(t, config.Network.Version, 2, "Network version should be set to 2.")
assert.Equal(t, config.Network.Dhcp4, true, "DHCPv4 should be set to true.")
assert.Equal(t, config.Mounts[0], expectedmount, "Nextcloud mount should be set to "+strings.Join(expectedmount, ", ")+".")
assert.Equal(t, config.WriteFiles[0].Content, expectedcontent, "Nextcloud secret should be se to "+expectedcontent+" .")
assert.Equal(t, config.WriteFiles[0].Path, expectedpath, "Nextcloud secret path should be set to "+expectedpath+".")
assert.Equal(t, config.WriteFiles[0].Permissions, expectedpermissions, "Nextcloud secret permissions should be set to "+expectedpermissions+" .")
assert.Equal(t, config.SSHAuthorizedKeys[0], publicKeys[0], "Public key should be set to"+publicKeys[0]+" .")
assert.Equal(t, config.SSHAuthorizedKeys[1], publicKeys[1], "Public key should be set to"+publicKeys[1]+" .")
assert.Equal(t, config.SSHAuthorizedKeys[2], publicKeys[2], "Public key should be set to"+publicKeys[2]+" .")

}

func TestCreateVirtualMachineInstance(t *testing.T) {
tc1 := &v1alpha2.Environment{
Name: "Test1",
Expand Down
174 changes: 174 additions & 0 deletions operators/pkg/instance-creation/exposition_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
package instance_creation

import (
"testing"

"github.com/stretchr/testify/assert"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
)

func TestCreateService(t *testing.T) {
var (
name = "usertest"
namespace = "namespacetest"
)

ownerRef := []metav1.OwnerReference{{
APIVersion: "crownlabs.polito.it/v1alpha2",
Kind: "Instance",
Name: "Test1",
},
}

service := CreateService(name, namespace, ownerRef)

assert.Equal(t, service.ObjectMeta.Name, name+"-svc")
assert.Equal(t, service.ObjectMeta.Namespace, namespace)
assert.Equal(t, service.OwnerReferences[0].APIVersion, "crownlabs.polito.it/v1alpha2")
assert.Equal(t, service.OwnerReferences[0].Kind, "Instance")
assert.Equal(t, service.OwnerReferences[0].Name, "Test1")
}

func TestCreateIngress(t *testing.T) {
var (
name = "usertest"
namespace = "namespacetest"
urlUUID = "urlUUIDtest"
websiteBaseUrl = "websiteBaseUrlTest"
svc = corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: "svc-test",
},
Spec: corev1.ServiceSpec{
Ports: []corev1.ServicePort{
{
TargetPort: intstr.IntOrString{IntVal: 22},
},
},
},
}
url = websiteBaseUrl + "/" + urlUUID
)

ownerRef := []metav1.OwnerReference{{
APIVersion: "crownlabs.polito.it/v1alpha2",
Kind: "Instance",
Name: "Test1",
},
}

ingress := CreateIngress(name, namespace, svc, urlUUID, websiteBaseUrl, ownerRef)

assert.Equal(t, ingress.ObjectMeta.Name, name+"-ingress")
assert.Equal(t, ingress.ObjectMeta.Namespace, namespace)
assert.Equal(t, ingress.Spec.Rules[0].IngressRuleValue.HTTP.Paths[0].Backend.Service.Name, svc.Name)
assert.Equal(t, ingress.Spec.Rules[0].IngressRuleValue.HTTP.Paths[0].Backend.Service.Port.Number, svc.Spec.Ports[0].TargetPort.IntVal)
assert.Equal(t, ingress.ObjectMeta.Annotations["nginx.ingress.kubernetes.io/auth-signin"], "https://$host/"+urlUUID+"/oauth2/start?rd=$escaped_request_uri")
assert.Equal(t, ingress.ObjectMeta.Annotations["nginx.ingress.kubernetes.io/auth-url"], "https://$host/"+urlUUID+"/oauth2/auth")
assert.Equal(t, ingress.ObjectMeta.Annotations["nginx.ingress.kubernetes.io/configuration-snippet"], `sub_filter '<head>' '<head> <base href="https://$host/`+urlUUID+`/index.html">';`)
assert.Equal(t, ingress.Spec.Rules[0].IngressRuleValue.HTTP.Paths[0].Path, "/"+urlUUID+"(/|$)(.*)")
assert.Equal(t, ingress.ObjectMeta.Annotations["crownlabs.polito.it/probe-url"], "https://"+url)
assert.Equal(t, ingress.Spec.TLS[0].Hosts[0], websiteBaseUrl)
assert.Equal(t, ingress.Spec.Rules[0].Host, websiteBaseUrl)
assert.Equal(t, ingress.OwnerReferences[0].APIVersion, "crownlabs.polito.it/v1alpha2")
assert.Equal(t, ingress.OwnerReferences[0].Kind, "Instance")
assert.Equal(t, ingress.OwnerReferences[0].Name, "Test1")
assert.Equal(t, ingress.Spec.Rules[0].IngressRuleValue.HTTP.Paths[0].Backend.Service.Name, svc.Name)
assert.Equal(t, ingress.Spec.Rules[0].IngressRuleValue.HTTP.Paths[0].Backend.Service.Port.Number, svc.Spec.Ports[0].TargetPort.IntVal)
}

func TestCreateOauth2Deployment(t *testing.T) {
var (
name = "usertest"
namespace = "namespacetest"
urlUUID = "urlUUIDtest"
image = "imagetest"
clientSecret = "secrettest"
providerUrl = "urltest"
)
ownerRef := []metav1.OwnerReference{{
APIVersion: "crownlabs.polito.it/v1alpha2",
Kind: "Instance",
Name: "Test1",
},
}

deploy := CreateOauth2Deployment(name, namespace, urlUUID, image, clientSecret, providerUrl, ownerRef)

assert.Equal(t, deploy.ObjectMeta.Name, name+"-oauth2-deploy")
assert.Equal(t, deploy.ObjectMeta.Namespace, namespace)
assert.Equal(t, deploy.OwnerReferences[0].APIVersion, "crownlabs.polito.it/v1alpha2")
assert.Equal(t, deploy.OwnerReferences[0].Kind, "Instance")
assert.Equal(t, deploy.OwnerReferences[0].Name, "Test1")
assert.Equal(t, deploy.Spec.Template.Spec.Containers[0].Image, image)
assert.Contains(t, deploy.Spec.Template.Spec.Containers[0].Args, "--proxy-prefix=/"+urlUUID+"/oauth2")
assert.Contains(t, deploy.Spec.Template.Spec.Containers[0].Args, "--cookie-path=/"+urlUUID)
assert.Contains(t, deploy.Spec.Template.Spec.Containers[0].Args, "--client-secret="+clientSecret)
assert.Contains(t, deploy.Spec.Template.Spec.Containers[0].Args, "--login-url="+providerUrl+"/protocol/openid-connect/auth")
assert.Contains(t, deploy.Spec.Template.Spec.Containers[0].Args, "--redeem-url="+providerUrl+"/protocol/openid-connect/token")
assert.Contains(t, deploy.Spec.Template.Spec.Containers[0].Args, "--validate-url="+providerUrl+"/protocol/openid-connect/userinfo")

}

func TestCreateOauth2Service(t *testing.T) {
var (
name = "usertest"
namespace = "namespacetest"
)
ownerRef := []metav1.OwnerReference{{
APIVersion: "crownlabs.polito.it/v1alpha2",
Kind: "Instance",
Name: "Test1",
},
}
service := CreateOauth2Service(name, namespace, ownerRef)

assert.Equal(t, service.ObjectMeta.Name, name+"-oauth2-svc")
assert.Equal(t, service.ObjectMeta.Namespace, namespace)
assert.Equal(t, service.OwnerReferences[0].APIVersion, "crownlabs.polito.it/v1alpha2")
assert.Equal(t, service.OwnerReferences[0].Kind, "Instance")
assert.Equal(t, service.OwnerReferences[0].Name, "Test1")
assert.Equal(t, service.Spec.Selector["app"], name)
}

func TestCreateOauth2Ingress(t *testing.T) {
var (
name = "usertest"
namespace = "namespacetest"
urlUUID = "urlUUIDtest"
websiteBaseUrl = "websiteBaseUrlTest"
svc = corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: "svc-test",
},
Spec: corev1.ServiceSpec{
Ports: []corev1.ServicePort{
{
TargetPort: intstr.IntOrString{IntVal: 22},
},
},
},
}
)
ownerRef := []metav1.OwnerReference{{
APIVersion: "crownlabs.polito.it/v1alpha2",
Kind: "Instance",
Name: "Test1",
},
}

ingress := CreateOauth2Ingress(name, namespace, svc, urlUUID, websiteBaseUrl, ownerRef)

assert.Equal(t, ingress.ObjectMeta.Name, name+"-oauth2-ingress")
assert.Equal(t, ingress.ObjectMeta.Namespace, namespace)
assert.Equal(t, ingress.OwnerReferences[0].APIVersion, "crownlabs.polito.it/v1alpha2")
assert.Equal(t, ingress.OwnerReferences[0].Kind, "Instance")
assert.Equal(t, ingress.OwnerReferences[0].Name, "Test1")
assert.Equal(t, ingress.Spec.Rules[0].IngressRuleValue.HTTP.Paths[0].Backend.Service.Name, svc.Name)
assert.Equal(t, ingress.Spec.Rules[0].IngressRuleValue.HTTP.Paths[0].Backend.Service.Port.Number, svc.Spec.Ports[0].TargetPort.IntVal)
assert.Equal(t, ingress.Spec.Rules[0].IngressRuleValue.HTTP.Paths[0].Path, "/"+urlUUID+"/oauth2/.*")
assert.Equal(t, ingress.Spec.TLS[0].Hosts[0], websiteBaseUrl)
assert.Equal(t, ingress.Spec.Rules[0].Host, websiteBaseUrl)
}

0 comments on commit e243108

Please sign in to comment.