mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01: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
 | 
						|
} |