Some checks failed
CI Workflow / Check GoReleaser config (pull_request) Successful in 14s
CI Workflow / CI (pull_request) Failing after 12m47s
CI Workflow / Code coverage report (pull_request) Has been skipped
CI Workflow / Test readiness for publishing provider (pull_request) Successful in 30m54s
125 lines
3 KiB
Go
125 lines
3 KiB
Go
package testutils
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"path"
|
|
"path/filepath"
|
|
"runtime"
|
|
"strings"
|
|
"testing"
|
|
"text/template"
|
|
)
|
|
|
|
// GetHomeEnvVariableName Helper function to obtain the home directory on different systems.
|
|
// Based on os.UserHomeDir().
|
|
func GetHomeEnvVariableName() string {
|
|
env := "HOME"
|
|
switch runtime.GOOS {
|
|
case "windows":
|
|
env = "USERPROFILE"
|
|
case "plan9":
|
|
env = "home"
|
|
}
|
|
return env
|
|
}
|
|
|
|
// CreateTemporaryHome create temporary home and initialize the credentials file as well
|
|
func CreateTemporaryHome(createValidCredentialsFile bool, t *testing.T) string {
|
|
// create a temporary file
|
|
tempHome, err := os.MkdirTemp("", "tempHome")
|
|
if err != nil {
|
|
t.Fatalf("Failed to create temporary home directory: %v", err)
|
|
}
|
|
|
|
// create credentials file in temp directory
|
|
stackitFolder := path.Join(tempHome, ".stackit")
|
|
if err := os.Mkdir(stackitFolder, 0o750); err != nil {
|
|
t.Fatalf("Failed to create stackit folder: %v", err)
|
|
}
|
|
|
|
filePath := path.Join(stackitFolder, "credentials.json")
|
|
file, err := os.Create(filePath)
|
|
if err != nil {
|
|
t.Fatalf("Failed to create credentials file: %v", err)
|
|
}
|
|
defer func() {
|
|
if err := file.Close(); err != nil {
|
|
t.Fatalf("Error while closing the file: %v", err)
|
|
}
|
|
}()
|
|
|
|
// Define content, default = invalid token
|
|
token := "foo_token"
|
|
if createValidCredentialsFile {
|
|
token = GetTestProjectServiceAccountJson("")
|
|
}
|
|
if _, err = file.WriteString(token); err != nil {
|
|
t.Fatalf("Error writing to file: %v", err)
|
|
}
|
|
|
|
return tempHome
|
|
}
|
|
|
|
// SetTemporaryHome Function to overwrite the home folder
|
|
func SetTemporaryHome(tempHomePath string) {
|
|
env := GetHomeEnvVariableName()
|
|
if err := os.Setenv(env, tempHomePath); err != nil {
|
|
fmt.Printf("Error setting temporary home directory %v", err)
|
|
}
|
|
}
|
|
|
|
// CleanupTemporaryHome cleanup the temporary home and reset the environment variable
|
|
func CleanupTemporaryHome(tempHomePath string, t *testing.T) {
|
|
if err := os.RemoveAll(tempHomePath); err != nil {
|
|
t.Fatalf("Error cleaning up temporary folder: %v", err)
|
|
}
|
|
originalHomeDir, err := os.UserHomeDir()
|
|
if err != nil {
|
|
t.Fatalf("Failed to restore home directory back to normal: %v", err)
|
|
}
|
|
// revert back to original home folder
|
|
env := GetHomeEnvVariableName()
|
|
if err := os.Setenv(env, originalHomeDir); err != nil {
|
|
fmt.Printf("Error resetting temporary home directory %v", err)
|
|
}
|
|
}
|
|
|
|
func ucFirst(s string) string {
|
|
if len(s) == 0 {
|
|
return ""
|
|
}
|
|
return strings.ToUpper(s[:1]) + s[1:]
|
|
}
|
|
|
|
func StringFromTemplateMust(tplFile string, data any) string {
|
|
res, err := StringFromTemplate(tplFile, data)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
return res
|
|
}
|
|
|
|
func StringFromTemplate(tplFile string, data any) (string, error) {
|
|
fn := template.FuncMap{
|
|
"ucfirst": ucFirst,
|
|
}
|
|
|
|
file := filepath.Base(tplFile)
|
|
|
|
tmpl, err := template.New(file).Funcs(fn).ParseFiles(tplFile)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
tplBuf := &bytes.Buffer{}
|
|
|
|
err = tmpl.Execute(tplBuf, data)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return tplBuf.String(), nil
|
|
}
|