mirror of
https://github.com/juanfont/headscale.git
synced 2025-07-12 02:21:06 -04:00
65 lines
2.2 KiB
Go
65 lines
2.2 KiB
Go
package dockertestutil
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/juanfont/headscale/hscontrol/util"
|
|
"github.com/ory/dockertest/v3"
|
|
)
|
|
|
|
// GetIntegrationRunID returns the run ID for the current integration test session.
|
|
// This is set by the hi tool and passed through environment variables.
|
|
func GetIntegrationRunID() string {
|
|
return os.Getenv("HEADSCALE_INTEGRATION_RUN_ID")
|
|
}
|
|
|
|
// DockerAddIntegrationLabels adds integration test labels to Docker RunOptions.
|
|
// This allows the hi tool to identify containers belonging to specific test runs.
|
|
// This function should be called before passing RunOptions to dockertest functions.
|
|
func DockerAddIntegrationLabels(opts *dockertest.RunOptions, testType string) {
|
|
runID := GetIntegrationRunID()
|
|
if runID == "" {
|
|
panic("HEADSCALE_INTEGRATION_RUN_ID environment variable is required")
|
|
}
|
|
|
|
if opts.Labels == nil {
|
|
opts.Labels = make(map[string]string)
|
|
}
|
|
opts.Labels["hi.run-id"] = runID
|
|
opts.Labels["hi.test-type"] = testType
|
|
}
|
|
|
|
// GenerateRunID creates a unique run identifier with timestamp and random hash.
|
|
// Format: YYYYMMDD-HHMMSS-HASH (e.g., 20250619-143052-a1b2c3)
|
|
func GenerateRunID() string {
|
|
now := time.Now()
|
|
timestamp := now.Format("20060102-150405")
|
|
|
|
// Add a short random hash to ensure uniqueness
|
|
randomHash := util.MustGenerateRandomStringDNSSafe(6)
|
|
return fmt.Sprintf("%s-%s", timestamp, randomHash)
|
|
}
|
|
|
|
// ExtractRunIDFromContainerName extracts the run ID from container name.
|
|
// Expects format: "prefix-YYYYMMDD-HHMMSS-HASH"
|
|
func ExtractRunIDFromContainerName(containerName string) string {
|
|
parts := strings.Split(containerName, "-")
|
|
if len(parts) >= 3 {
|
|
// Return the last three parts as the run ID (YYYYMMDD-HHMMSS-HASH)
|
|
return strings.Join(parts[len(parts)-3:], "-")
|
|
}
|
|
|
|
panic(fmt.Sprintf("unexpected container name format: %s", containerName))
|
|
}
|
|
|
|
// IsRunningInContainer checks if the current process is running inside a Docker container.
|
|
// This is used by tests to determine if they should run integration tests.
|
|
func IsRunningInContainer() bool {
|
|
// Check for the common indicator that we're in a container
|
|
// This could be improved with more robust detection if needed
|
|
_, err := os.Stat("/.dockerenv")
|
|
return err == nil
|
|
} |