mirror of
https://github.com/actions/actions-runner-controller.git
synced 2025-12-10 11:41:27 +00:00
Previously the E2E test suite covered only RunnerSet. This refactors the existing E2E test code to extract the common test structure into a `env` struct and its methods, and use it to write two very similar tests, one for RunnerSet and another for RunnerDeployment.
96 lines
2.2 KiB
Go
96 lines
2.2 KiB
Go
package testing
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
|
|
"github.com/actions-runner-controller/actions-runner-controller/testing/runtime"
|
|
)
|
|
|
|
type GitRepo struct {
|
|
Dir string
|
|
Name string
|
|
CommitMessage string
|
|
Contents map[string][]byte
|
|
|
|
runtime.Cmdr
|
|
}
|
|
|
|
func (g *GitRepo) Sync(ctx context.Context) error {
|
|
repoName := g.Name
|
|
if repoName == "" {
|
|
return errors.New("missing git repo name")
|
|
}
|
|
|
|
repoURL := fmt.Sprintf("git@github.com:%s.git", repoName)
|
|
|
|
if g.Dir == "" {
|
|
return errors.New("missing git dir")
|
|
}
|
|
|
|
dir, err := filepath.Abs(g.Dir)
|
|
if err != nil {
|
|
return fmt.Errorf("error getting abs path for %q: %w", g.Dir, err)
|
|
}
|
|
|
|
if _, err := g.CombinedOutput(g.gitCloneCmd(ctx, repoURL, dir)); err != nil {
|
|
return err
|
|
}
|
|
|
|
for path, content := range g.Contents {
|
|
absPath := filepath.Join(dir, path)
|
|
|
|
if err := os.WriteFile(absPath, content, 0755); err != nil {
|
|
return fmt.Errorf("error writing %s: %w", path, err)
|
|
}
|
|
|
|
if _, err := g.CombinedOutput(g.gitAddCmd(ctx, dir, path)); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if _, err := g.CombinedOutput(g.gitDiffCmd(ctx, dir)); err != nil {
|
|
if _, err := g.CombinedOutput(g.gitCommitCmd(ctx, dir, g.CommitMessage)); err != nil {
|
|
return err
|
|
}
|
|
|
|
if _, err := g.CombinedOutput(g.gitPushCmd(ctx, dir)); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (g *GitRepo) gitCloneCmd(ctx context.Context, repo, dir string) *exec.Cmd {
|
|
return exec.CommandContext(ctx, "git", "clone", repo, dir)
|
|
}
|
|
|
|
func (g *GitRepo) gitDiffCmd(ctx context.Context, dir string) *exec.Cmd {
|
|
cmd := exec.CommandContext(ctx, "git", "diff", "--exit-code", "--cached")
|
|
cmd.Dir = dir
|
|
return cmd
|
|
}
|
|
|
|
func (g *GitRepo) gitAddCmd(ctx context.Context, dir, path string) *exec.Cmd {
|
|
cmd := exec.CommandContext(ctx, "git", "add", path)
|
|
cmd.Dir = dir
|
|
return cmd
|
|
}
|
|
|
|
func (g *GitRepo) gitCommitCmd(ctx context.Context, dir, msg string) *exec.Cmd {
|
|
cmd := exec.CommandContext(ctx, "git", "commit", "-m", msg)
|
|
cmd.Dir = dir
|
|
return cmd
|
|
}
|
|
|
|
func (g *GitRepo) gitPushCmd(ctx context.Context, dir string) *exec.Cmd {
|
|
cmd := exec.CommandContext(ctx, "git", "push", "origin", "main")
|
|
cmd.Dir = dir
|
|
return cmd
|
|
}
|