Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion e2e/e2e_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,14 @@ func TestRunE2ETests(t *testing.T) {
if runtime.GOOS != "linux" {
go framework.ServeAgent()

// wait for http server to be up and running
// wait for http server to be up and running (max 30s)
deadline := time.After(30 * time.Second)
for {
select {
case <-deadline:
t.Fatal("timeout waiting for DEVPOD_AGENT_URL to be set after 30s")
default:
}
time.Sleep(time.Second)
if os.Getenv("DEVPOD_AGENT_URL") != "" {
break
Expand Down
60 changes: 38 additions & 22 deletions e2e/framework/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -286,22 +286,22 @@ func (f *Framework) DevPodProviderUpdate(ctx context.Context, args ...string) er
return nil
}

func (f *Framework) DevPodMachineCreate(args []string) error {
func (f *Framework) DevPodMachineCreate(ctx context.Context, args []string) error {
baseArgs := []string{"machine", "create"}
baseArgs = append(baseArgs, args...)
err := f.ExecCommand(context.Background(), false, false, "", baseArgs)
err := f.ExecCommand(ctx, false, false, "", baseArgs)
if err != nil {
return fmt.Errorf("devpod nachine create failed: %s", err.Error())
return fmt.Errorf("devpod machine create failed: %s", err.Error())
}
return nil
}

func (f *Framework) DevPodMachineDelete(args []string) error {
func (f *Framework) DevPodMachineDelete(ctx context.Context, args []string) error {
baseArgs := []string{"machine", "delete"}
baseArgs = append(baseArgs, args...)
err := f.ExecCommand(context.Background(), false, false, "", baseArgs)
err := f.ExecCommand(ctx, false, false, "", baseArgs)
if err != nil {
return fmt.Errorf("devpod nachine delete failed: %s", err.Error())
return fmt.Errorf("devpod machine delete failed: %s", err.Error())
}
return nil
}
Expand All @@ -325,31 +325,31 @@ func (f *Framework) DevPodWorkspaceDelete(

func (f *Framework) SetupGPG(tmpDir string) error {
if _, err := exec.LookPath("gpg"); err != nil {
err := exec.Command("sudo", "apt-get", " install", "gnupg2", "-y").Run()
if err != nil {
return nil
if installErr := exec.Command("sudo", "apt-get", "install", "gnupg2", "-y").
Run(); installErr != nil {
return fmt.Errorf("gpg not found and failed to install gnupg2: %w", installErr)
}
}

err := exec.Command("gpg", "--import", filepath.Join(tmpDir, "gpg-public.key")).Run()
if err != nil {
return nil
// #nosec G204 -- gpg with fixed arguments for test GPG key setup
if err := exec.Command("gpg", "--import", filepath.Join(tmpDir, "gpg-public.key")).
Run(); err != nil {
return fmt.Errorf("failed to import gpg public key: %w", err)
}

err = exec.Command("gpg", "--import", filepath.Join(tmpDir, "gpg-private.key")).Run()
if err != nil {
return nil
// #nosec G204 -- gpg with fixed arguments for test GPG key setup
if err := exec.Command("gpg", "--import", filepath.Join(tmpDir, "gpg-private.key")).
Run(); err != nil {
return fmt.Errorf("failed to import gpg private key: %w", err)
}

err = exec.Command("gpgconf", "--kill", "gpg-agent").Run()
if err != nil {
return nil
if err := exec.Command("gpgconf", "--kill", "gpg-agent").Run(); err != nil {
return fmt.Errorf("failed to kill gpg-agent: %w", err)
}

err = exec.Command("gpg-agent", "--homedir", "$HOME/.gnupg", "--use-standard-socket", "--daemon").
Run()
if err != nil {
return nil
if err := exec.Command("gpg-agent", "--homedir", "$HOME/.gnupg", "--use-standard-socket", "--daemon").
Run(); err != nil {
return fmt.Errorf("failed to start gpg-agent: %w", err)
}

return exec.Command("gpg", "-k").Run()
Expand Down Expand Up @@ -456,3 +456,19 @@ func (f *Framework) DevPodIDEList(ctx context.Context, extraArgs ...string) (str
baseArgs := []string{"ide", "list"}
return f.ExecCommandOutput(ctx, append(baseArgs, extraArgs...))
}

// SetupDockerProvider creates a new framework, removes any existing docker provider,
// adds a fresh one with the given docker path, and sets it as the active provider.
func SetupDockerProvider(binDir, dockerPath string) (*Framework, error) {
f := NewDefaultFramework(binDir)
_ = f.DevPodProviderDelete(context.Background(), "docker")
if err := f.DevPodProviderAdd(
context.Background(),
"docker",
"-o",
"DOCKER_PATH="+dockerPath,
); err != nil {
return nil, fmt.Errorf("failed to add docker provider: %w", err)
}
return f, f.DevPodProviderUse(context.Background(), "docker")
}
9 changes: 5 additions & 4 deletions e2e/framework/server_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ func ServeAgent() {
// Create a file server handler for the specified directory
fileServer := http.FileServer(http.Dir(dir))

// Register the file server handler to serve files under the /files route
http.Handle("/files/", http.StripPrefix("/files", fileServer))
// Use a dedicated ServeMux to avoid conflicts with http.DefaultServeMux
mux := http.NewServeMux()
mux.Handle("/files/", http.StripPrefix("/files", fileServer))

ip := getIP()

Expand All @@ -40,10 +41,10 @@ func ServeAgent() {
log.Fatal(err)
}

// Start the HTTP server on port 8080
log.Printf("Server started on %s", addr)

err = http.Serve(listener, nil)
// #nosec G114 -- test-only agent file server, no timeout needed
err = http.Serve(listener, mux)
if err != nil {
log.Fatal(err)
}
Expand Down
Loading