mirror of
https://github.com/moby/buildkit.git
synced 2026-08-05 07:10:23 +00:00
This reverts the change from #7012. Referrer manifests may be pushed before their subject, and the OCI distribution spec requires registries to initially accept a manifest whose subject does not exist yet. Keep BuildKit's default push order aligned with that behavior instead of working around registries that reject this flow. Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
379 lines
10 KiB
Go
379 lines
10 KiB
Go
package client
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/moby/buildkit/util/testutil/integration"
|
|
"github.com/moby/buildkit/util/testutil/workers"
|
|
)
|
|
|
|
func init() {
|
|
if workers.IsTestDockerd() {
|
|
workers.InitDockerdWorker()
|
|
} else {
|
|
workers.InitOCIWorker()
|
|
workers.InitContainerdWorker()
|
|
}
|
|
}
|
|
|
|
var allTests = []func(t *testing.T, sb integration.Sandbox){
|
|
// client_cache_test.go
|
|
testBasicAzblobCacheImportExport,
|
|
testBasicInlineCacheImportExport,
|
|
testBasicLocalCacheImportExport,
|
|
testBasicRegistryCacheImportExport,
|
|
testBasicS3CacheImportExport,
|
|
testCacheExportCacheDeletedContent,
|
|
testCacheExportCacheKeyLoop,
|
|
testCacheExportIgnoreError,
|
|
testImageManifestRegistryCacheImportExport,
|
|
testLocalCacheExportReset,
|
|
testMultipleCacheExports,
|
|
testMultipleRecordsWithSameLayersCacheImportExport,
|
|
testMultipleRegistryCacheImportExport,
|
|
testRegistryEmptyCacheExport,
|
|
testSnapshotWithMultipleBlobs,
|
|
testUncompressedLocalCacheImportExport,
|
|
testUncompressedRegistryCacheImportExport,
|
|
testZstdLocalCacheExport,
|
|
testZstdLocalCacheImportExport,
|
|
testZstdRegistryCacheImportExport,
|
|
testStargzLazyInlineCacheImportExport,
|
|
testStargzLazyRegistryCacheImportExport,
|
|
|
|
// client_control_test.go
|
|
testCallInfo,
|
|
testClientCustomGRPCOpts,
|
|
testListenBuildHistoryExcludesSoftDeletedRecords,
|
|
|
|
// client_diskusage_test.go
|
|
testCallDiskUsage,
|
|
|
|
// client_exec_test.go
|
|
testCgroupParent,
|
|
testLinuxResources,
|
|
testPassthroughOp,
|
|
testRelativeMountpoint,
|
|
testRelativeWorkDir,
|
|
testRunValidExitCodes,
|
|
testShmSize,
|
|
testStdinClosed,
|
|
testUlimit,
|
|
testUser,
|
|
|
|
// client_export_image_test.go
|
|
testBuildExportScratch,
|
|
testBuildExportWithForeignLayer,
|
|
testBuildExportWithUncompressed,
|
|
testBuildExportZstd,
|
|
testBuildPushAndValidate,
|
|
testExportBusyboxLocal,
|
|
testExportedImageLabels,
|
|
testImageResolveConfigDefaultLocalFallback,
|
|
testInvalidExporter,
|
|
testLazyImagePush,
|
|
testOCIExporter,
|
|
testOCIExporterContentStore,
|
|
testPullWithDigestCheck,
|
|
testPullZstdImage,
|
|
testPushByDigest,
|
|
testPushProgressSameVertex,
|
|
testStargzLazyPull,
|
|
|
|
// client_export_local_test.go
|
|
testExportLocalForcePlatformSplit,
|
|
testExportLocalModeCopyKeepsStaleDestinationFiles,
|
|
testExportLocalModeCopyMultiPlatformKeepsAllPlatforms,
|
|
testExportLocalModeDeleteRemovesStaleDestinationFiles,
|
|
testExportLocalModeDeleteMultiPlatformKeepsAllPlatforms,
|
|
testExportLocalNoPlatformSplit,
|
|
testExportLocalNoPlatformSplitOverwrite,
|
|
testExporterTargetExists,
|
|
testMultipleExporters,
|
|
testSessionExporter,
|
|
testSessionExporterFinalizeExport,
|
|
testTarExporterSymlink,
|
|
testTarExporterWithSocket,
|
|
testTarExporterWithSocketCopy,
|
|
|
|
// client_export_metadata_test.go
|
|
testAttestationBundle,
|
|
testAttestationDefaultSubject,
|
|
testExportAnnotations,
|
|
testExportAnnotationsMediaTypes,
|
|
testExportAttestationsDefaultOCIArtifact,
|
|
testExportAttestationsImageManifest,
|
|
testExportAttestationsOCIArtifact,
|
|
testImageResolveAttestationChainLocal,
|
|
testImageResolveAttestationChainRequiresNetwork,
|
|
testImageResolveProvenanceAttestation,
|
|
testSBOMScan,
|
|
testSBOMScanSingleRef,
|
|
testSBOMSupplements,
|
|
testSourceDateEpochClamp,
|
|
testSourceDateEpochImageExporter,
|
|
testSourceDateEpochLayerTimestamps,
|
|
testSourceDateEpochLocalExporter,
|
|
testSourceDateEpochReset,
|
|
testSourceDateEpochTarExporter,
|
|
|
|
// client_fileop_test.go
|
|
testCopyFromEmptyImage,
|
|
testDuplicateWhiteouts,
|
|
testFileOpCopyAlwaysReplaceExistingDestPaths,
|
|
testFileOpCopyChmodText,
|
|
testFileOpCopyIncludeExclude,
|
|
testFileOpCopyRm,
|
|
testFileOpCopyUIDCache,
|
|
testFileOpInputSwap,
|
|
testFileOpMkdirMkfile,
|
|
testFileOpRmWildcard,
|
|
testFileOpSymlink,
|
|
testMoveParentDir,
|
|
testRmSymlink,
|
|
testWhiteoutParentDir,
|
|
|
|
// client_frontend_test.go
|
|
testFrontendImageNaming,
|
|
testFrontendLintSkipVerifyPlatforms,
|
|
testFrontendMetadataReturn,
|
|
testFrontendUseSolveResults,
|
|
testFrontendVerifyPlatforms,
|
|
|
|
// client_git_source_test.go
|
|
testGitBundleRoundTrip,
|
|
testGitBundleRoundTripRegistry,
|
|
testGitResolveMutatedSource,
|
|
testGitResolveSourceMetadata,
|
|
|
|
// client_http_source_test.go
|
|
testBuildHTTPSource,
|
|
testBuildHTTPSourceAuthHeaderSecret,
|
|
testBuildHTTPSourceEtagScope,
|
|
testBuildHTTPSourceHeader,
|
|
testBuildHTTPSourceHostTokenSecret,
|
|
testBuildHTTPSourcePGPSignatureVerify,
|
|
testBuildHTTPSourceUnauthorizedChecksumRace,
|
|
testHTTPPruneAfterCacheKey,
|
|
testHTTPPruneAfterResolveMeta,
|
|
testHTTPResolveMetaReuse,
|
|
testHTTPResolveMultiBuild,
|
|
testHTTPResolveSourceMetadata,
|
|
|
|
// client_image_source_test.go
|
|
testClientGatewayCanceledCredentialsCallbackReturns,
|
|
testPullWithLayerLimit,
|
|
testValidateDigestOrigin,
|
|
|
|
// client_local_source_test.go
|
|
testLocalSourceDiffer,
|
|
testLocalSourceWithHardlinksFilter,
|
|
testLocalSymlinkEscape,
|
|
testMetadataOnlyLocal,
|
|
testParallelLocalBuilds,
|
|
|
|
// client_mergeop_test.go
|
|
testMergeOp,
|
|
testMergeOpCacheInline,
|
|
testMergeOpCacheMax,
|
|
testMergeOpCacheMin,
|
|
|
|
// client_mount_test.go
|
|
testBuildMultiMount,
|
|
testCachedMounts,
|
|
testCacheMountNoCache,
|
|
testDuplicateCacheMount,
|
|
testLayerLimitOnMounts,
|
|
testLLBMountPerformance,
|
|
testLockedCacheMounts,
|
|
testMountStubsDirectory,
|
|
testMountStubsTimestamp,
|
|
testMountWithNoSource,
|
|
testRawSocketMount,
|
|
testReadonlyRootFS,
|
|
testRunCacheWithMounts,
|
|
testSecretEnv,
|
|
testSecretMounts,
|
|
testSharedCacheMounts,
|
|
testSharedCacheMountsNoScratch,
|
|
testSSHMount,
|
|
testTmpfsMounts,
|
|
|
|
// client_network_test.go
|
|
testBridgeNetworking,
|
|
testExtraHosts,
|
|
testHostnameLookup,
|
|
testHostnameSpecifying,
|
|
testNetworkMode,
|
|
testProxyEnv,
|
|
testResolveAndHosts,
|
|
|
|
// client_oci_source_test.go
|
|
testImageBlobSource,
|
|
testNoTarOCIIndexMediaType,
|
|
testOCIIndexMediatype,
|
|
testOCILayoutBlobSource,
|
|
testOCILayoutPlatformSource,
|
|
testOCILayoutSource,
|
|
|
|
// client_session_test.go
|
|
testSessionHealthMonitorFailsBlockedSecretResponse,
|
|
|
|
// client_source_map_test.go
|
|
testSourceMap,
|
|
testSourceMapFromRef,
|
|
|
|
// client_warnings_test.go
|
|
testWarnings,
|
|
|
|
// policy_test.go
|
|
testSourcePolicySession,
|
|
testSourcePolicySessionDenyMessages,
|
|
testSourceMetaPolicySession,
|
|
testSourceMetaPolicySessionResolveAttestations,
|
|
testSourcePolicyParallelSession,
|
|
testSourcePolicySignedCommit,
|
|
testSourcePolicySessionConvert,
|
|
testSourcePolicySessionHTTPChecksumAssist,
|
|
testSourcePolicy,
|
|
}
|
|
|
|
func TestIntegration(t *testing.T) {
|
|
testIntegration(t, append(allTests, validationTests...)...)
|
|
}
|
|
|
|
func TestClientGatewayIntegration(t *testing.T) {
|
|
integration.Run(t, integration.TestFuncs(
|
|
// gateway_container_exec_test.go
|
|
testClientGatewayContainerCancelExecTty,
|
|
testClientGatewayContainerCancelOnRelease,
|
|
testClientGatewayContainerCancelPID1Tty,
|
|
testClientGatewayContainerExecPipe,
|
|
testClientGatewayContainerExecPipeRelease,
|
|
testClientGatewayContainerExecPipeSignalKill,
|
|
testClientGatewayContainerExecTty,
|
|
testClientGatewayContainerPID1Exit,
|
|
testClientGatewayContainerPID1Fail,
|
|
testClientGatewayContainerPID1Tty,
|
|
testClientGatewayContainerSignal,
|
|
testClientGatewayExecError,
|
|
testClientGatewayExecFileActionError,
|
|
testClientGatewaySlowCacheExecError,
|
|
|
|
// gateway_container_mount_test.go
|
|
testClientGatewayContainerMounts,
|
|
testClientGatewayContainerPlatformPATH,
|
|
testClientGatewayContainerSecretEnv,
|
|
|
|
// gateway_container_network_test.go
|
|
testClientGatewayContainerExtraHosts,
|
|
|
|
// gateway_container_security_test.go
|
|
testClientGatewayContainerInvalidSecurityMode,
|
|
|
|
// gateway_solve_test.go
|
|
testClientGatewayEmptyImageExec,
|
|
testClientGatewayEmptySolve,
|
|
testClientGatewayFailedSolve,
|
|
testClientGatewayNilResult,
|
|
testClientGatewaySolve,
|
|
testClientSlowCacheRootfsRef,
|
|
testNoBuildID,
|
|
testUnknownBuildID,
|
|
), integration.WithMirroredImages(integration.OfficialImages("busybox:latest")))
|
|
|
|
integration.Run(t, integration.TestFuncs(
|
|
// gateway_container_security_test.go
|
|
testClientGatewayContainerSecurityModeCaps,
|
|
testClientGatewayContainerSecurityModeValidation,
|
|
), integration.WithMirroredImages(integration.OfficialImages("busybox:latest")),
|
|
integration.WithMatrix("secmode", map[string]any{
|
|
"sandbox": securitySandbox,
|
|
"insecure": securityInsecure,
|
|
}),
|
|
)
|
|
|
|
integration.Run(t, integration.TestFuncs(
|
|
// gateway_container_network_test.go
|
|
testClientGatewayContainerHostNetworkingAccess,
|
|
testClientGatewayContainerHostNetworkingValidation,
|
|
),
|
|
integration.WithMirroredImages(integration.OfficialImages("busybox:latest")),
|
|
integration.WithMatrix("netmode", map[string]any{
|
|
"default": defaultNetwork,
|
|
"host": hostNetwork,
|
|
}),
|
|
)
|
|
}
|
|
|
|
func testIntegration(t *testing.T, funcs ...func(t *testing.T, sb integration.Sandbox)) {
|
|
mirroredImagesUnix := integration.OfficialImages("busybox:latest", "alpine:latest")
|
|
mirroredImagesUnix["tonistiigi/test:nolayers"] = "docker.io/tonistiigi/test:nolayers"
|
|
mirroredImagesUnix["cpuguy83/buildkit-foreign:latest"] = "docker.io/cpuguy83/buildkit-foreign:latest"
|
|
mirroredImagesWin := integration.OfficialImages("nanoserver:latest", "nanoserver:plus")
|
|
|
|
mirroredImages := integration.UnixOrWindows(mirroredImagesUnix, mirroredImagesWin)
|
|
mirrors := integration.WithMirroredImages(mirroredImages)
|
|
|
|
tests := integration.TestFuncs(funcs...)
|
|
tests = append(tests, diffOpTestCases()...)
|
|
integration.Run(t, tests, mirrors)
|
|
|
|
// the rest of the tests are meant for non-Windows, skipping on Windows.
|
|
integration.SkipOnPlatform(t, "windows")
|
|
|
|
integration.Run(t, integration.TestFuncs(
|
|
// client_exec_test.go
|
|
testSecurityMode,
|
|
testSecurityModeSysfs,
|
|
testSecurityModeErrors,
|
|
),
|
|
mirrors,
|
|
integration.WithMatrix("secmode", map[string]any{
|
|
"sandbox": securitySandbox,
|
|
"insecure": securityInsecure,
|
|
}),
|
|
)
|
|
|
|
integration.Run(t, integration.TestFuncs(
|
|
// client_network_test.go
|
|
testHostNetworking,
|
|
),
|
|
mirrors,
|
|
integration.WithMatrix("netmode", map[string]any{
|
|
"default": defaultNetwork,
|
|
"host": hostNetwork,
|
|
}),
|
|
)
|
|
|
|
integration.Run(t, integration.TestFuncs(
|
|
// policy_test.go
|
|
testProxyNetworkNoRootless,
|
|
testProxyNetworkModesNoRootless,
|
|
testProxyNetworkDefaultEgressNoRootless,
|
|
),
|
|
mirrors,
|
|
integration.WithMatrix("netmode", map[string]any{
|
|
"default": proxyDefaultNetwork,
|
|
"host": proxyHostNetwork,
|
|
"bridge": proxyBridgeNetwork,
|
|
"default-no-cni": proxyDefaultNetworkNoCNI,
|
|
}),
|
|
)
|
|
|
|
integration.Run(
|
|
t,
|
|
integration.TestFuncs(
|
|
// client_network_test.go
|
|
testBridgeNetworkingDNSNoRootless,
|
|
),
|
|
mirrors,
|
|
integration.WithMatrix("netmode", map[string]any{
|
|
"dns": bridgeDNSNetwork,
|
|
}),
|
|
)
|
|
|
|
// client_cdi_test.go
|
|
integration.Run(t, integration.TestFuncs(cdiTests...), mirrors)
|
|
}
|