59 lines
1.7 KiB
Go
59 lines
1.7 KiB
Go
package nsc
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"log/slog"
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestWindowsWinRMScriptRoundTrip(t *testing.T) {
|
|
if os.Getenv("NSC_WINDOWS_E2E") != "1" {
|
|
t.Skip("set NSC_WINDOWS_E2E=1 to run Namespace Windows integration test")
|
|
}
|
|
|
|
nscBinary, err := exec.LookPath("nsc")
|
|
if err != nil {
|
|
t.Skipf("nsc not found in PATH: %v", err)
|
|
}
|
|
|
|
authCheck := exec.Command(nscBinary, "auth", "check-login")
|
|
if out, err := authCheck.CombinedOutput(); err != nil {
|
|
t.Skipf("nsc auth check-login failed: %v (%s)", err, strings.TrimSpace(string(out)))
|
|
}
|
|
|
|
machineType := strings.TrimSpace(os.Getenv("NSC_WINDOWS_E2E_MACHINE_TYPE"))
|
|
if machineType == "" {
|
|
machineType = "windows/amd64:4x8"
|
|
}
|
|
|
|
dispatcher, err := NewDispatcher(Options{
|
|
BinaryPath: nscBinary,
|
|
DefaultImage: "code.forgejo.org/forgejo/runner:11",
|
|
DefaultMachine: machineType,
|
|
DefaultDuration: 20 * time.Minute,
|
|
MaxParallel: 1,
|
|
WorkDir: t.TempDir(),
|
|
ComputeBaseURL: strings.TrimSpace(os.Getenv("NSC_COMPUTE_BASE_URL")),
|
|
Logger: slog.New(slog.NewTextHandler(io.Discard, nil)),
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("NewDispatcher() error: %v", err)
|
|
}
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 20*time.Minute)
|
|
defer cancel()
|
|
|
|
script := "Write-Output ('winrm-ok:' + $env:COMPUTERNAME)"
|
|
labels := []string{"namespace-profile-windows-medium"}
|
|
if err := dispatcher.launchWindowsScriptViaWinRM(ctx, "nsc-winrm-itest", 20*time.Minute, machineType, labels, script); err != nil {
|
|
if strings.Contains(err.Error(), "does not expose winrm service (rdp-only)") {
|
|
t.Skipf("namespace windows control channel is rdp-only: %v", err)
|
|
}
|
|
t.Fatalf("launchWindowsScriptViaWinRM() error: %v", err)
|
|
}
|
|
}
|