Merge pull request #3417 from dmcgowan/testing-log-hook
Add unit test logging hook
This commit is contained in:
		
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @@ -111,7 +111,7 @@ GO_GCFLAGS=$(shell				\ | ||||
| BINARIES=$(addprefix bin/,$(COMMANDS)) | ||||
|  | ||||
| # Flags passed to `go test` | ||||
| TESTFLAGS ?= -v $(TESTFLAGS_RACE) | ||||
| TESTFLAGS ?= $(TESTFLAGS_RACE) | ||||
| TESTFLAGS_PARALLEL ?= 8 | ||||
|  | ||||
| .PHONY: clean all AUTHORS build binaries test integration generate protos checkprotos coverage ci check help install uninstall vendor release mandir install-man | ||||
|   | ||||
| @@ -31,7 +31,7 @@ func BenchmarkContainerCreate(b *testing.B) { | ||||
| 	} | ||||
| 	defer client.Close() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(b) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	image, err := client.GetImage(ctx, testImage) | ||||
| @@ -74,7 +74,7 @@ func BenchmarkContainerStart(b *testing.B) { | ||||
| 	} | ||||
| 	defer client.Close() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(b) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	image, err := client.GetImage(ctx, testImage) | ||||
|   | ||||
| @@ -31,6 +31,7 @@ import ( | ||||
| 	"github.com/containerd/containerd/defaults" | ||||
| 	"github.com/containerd/containerd/images" | ||||
| 	"github.com/containerd/containerd/log" | ||||
| 	"github.com/containerd/containerd/log/logtest" | ||||
| 	"github.com/containerd/containerd/namespaces" | ||||
| 	"github.com/containerd/containerd/pkg/testutil" | ||||
| 	"github.com/containerd/containerd/platforms" | ||||
| @@ -56,9 +57,12 @@ func init() { | ||||
| 	flag.Parse() | ||||
| } | ||||
|  | ||||
| func testContext() (context.Context, context.CancelFunc) { | ||||
| func testContext(t testing.TB) (context.Context, context.CancelFunc) { | ||||
| 	ctx, cancel := context.WithCancel(context.Background()) | ||||
| 	ctx = namespaces.WithNamespace(ctx, testNamespace) | ||||
| 	if t != nil { | ||||
| 		ctx = logtest.WithT(ctx, t) | ||||
| 	} | ||||
| 	return ctx, cancel | ||||
| } | ||||
|  | ||||
| @@ -73,7 +77,7 @@ func TestMain(m *testing.M) { | ||||
|  | ||||
| 	var ( | ||||
| 		buf         = bytes.NewBuffer(nil) | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(nil) | ||||
| 	) | ||||
| 	defer cancel() | ||||
|  | ||||
| @@ -203,7 +207,7 @@ func TestImagePull(t *testing.T) { | ||||
| 	} | ||||
| 	defer client.Close() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
| 	_, err = client.Pull(ctx, testImage, WithPlatformMatcher(platforms.Default())) | ||||
| 	if err != nil { | ||||
| @@ -217,7 +221,7 @@ func TestImagePullAllPlatforms(t *testing.T) { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	defer client.Close() | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	cs := client.ContentStore() | ||||
| @@ -252,7 +256,7 @@ func TestImagePullSomePlatforms(t *testing.T) { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	defer client.Close() | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	cs := client.ContentStore() | ||||
| @@ -323,7 +327,7 @@ func TestImagePullSchema1(t *testing.T) { | ||||
| 	} | ||||
| 	defer client.Close() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
| 	schema1TestImage := "gcr.io/google_containers/pause:3.0@sha256:0d093c962a6c2dd8bb8727b661e2b5f13e9df884af9945b4cc7088d9350cd3ee" | ||||
| 	_, err = client.Pull(ctx, schema1TestImage, WithPlatform(platforms.DefaultString()), WithSchema1Conversion) | ||||
| @@ -339,7 +343,7 @@ func TestImagePullWithConcurrencyLimit(t *testing.T) { | ||||
| 	} | ||||
| 	defer client.Close() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
| 	_, err = client.Pull(ctx, testImage, | ||||
| 		WithPlatformMatcher(platforms.Default()), | ||||
| @@ -352,7 +356,7 @@ func TestImagePullWithConcurrencyLimit(t *testing.T) { | ||||
| func TestClientReconnect(t *testing.T) { | ||||
| 	t.Parallel() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	client, err := newClient(t, address) | ||||
| @@ -410,7 +414,7 @@ func TestDefaultRuntimeWithNamespaceLabels(t *testing.T) { | ||||
| 	} | ||||
| 	defer client.Close() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
| 	namespaces := client.NamespaceService() | ||||
| 	testRuntime := "testRuntime" | ||||
|   | ||||
| @@ -53,7 +53,7 @@ func TestCheckpointRestorePTY(t *testing.T) { | ||||
| 	} | ||||
|  | ||||
| 	var ( | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -179,7 +179,7 @@ func TestCheckpointRestore(t *testing.T) { | ||||
| 	} | ||||
|  | ||||
| 	var ( | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -269,7 +269,7 @@ func TestCheckpointRestoreNewContainer(t *testing.T) { | ||||
| 	} | ||||
|  | ||||
| 	id := t.Name() | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	image, err := client.GetImage(ctx, testImage) | ||||
| @@ -359,7 +359,7 @@ func TestCheckpointLeaveRunning(t *testing.T) { | ||||
| 	} | ||||
|  | ||||
| 	var ( | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -425,7 +425,7 @@ func TestCRWithImagePath(t *testing.T) { | ||||
| 	defer client.Close() | ||||
|  | ||||
| 	var ( | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() + "-checkpoint" | ||||
| 	) | ||||
| 	defer cancel() | ||||
|   | ||||
| @@ -58,7 +58,7 @@ func TestTaskUpdate(t *testing.T) { | ||||
| 	defer client.Close() | ||||
|  | ||||
| 	var ( | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -135,7 +135,7 @@ func TestShimInCgroup(t *testing.T) { | ||||
| 	} | ||||
| 	defer client.Close() | ||||
| 	var ( | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -192,7 +192,7 @@ func TestDaemonRestart(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -268,7 +268,7 @@ func TestShimDoesNotLeakPipes(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -341,7 +341,7 @@ func TestDaemonReconnectsToShimIOPipesOnRestart(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -471,7 +471,7 @@ func TestContainerPTY(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -548,7 +548,7 @@ func TestContainerAttach(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -693,7 +693,7 @@ func TestContainerUsername(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -768,7 +768,7 @@ func testContainerUser(t *testing.T, userstr, expectedOutput string) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = strings.Replace(t.Name(), "/", "_", -1) | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -843,7 +843,7 @@ func TestContainerAttachProcess(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -960,7 +960,7 @@ func TestContainerUserID(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -1029,7 +1029,7 @@ func TestContainerKillAll(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -1086,7 +1086,7 @@ func TestDaemonRestartWithRunningShim(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -1167,7 +1167,7 @@ func TestContainerRuntimeOptionsv1(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -1210,7 +1210,7 @@ func TestContainerRuntimeOptionsv2(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -1251,7 +1251,7 @@ func initContainerAndCheckChildrenDieOnKill(t *testing.T, opts ...oci.SpecOpts) | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -1350,7 +1350,7 @@ func testUserNamespaces(t *testing.T, readonlyRootFS bool) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = strings.Replace(t.Name(), "/", "-", -1) | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -1439,7 +1439,7 @@ func TestTaskResize(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -1474,7 +1474,7 @@ func TestTaskResize(t *testing.T) { | ||||
| func TestContainerImage(t *testing.T) { | ||||
| 	t.Parallel() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
| 	id := t.Name() | ||||
|  | ||||
| @@ -1507,7 +1507,7 @@ func TestContainerImage(t *testing.T) { | ||||
| func TestContainerNoImage(t *testing.T) { | ||||
| 	t.Parallel() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
| 	id := t.Name() | ||||
|  | ||||
| @@ -1535,7 +1535,7 @@ func TestContainerNoImage(t *testing.T) { | ||||
| func TestUIDNoGID(t *testing.T) { | ||||
| 	t.Parallel() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
| 	id := t.Name() | ||||
|  | ||||
| @@ -1578,7 +1578,7 @@ func TestBindLowPortNonRoot(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -1634,7 +1634,7 @@ func TestBindLowPortNonOpt(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -1695,7 +1695,7 @@ func TestContainerNoSTDIN(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -1748,7 +1748,7 @@ func TestShimOOMScore(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
|   | ||||
| @@ -60,7 +60,7 @@ func TestContainerList(t *testing.T) { | ||||
| 	} | ||||
| 	defer client.Close() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	containers, err := client.Containers(ctx) | ||||
| @@ -82,7 +82,7 @@ func TestNewContainer(t *testing.T) { | ||||
| 	} | ||||
| 	defer client.Close() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	container, err := client.NewContainer(ctx, id, WithNewSpec()) | ||||
| @@ -112,7 +112,7 @@ func TestContainerStart(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -175,7 +175,7 @@ func TestContainerOutput(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 		expected    = "kingkoye" | ||||
| 	) | ||||
| @@ -244,7 +244,7 @@ func TestContainerExec(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -329,7 +329,7 @@ func TestContainerLargeExecArgs(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -405,7 +405,7 @@ func TestContainerPids(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -482,7 +482,7 @@ func TestContainerCloseIO(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -538,7 +538,7 @@ func TestDeleteRunningContainer(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -593,7 +593,7 @@ func TestContainerKill(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -648,7 +648,7 @@ func TestContainerNoBinaryExists(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -695,7 +695,7 @@ func TestContainerExecNoBinaryExists(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -760,7 +760,7 @@ func TestWaitStoppedTask(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -823,7 +823,7 @@ func TestWaitStoppedProcess(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -911,7 +911,7 @@ func TestTaskForceDelete(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -952,7 +952,7 @@ func TestProcessForceDelete(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -1020,7 +1020,7 @@ func TestContainerHostname(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 		expected    = "myhostname" | ||||
| 	) | ||||
| @@ -1089,7 +1089,7 @@ func TestContainerExitedAtSet(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -1149,7 +1149,7 @@ func TestDeleteContainerExecCreated(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -1219,7 +1219,7 @@ func TestContainerMetrics(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -1276,7 +1276,7 @@ func TestDeletedContainerMetrics(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
| @@ -1321,7 +1321,7 @@ func TestDeletedContainerMetrics(t *testing.T) { | ||||
| func TestContainerExtensions(t *testing.T) { | ||||
| 	t.Parallel() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
| 	id := t.Name() | ||||
|  | ||||
| @@ -1366,7 +1366,7 @@ func TestContainerExtensions(t *testing.T) { | ||||
| func TestContainerUpdate(t *testing.T) { | ||||
| 	t.Parallel() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
| 	id := t.Name() | ||||
|  | ||||
| @@ -1411,7 +1411,7 @@ func TestContainerUpdate(t *testing.T) { | ||||
| func TestContainerInfo(t *testing.T) { | ||||
| 	t.Parallel() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
| 	id := t.Name() | ||||
|  | ||||
| @@ -1439,7 +1439,7 @@ func TestContainerInfo(t *testing.T) { | ||||
| func TestContainerLabels(t *testing.T) { | ||||
| 	t.Parallel() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
| 	id := t.Name() | ||||
|  | ||||
| @@ -1484,7 +1484,7 @@ func TestContainerHook(t *testing.T) { | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext() | ||||
| 		ctx, cancel = testContext(t) | ||||
| 		id          = t.Name() | ||||
| 	) | ||||
| 	defer cancel() | ||||
|   | ||||
| @@ -31,6 +31,7 @@ import ( | ||||
|  | ||||
| 	"github.com/containerd/containerd/content" | ||||
| 	"github.com/containerd/containerd/errdefs" | ||||
| 	"github.com/containerd/containerd/log/logtest" | ||||
| 	"github.com/containerd/containerd/pkg/testutil" | ||||
| 	digest "github.com/opencontainers/go-digest" | ||||
| 	ocispec "github.com/opencontainers/image-spec/specs-go/v1" | ||||
| @@ -101,6 +102,7 @@ func Name(ctx context.Context) string { | ||||
| func makeTest(t *testing.T, name string, storeFn func(ctx context.Context, root string) (context.Context, content.Store, func() error, error), fn func(ctx context.Context, t *testing.T, cs content.Store)) func(t *testing.T) { | ||||
| 	return func(t *testing.T) { | ||||
| 		ctx := context.WithValue(context.Background(), nameKey{}, name) | ||||
| 		ctx = logtest.WithT(ctx, t) | ||||
|  | ||||
| 		tmpDir, err := ioutil.TempDir("", "content-suite-"+name+"-") | ||||
| 		if err != nil { | ||||
|   | ||||
| @@ -136,7 +136,7 @@ version = 1 | ||||
| 	client, _, cleanup := newDaemonWithConfig(t, configTOML) | ||||
| 	defer cleanup() | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
| 	// FIXME(AkihiroSuda): import locally frozen image? | ||||
| 	image, err := client.Pull(ctx, testImage, WithPullUnpack) | ||||
|   | ||||
| @@ -33,7 +33,7 @@ func TestExport(t *testing.T) { | ||||
| 	if testing.Short() || runtime.GOOS == "windows" { | ||||
| 		t.Skip() | ||||
| 	} | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	client, err := New(address) | ||||
|   | ||||
| @@ -35,7 +35,7 @@ func TestImageIsUnpacked(t *testing.T) { | ||||
| 	} | ||||
|  | ||||
| 	const imageName = "docker.io/library/busybox:latest" | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	client, err := newClient(t, address) | ||||
| @@ -86,7 +86,7 @@ func TestImagePullWithDistSourceLabel(t *testing.T) { | ||||
| 		tag      = "latest" | ||||
| 	) | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	client, err := newClient(t, address) | ||||
|   | ||||
| @@ -43,7 +43,7 @@ func TestExportAndImport(t *testing.T) { | ||||
| 	if testing.Short() || runtime.GOOS == "windows" { | ||||
| 		t.Skip() | ||||
| 	} | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	client, err := New(address) | ||||
| @@ -83,7 +83,7 @@ func TestExportAndImport(t *testing.T) { | ||||
| } | ||||
|  | ||||
| func TestImport(t *testing.T) { | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	client, err := New(address) | ||||
|   | ||||
| @@ -32,7 +32,7 @@ func TestLeaseResources(t *testing.T) { | ||||
| 		t.Skip() | ||||
| 	} | ||||
|  | ||||
| 	ctx, cancel := testContext() | ||||
| 	ctx, cancel := testContext(t) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	client, err := newClient(t, address) | ||||
|   | ||||
							
								
								
									
										49
									
								
								log/logtest/context.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								log/logtest/context.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|  | ||||
|    Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|    you may not use this file except in compliance with the License. | ||||
|    You may obtain a copy of the License at | ||||
|  | ||||
|        http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  | ||||
|    Unless required by applicable law or agreed to in writing, software | ||||
|    distributed under the License is distributed on an "AS IS" BASIS, | ||||
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|    See the License for the specific language governing permissions and | ||||
|    limitations under the License. | ||||
| */ | ||||
|  | ||||
| package logtest | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"io/ioutil" | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/containerd/containerd/log" | ||||
| 	"github.com/sirupsen/logrus" | ||||
| ) | ||||
|  | ||||
| // WithT adds a logging hook for the given test | ||||
| // Changes debug level to debug, clears output, and | ||||
| // outputs all log messages as test logs. | ||||
| func WithT(ctx context.Context, t testing.TB) context.Context { | ||||
| 	// Create a new logger to avoid adding hooks from multiple tests | ||||
| 	l := logrus.New() | ||||
|  | ||||
| 	// Increase debug level for tests | ||||
| 	l.SetLevel(logrus.DebugLevel) | ||||
| 	l.SetOutput(ioutil.Discard) | ||||
|  | ||||
| 	// Add testing hook | ||||
| 	l.AddHook(&testHook{ | ||||
| 		t: t, | ||||
| 		fmt: &logrus.TextFormatter{ | ||||
| 			DisableColors:   true, | ||||
| 			TimestampFormat: log.RFC3339NanoFixed, | ||||
| 		}, | ||||
| 	}) | ||||
|  | ||||
| 	return log.WithLogger(ctx, logrus.NewEntry(l)) | ||||
| } | ||||
							
								
								
									
										42
									
								
								log/logtest/log_hook.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								log/logtest/log_hook.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|  | ||||
|    Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|    you may not use this file except in compliance with the License. | ||||
|    You may obtain a copy of the License at | ||||
|  | ||||
|        http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  | ||||
|    Unless required by applicable law or agreed to in writing, software | ||||
|    distributed under the License is distributed on an "AS IS" BASIS, | ||||
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|    See the License for the specific language governing permissions and | ||||
|    limitations under the License. | ||||
| */ | ||||
|  | ||||
| package logtest | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/sirupsen/logrus" | ||||
| ) | ||||
|  | ||||
| type testHook struct { | ||||
| 	t   testing.TB | ||||
| 	fmt logrus.Formatter | ||||
| } | ||||
|  | ||||
| func (*testHook) Levels() []logrus.Level { | ||||
| 	return logrus.AllLevels | ||||
| } | ||||
|  | ||||
| func (h *testHook) Fire(e *logrus.Entry) error { | ||||
| 	s, err := h.fmt.Format(e) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	h.t.Log(string(bytes.TrimRight(s, "\n"))) | ||||
| 	return nil | ||||
| } | ||||
| @@ -30,6 +30,7 @@ import ( | ||||
| 	"github.com/containerd/containerd/containers" | ||||
| 	"github.com/containerd/containerd/errdefs" | ||||
| 	"github.com/containerd/containerd/filters" | ||||
| 	"github.com/containerd/containerd/log/logtest" | ||||
| 	"github.com/containerd/containerd/namespaces" | ||||
| 	"github.com/containerd/typeurl" | ||||
| 	"github.com/gogo/protobuf/types" | ||||
| @@ -748,6 +749,7 @@ func checkContainersEqual(t *testing.T, a, b *containers.Container, format strin | ||||
| func testEnv(t *testing.T) (context.Context, *bolt.DB, func()) { | ||||
| 	ctx, cancel := context.WithCancel(context.Background()) | ||||
| 	ctx = namespaces.WithNamespace(ctx, "testing") | ||||
| 	ctx = logtest.WithT(ctx, t) | ||||
|  | ||||
| 	dirname, err := ioutil.TempDir("", strings.Replace(t.Name(), "/", "_", -1)+"-") | ||||
| 	if err != nil { | ||||
|   | ||||
| @@ -36,6 +36,7 @@ import ( | ||||
| 	"github.com/containerd/containerd/errdefs" | ||||
| 	"github.com/containerd/containerd/gc" | ||||
| 	"github.com/containerd/containerd/images" | ||||
| 	"github.com/containerd/containerd/log/logtest" | ||||
| 	"github.com/containerd/containerd/namespaces" | ||||
| 	"github.com/containerd/containerd/snapshots" | ||||
| 	"github.com/containerd/containerd/snapshots/native" | ||||
| @@ -330,7 +331,7 @@ func TestMetadataCollector(t *testing.T) { | ||||
| 	defer cleanup() | ||||
|  | ||||
| 	var ( | ||||
| 		ctx = context.Background() | ||||
| 		ctx = logtest.WithT(context.Background(), t) | ||||
|  | ||||
| 		objects = []object{ | ||||
| 			blob(bytesFor(1), true), | ||||
|   | ||||
| @@ -27,6 +27,7 @@ import ( | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/containerd/containerd/errdefs" | ||||
| 	"github.com/containerd/containerd/log/logtest" | ||||
| 	"github.com/containerd/containerd/mount" | ||||
| 	"github.com/containerd/containerd/namespaces" | ||||
| 	"github.com/containerd/containerd/pkg/testutil" | ||||
| @@ -71,7 +72,7 @@ func makeTest(name string, snapshotterFn func(ctx context.Context, root string) | ||||
| 	return func(t *testing.T) { | ||||
| 		t.Parallel() | ||||
|  | ||||
| 		ctx := context.Background() | ||||
| 		ctx := logtest.WithT(context.Background(), t) | ||||
| 		ctx = namespaces.WithNamespace(ctx, "testsuite") | ||||
| 		// Make two directories: a snapshotter root and a play area for the tests: | ||||
| 		// | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Michael Crosby
					Michael Crosby