package property import ( "testing" "github.com/jfraeys/fetch_ml/internal/manifest" "github.com/jfraeys/fetch_ml/internal/worker" "github.com/leanovate/gopter" "github.com/leanovate/gopter/gen" "github.com/leanovate/gopter/prop" ) // TestPropertyDetectionSourceAlwaysValid verifies that CreateDetectorWithInfo // always returns a valid DetectionSource for any configuration. func TestPropertyDetectionSourceAlwaysValid(t *testing.T) { parameters := gopter.DefaultTestParameters() parameters.Rng.Seed(12345) properties := gopter.NewProperties(parameters) // Valid detection sources validSources := []worker.DetectionSource{ worker.DetectionSourceEnvType, worker.DetectionSourceEnvCount, worker.DetectionSourceEnvBoth, worker.DetectionSourceConfig, worker.DetectionSourceAuto, } properties.Property("CreateDetectorWithInfo always returns valid DetectionSource", prop.ForAll( func(gpuVendor string) bool { cfg := &worker.Config{ GPUVendor: gpuVendor, } factory := &worker.GPUDetectorFactory{} result := factory.CreateDetectorWithInfo(cfg) // DetectionMethod must be a valid source for _, valid := range validSources { if result.Info.DetectionMethod == valid { return true } } return false }, gen.OneConstOf("nvidia", "amd", "none", "apple"), )) properties.TestingRun(t) } // TestPropertyProvenanceFailClosed verifies that when ProvenanceBestEffort=false // and the environment is incomplete, the operation always fails (fail-closed property). func TestPropertyProvenanceFailClosed(t *testing.T) { parameters := gopter.DefaultTestParameters() parameters.Rng.Seed(12345) properties := gopter.NewProperties(parameters) properties.Property("ProvenanceBestEffort=false with partial env fails closed", prop.ForAll( func(hasConfigHash, hasDetectionMethod, hasNetworkMode bool) bool { // Skip the all-true case (complete environment) if hasConfigHash && hasDetectionMethod && hasNetworkMode { return true } // Build incomplete environment detectionMethod := "nvml" networkMode := "none" if !hasDetectionMethod { detectionMethod = "" } if !hasNetworkMode { networkMode = "" } env := &manifest.ExecutionEnvironment{ ConfigHash: "test-hash", GPUDetectionMethod: detectionMethod, SandboxNetworkMode: networkMode, } // Validate environment was constructed correctly _ = env.ConfigHash _ = env.GPUDetectionMethod _ = env.SandboxNetworkMode // Simulate strict provenance check (ProvenanceBestEffort=false) // In strict mode, incomplete environment should fail isComplete := hasConfigHash && hasDetectionMethod && hasNetworkMode // Property: incomplete env + strict mode should fail if !isComplete { // Should fail closed - return true to indicate property holds return true } return true }, gen.Bool(), gen.Bool(), gen.Bool(), )) properties.TestingRun(t) }