Ctrl K
ComunidadGuías…

codersdk/workspaceagents_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package codersdk_test

import (
	"testing"
	"time"

	"github.com/google/uuid"
	"github.com/stretchr/testify/require"

	"github.com/coder/coder/v2/codersdk"
)

func TestProvisionerJobLogText(t *testing.T) {
	t.Parallel()

	ts := time.Date(2024, 1, 28, 10, 30, 0, 0, time.UTC)
	log := codersdk.ProvisionerJobLog{
		CreatedAt: ts,
		Level:     codersdk.LogLevelInfo,
		Source:    codersdk.LogSourceProvisioner,
		Stage:     "Planning",
		Output:    "Terraform init complete",
	}
	result := log.Text()
	require.Equal(t, "2024-01-28T10:30:00Z [info] [provisioner|Planning] Terraform init complete", result)
}

func TestProvisionerJobLogTextEmptyOutput(t *testing.T) {
	t.Parallel()

	ts := time.Date(2024, 1, 28, 10, 30, 0, 0, time.UTC)
	log := codersdk.ProvisionerJobLog{
		CreatedAt: ts,
		Level:     codersdk.LogLevelInfo,
		Source:    codersdk.LogSourceProvisioner,
		Stage:     "Planning",
		Output:    "",
	}
	result := log.Text()
	require.Equal(t, "2024-01-28T10:30:00Z [info] [provisioner|Planning] ", result)
}

func TestProvisionerJobLogTextSpecialChars(t *testing.T) {
	t.Parallel()

	ts := time.Date(2024, 1, 28, 10, 30, 0, 0, time.UTC)
	log := codersdk.ProvisionerJobLog{
		CreatedAt: ts,
		Level:     codersdk.LogLevelInfo,
		Source:    codersdk.LogSourceProvisioner,
		Stage:     "Applying",
		Output:    "\033[32mSuccess!\033[0m Unicode: 你好世界",
	}
	result := log.Text()
	require.Equal(t, "2024-01-28T10:30:00Z [info] [provisioner|Applying] \033[32mSuccess!\033[0m Unicode: 你好世界", result)
}

func TestWorkspaceAgentLogText(t *testing.T) {
	t.Parallel()

	ts := time.Date(2024, 1, 28, 10, 30, 0, 0, time.UTC)
	log := codersdk.WorkspaceAgentLog{
		CreatedAt: ts,
		Level:     codersdk.LogLevelInfo,
		Output:    "Agent started successfully",
		SourceID:  uuid.New(),
	}
	result := log.Text("main", "startup_script")
	require.Equal(t, "2024-01-28T10:30:00Z [info] [agent.main|startup_script] Agent started successfully", result)
}

func TestWorkspaceAgentLogTextEmptySourceAndAgent(t *testing.T) {
	t.Parallel()

	ts := time.Date(2024, 1, 28, 10, 30, 0, 0, time.UTC)
	log := codersdk.WorkspaceAgentLog{
		CreatedAt: ts,
		Level:     codersdk.LogLevelWarn,
		Output:    "Warning message",
		SourceID:  uuid.New(),
	}
	result := log.Text("", "")
	require.Equal(t, "2024-01-28T10:30:00Z [warn] [agent] Warning message", result)
}

func TestWorkspaceAgentLogTextMultiline(t *testing.T) {
	t.Parallel()

	ts := time.Date(2024, 1, 28, 10, 30, 0, 0, time.UTC)
	log := codersdk.WorkspaceAgentLog{
		CreatedAt: ts,
		Level:     codersdk.LogLevelInfo,
		Output:    "Line 1\nLine 2\nLine 3",
		SourceID:  uuid.New(),
	}
	result := log.Text("main", "startup_script")
	require.Equal(t, "2024-01-28T10:30:00Z [info] [agent.main|startup_script] Line 1\nLine 2\nLine 3", result)
}

func TestWorkspaceAgentLogTextSpecialChars(t *testing.T) {
	t.Parallel()

	ts := time.Date(2024, 1, 28, 10, 30, 0, 0, time.UTC)
	log := codersdk.WorkspaceAgentLog{
		CreatedAt: ts,
		Level:     codersdk.LogLevelDebug,
		Output:    "\033[31mError!\033[0m 🚀 Unicode: 日本語",
		SourceID:  uuid.New(),
	}
	result := log.Text("main", "startup_script")
	require.Equal(t, "2024-01-28T10:30:00Z [debug] [agent.main|startup_script] \033[31mError!\033[0m 🚀 Unicode: 日本語", result)
}

func TestWorkspaceAgentDevcontainerEquals(t *testing.T) {
	t.Parallel()

	agentID := uuid.New()

	base := codersdk.WorkspaceAgentDevcontainer{
		ID:              uuid.New(),
		Name:            "test-dc",
		WorkspaceFolder: "/workspace",
		Status:          codersdk.WorkspaceAgentDevcontainerStatusRunning,
		Dirty:           false,
		Container:       &codersdk.WorkspaceAgentContainer{ID: "container-123"},
		Agent:           &codersdk.WorkspaceAgentDevcontainerAgent{ID: agentID, Name: "agent-1"},
		Error:           "",
	}

	tests := []struct {
		name      string
		modify    func(*codersdk.WorkspaceAgentDevcontainer)
		wantEqual bool
	}{
		{
			name:      "identical",
			modify:    func(d *codersdk.WorkspaceAgentDevcontainer) {},
			wantEqual: true,
		},
		{
			name:      "different ID",
			modify:    func(d *codersdk.WorkspaceAgentDevcontainer) { d.ID = uuid.New() },
			wantEqual: false,
		},
		{
			name:      "different Name",
			modify:    func(d *codersdk.WorkspaceAgentDevcontainer) { d.Name = "other-dc" },
			wantEqual: false,
		},
		{
			name:      "different WorkspaceFolder",
			modify:    func(d *codersdk.WorkspaceAgentDevcontainer) { d.WorkspaceFolder = "/other" },
			wantEqual: false,
		},
		{
			name: "different SubagentID (one valid, one nil)",
			modify: func(d *codersdk.WorkspaceAgentDevcontainer) {
				d.SubagentID = uuid.NullUUID{Valid: true, UUID: uuid.New()}
			},
			wantEqual: false,
		},
		{
			name: "different SubagentID UUIDs",
			modify: func(d *codersdk.WorkspaceAgentDevcontainer) {
				d.SubagentID = uuid.NullUUID{Valid: true, UUID: uuid.New()}
			},
			wantEqual: false,
		},
		{
			name: "different Status",
			modify: func(d *codersdk.WorkspaceAgentDevcontainer) {
				d.Status = codersdk.WorkspaceAgentDevcontainerStatusStopped
			},
			wantEqual: false,
		},
		{
			name:      "different Dirty",
			modify:    func(d *codersdk.WorkspaceAgentDevcontainer) { d.Dirty = true },
			wantEqual: false,
		},
		{
			name:      "different Container (one nil)",
			modify:    func(d *codersdk.WorkspaceAgentDevcontainer) { d.Container = nil },
			wantEqual: false,
		},
		{
			name: "different Container IDs",
			modify: func(d *codersdk.WorkspaceAgentDevcontainer) {
				d.Container = &codersdk.WorkspaceAgentContainer{ID: "different-container"}
			},
			wantEqual: false,
		},
		{
			name:      "different Agent (one nil)",
			modify:    func(d *codersdk.WorkspaceAgentDevcontainer) { d.Agent = nil },
			wantEqual: false,
		},
		{
			name: "different Agent values",
			modify: func(d *codersdk.WorkspaceAgentDevcontainer) {
				d.Agent = &codersdk.WorkspaceAgentDevcontainerAgent{ID: agentID, Name: "agent-2"}
			},
			wantEqual: false,
		},
		{
			name:      "different Error",
			modify:    func(d *codersdk.WorkspaceAgentDevcontainer) { d.Error = "some error" },
			wantEqual: false,
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			t.Parallel()

			modified := base
			tt.modify(&modified)
			require.Equal(t, tt.wantEqual, base.Equals(modified))
		})
	}
}

func TestWorkspaceAgentDevcontainerIsTerraformDefined(t *testing.T) {
	t.Parallel()

	t.Run("SubagentID Valid", func(t *testing.T) {
		t.Parallel()

		dc := codersdk.WorkspaceAgentDevcontainer{
			ID:              uuid.New(),
			Name:            "test-dc",
			WorkspaceFolder: "/workspace",
			SubagentID:      uuid.NullUUID{Valid: true, UUID: uuid.New()},
		}

		require.True(t, dc.IsTerraformDefined())
	})

	t.Run("SubagentID Null", func(t *testing.T) {
		t.Parallel()

		dc := codersdk.WorkspaceAgentDevcontainer{
			ID:              uuid.New(),
			Name:            "test-dc",
			WorkspaceFolder: "/workspace",
			SubagentID:      uuid.NullUUID{Valid: false},
		}

		require.False(t, dc.IsTerraformDefined())
	})
}