mirror of
https://github.com/openfaas/faasd.git
synced 2025-06-13 18:36:46 +00:00
This commit adds the EnvVars set on the process to the retuurn from the faasd provider. It gets the container process and then filters out PATH and fprocess (if found) and returns the remaining envVars as a map. This has using tests for getting the EnvVars from procees.env and has been tested on amd_64 faasd by building, deploying and using curl against the provider and gateway. Signed-off-by: Alistair Hey <alistair@heyal.co.uk>
81 lines
3.0 KiB
Go
81 lines
3.0 KiB
Go
package handlers
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/opencontainers/runtime-spec/specs-go"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func Test_BuildLabelsAndAnnotationsFromServiceSpec_Annotations(t *testing.T) {
|
|
container := map[string]string{
|
|
"qwer": "ty",
|
|
"dvor": "ak",
|
|
fmt.Sprintf("%scurrent-time", annotationLabelPrefix): "5 Nov 20:10:20 PST 1955",
|
|
fmt.Sprintf("%sfuture-time", annotationLabelPrefix): "21 Oct 20:10:20 PST 2015",
|
|
}
|
|
|
|
labels, annotation := buildLabelsAndAnnotations(container)
|
|
|
|
if len(labels) != 2 {
|
|
t.Errorf("want: %d labels got: %d", 2, len(labels))
|
|
}
|
|
|
|
if len(annotation) != 2 {
|
|
t.Errorf("want: %d annotation got: %d", 1, len(annotation))
|
|
}
|
|
|
|
if _, ok := annotation["current-time"]; !ok {
|
|
t.Errorf("want: '%s' entry in annotation map got: key not found", "current-time")
|
|
}
|
|
}
|
|
|
|
func Test_SplitMountToSecrets(t *testing.T) {
|
|
type test struct {
|
|
Name string
|
|
Input []specs.Mount
|
|
Expected []string
|
|
}
|
|
tests := []test{
|
|
{Name: "No matching openfaas secrets", Input: []specs.Mount{{Destination: "/foo/"}}, Expected: []string{}},
|
|
{Name: "Nil mounts", Input: nil, Expected: []string{}},
|
|
{Name: "No Mounts", Input: []specs.Mount{{Destination: "/foo/"}}, Expected: []string{}},
|
|
{Name: "One Mounts IS secret", Input: []specs.Mount{{Destination: "/var/openfaas/secrets/secret1"}}, Expected: []string{"secret1"}},
|
|
{Name: "Multiple Mounts 1 secret", Input: []specs.Mount{{Destination: "/var/openfaas/secrets/secret1"}, {Destination: "/some/other/path"}}, Expected: []string{"secret1"}},
|
|
{Name: "Multiple Mounts all secrets", Input: []specs.Mount{{Destination: "/var/openfaas/secrets/secret1"}, {Destination: "/var/openfaas/secrets/secret2"}}, Expected: []string{"secret1", "secret2"}},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
t.Run(tc.Name, func(t *testing.T) {
|
|
got := readSecretsFromMounts(tc.Input)
|
|
if !reflect.DeepEqual(got, tc.Expected) {
|
|
t.Fatalf("expected %s, got %s", tc.Expected, got)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_ProcessEnvToEnvVars(t *testing.T) {
|
|
type test struct {
|
|
Name string
|
|
Input []string
|
|
Expected map[string]string
|
|
}
|
|
tests := []test{
|
|
{Name: "No matching EnvVars", Input: []string{"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "fprocess=python", "index.py"}, Expected: make(map[string]string)},
|
|
{Name: "No EnvVars", Input: []string{}, Expected: make(map[string]string)},
|
|
{Name: "One EnvVar", Input: []string{"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "fprocess=python", "env=this", "index.py"}, Expected: map[string]string{"env": "this"}},
|
|
{Name: "Multiple EnvVars", Input: []string{"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "this=that", "env=var", "fprocess=python", "index.py"}, Expected: map[string]string{"this": "that", "env": "var"}},
|
|
{Name: "Nil EnvVars", Input: nil, Expected: make(map[string]string)},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
t.Run(tc.Name, func(t *testing.T) {
|
|
got := readEnvVarsFromProcessEnv(tc.Input)
|
|
if !reflect.DeepEqual(got, tc.Expected) {
|
|
t.Fatalf("expected %s, got %s", tc.Expected, got)
|
|
}
|
|
})
|
|
}
|
|
}
|