forked from toolshed/abra
		
	
		
			
				
	
	
		
			244 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			244 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package envfile_test
 | |
| 
 | |
| import (
 | |
| 	"reflect"
 | |
| 	"slices"
 | |
| 	"strings"
 | |
| 	"testing"
 | |
| 
 | |
| 	appPkg "coopcloud.tech/abra/pkg/app"
 | |
| 	"coopcloud.tech/abra/pkg/config"
 | |
| 	"coopcloud.tech/abra/pkg/envfile"
 | |
| 	"coopcloud.tech/abra/pkg/recipe"
 | |
| 	testPkg "coopcloud.tech/abra/pkg/test"
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| func TestGetAllFoldersInDirectory(t *testing.T) {
 | |
| 	folders, err := config.GetAllFoldersInDirectory(testPkg.TestFolder)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	if !reflect.DeepEqual(folders, testPkg.TFolders) {
 | |
| 		t.Fatalf("did not get expected folders. Expected: (%s), Got: (%s)", strings.Join(testPkg.TFolders, ","), strings.Join(folders, ","))
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestGetAllFilesInDirectory(t *testing.T) {
 | |
| 	files, err := config.GetAllFilesInDirectory(testPkg.TestFolder)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	var fileNames []string
 | |
| 	for _, file := range files {
 | |
| 		fileNames = append(fileNames, file.Name())
 | |
| 	}
 | |
| 	if !reflect.DeepEqual(fileNames, testPkg.TFiles) {
 | |
| 		t.Fatalf("did not get expected files. Expected: (%s), Got: (%s)", strings.Join(testPkg.TFiles, ","), strings.Join(fileNames, ","))
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestReadEnv(t *testing.T) {
 | |
| 	env, err := envfile.ReadEnv(testPkg.ExpectedAppFile.Path)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	if !reflect.DeepEqual(env, testPkg.ExpectedAppEnv) {
 | |
| 		t.Fatal("did not get expected application settings")
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestReadAbraShEnvVars(t *testing.T) {
 | |
| 	r := recipe.Get("abra-test-recipe")
 | |
| 	err := r.EnsureExists()
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	abraShEnv, err := envfile.ReadAbraShEnvVars(r.AbraShPath)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	if len(abraShEnv) == 0 {
 | |
| 		t.Error("at least one env var should be exported")
 | |
| 	}
 | |
| 
 | |
| 	if _, ok := abraShEnv["INNER_FOO"]; ok {
 | |
| 		t.Error("INNER_FOO should not be exported")
 | |
| 	}
 | |
| 
 | |
| 	if _, ok := abraShEnv["INNER_BAZ"]; ok {
 | |
| 		t.Error("INNER_BAZ should not be exported")
 | |
| 	}
 | |
| 
 | |
| 	if _, ok := abraShEnv["OUTER_FOO"]; !ok {
 | |
| 		t.Error("OUTER_FOO should be exported")
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestReadAbraShCmdNames(t *testing.T) {
 | |
| 	r := recipe.Get("abra-test-recipe")
 | |
| 	err := r.EnsureExists()
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	cmdNames, err := appPkg.ReadAbraShCmdNames(r.AbraShPath)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	if len(cmdNames) == 0 {
 | |
| 		t.Error("at least one command name should be found")
 | |
| 	}
 | |
| 
 | |
| 	expectedCmdNames := []string{"test_cmd", "test_cmd_args"}
 | |
| 	for _, cmdName := range expectedCmdNames {
 | |
| 		if !slices.Contains(cmdNames, cmdName) {
 | |
| 			t.Fatalf("%s should have been found in %s", cmdName, r.AbraShPath)
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestCheckEnv(t *testing.T) {
 | |
| 	r := recipe.Get("abra-test-recipe")
 | |
| 	err := r.EnsureExists()
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	envSample, err := r.SampleEnv()
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	app := appPkg.App{
 | |
| 		Name:   "test-app",
 | |
| 		Recipe: recipe.Get(r.Name),
 | |
| 		Domain: "example.com",
 | |
| 		Env:    envSample,
 | |
| 		Path:   "example.com.env",
 | |
| 		Server: "example.com",
 | |
| 	}
 | |
| 
 | |
| 	envVars, err := appPkg.CheckEnv(app)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	for _, envVar := range envVars {
 | |
| 		if !envVar.Present {
 | |
| 			t.Fatalf("%s should be present", envVar.Name)
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestCheckEnvError(t *testing.T) {
 | |
| 	r := recipe.Get("abra-test-recipe")
 | |
| 	err := r.EnsureExists()
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	envSample, err := r.SampleEnv()
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	delete(envSample, "DOMAIN")
 | |
| 
 | |
| 	app := appPkg.App{
 | |
| 		Name:   "test-app",
 | |
| 		Recipe: recipe.Get(r.Name),
 | |
| 		Domain: "example.com",
 | |
| 		Env:    envSample,
 | |
| 		Path:   "example.com.env",
 | |
| 		Server: "example.com",
 | |
| 	}
 | |
| 
 | |
| 	envVars, err := appPkg.CheckEnv(app)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	for _, envVar := range envVars {
 | |
| 		if envVar.Name == "DOMAIN" && envVar.Present {
 | |
| 			t.Fatalf("%s should not be present", envVar.Name)
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestEnvVarCommentsRemoved(t *testing.T) {
 | |
| 	r := recipe.Get("abra-test-recipe")
 | |
| 	err := r.EnsureExists()
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	envSample, err := r.SampleEnv()
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	envVar, exists := envSample["WITH_COMMENT"]
 | |
| 	if !exists {
 | |
| 		t.Fatal("WITH_COMMENT env var should be present in .env.sample")
 | |
| 	}
 | |
| 
 | |
| 	if strings.Contains(envVar, "should be removed") {
 | |
| 		t.Fatalf("comment from '%s' should be removed", envVar)
 | |
| 	}
 | |
| 
 | |
| 	envVar, exists = envSample["SECRET_TEST_PASS_TWO_VERSION"]
 | |
| 	if !exists {
 | |
| 		t.Fatal("SECRET_TEST_PASS_TWO_VERSION env var should be present in .env.sample")
 | |
| 	}
 | |
| 
 | |
| 	if strings.Contains(envVar, "length") {
 | |
| 		t.Fatal("comment from env var SECRET_TEST_PASS_TWO_VERSION should have been removed")
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestEnvVarModifiersIncluded(t *testing.T) {
 | |
| 	r := recipe.Get("abra-test-recipe")
 | |
| 	err := r.EnsureExists()
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	envSample, modifiers, err := envfile.ReadEnvWithModifiers(r.SampleEnvPath)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	if !strings.Contains(envSample["SECRET_TEST_PASS_TWO_VERSION"], "v1") {
 | |
| 		t.Errorf("value should be 'v1', got: '%s'", envSample["SECRET_TEST_PASS_TWO_VERSION"])
 | |
| 	}
 | |
| 	if modifiers == nil || modifiers["SECRET_TEST_PASS_TWO_VERSION"] == nil {
 | |
| 		t.Errorf("no modifiers included")
 | |
| 	} else {
 | |
| 		if modifiers["SECRET_TEST_PASS_TWO_VERSION"]["length"] != "10" {
 | |
| 			t.Errorf("length modifier should be '10', got: '%s'", modifiers["SECRET_TEST_PASS_TWO_VERSION"]["length"])
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestNoOverwriteNonVersionEnvVars(t *testing.T) {
 | |
| 	app, err := appPkg.GetApp(testPkg.ExpectedAppFiles, testPkg.AppName)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	if err := app.WriteRecipeVersion("1.3.12", true); err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	app, err = appPkg.GetApp(testPkg.ExpectedAppFiles, testPkg.AppName)
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	assert.NotEqual(t, app.Env["SMTP_AUTHTYPE"], "login:1.3.12")
 | |
| }
 |