1// +build functional
2
3package cri_containerd
4
5import (
6	"fmt"
7	"io/ioutil"
8	"os"
9	"os/exec"
10	"path/filepath"
11	"testing"
12)
13
14// Generates a gmsa credential spec and places it at 'path'. Dir has to exist, it will not be created by
15// New-CredentialSpec.
16func generateCredSpec(path string) error {
17	output, err := exec.Command(
18		"powershell",
19		"New-CredentialSpec",
20		"-AccountName",
21		gmsaAccount,
22		"-Path",
23		path,
24	).CombinedOutput()
25	if err != nil {
26		return fmt.Errorf("failed to create new credential spec (output: %s): %v", string(output), err)
27	}
28	return nil
29}
30
31// Tries to generate a cred spec to use for gmsa test cases. Returns the cred
32// spec and an error if any.
33func gmsaSetup(t *testing.T) string {
34	csDir, err := ioutil.TempDir("", "")
35	if err != nil {
36		t.Fatalf("failed to create temp directory: %s", err)
37	}
38	defer os.RemoveAll(csDir)
39	csPath := filepath.Join(csDir, "credspec.json")
40	if err := generateCredSpec(csPath); err != nil {
41		t.Fatal(err)
42	}
43	credSpec, err := ioutil.ReadFile(csPath)
44	if err != nil {
45		t.Fatalf("failed to read credential spec: %s", err)
46	}
47	return string(credSpec)
48}
49