This is a separate set of tests for cp specifically meant to test corner or extreme cases that do not fit in the normal testing rig because of their complexity
(t *testing.T)
| 36 | // because of their complexity |
| 37 | |
| 38 | func TestCopyAcid(t *testing.T) { |
| 39 | testCase := nerdtest.Setup() |
| 40 | |
| 41 | testCase.Setup = func(data test.Data, helpers test.Helpers) { |
| 42 | testID := data.Identifier() |
| 43 | tempDir := t.TempDir() |
| 44 | |
| 45 | sourceFile := filepath.Join(tempDir, "hostfile") |
| 46 | sourceFileContent := []byte(testID) |
| 47 | |
| 48 | roContainer := testID + "-ro" |
| 49 | rwContainer := testID + "-rw" |
| 50 | |
| 51 | data.Labels().Set("sourceFile", sourceFile) |
| 52 | data.Labels().Set("sourceFileContent", string(sourceFileContent)) |
| 53 | data.Labels().Set("roContainer", roContainer) |
| 54 | data.Labels().Set("rwContainer", rwContainer) |
| 55 | |
| 56 | helpers.Ensure("volume", "create", testID+"-1-ro") |
| 57 | helpers.Ensure("volume", "create", testID+"-2-ro") |
| 58 | helpers.Ensure("volume", "create", testID+"-3-ro") |
| 59 | |
| 60 | helpers.Ensure("run", "-d", "-w", containerCwd, "--name", roContainer, "--read-only", |
| 61 | "-v", fmt.Sprintf("%s:%s:ro", testID+"-1-ro", "/vol1/dir1/ro"), |
| 62 | "-v", fmt.Sprintf("%s:%s", testID+"-2-rw", "/vol2/dir2/rw"), |
| 63 | testutil.CommonImage, "sleep", nerdtest.Infinity, |
| 64 | ) |
| 65 | nerdtest.EnsureContainerStarted(helpers, roContainer) |
| 66 | |
| 67 | helpers.Ensure("run", "-d", "-w", containerCwd, "--name", rwContainer, |
| 68 | "-v", fmt.Sprintf("%s:%s:ro", testID+"-1-ro", "/vol1/dir1/ro"), |
| 69 | "-v", fmt.Sprintf("%s:%s", testID+"-3-rw", "/vol3/dir3/rw"), |
| 70 | testutil.CommonImage, "sleep", nerdtest.Infinity, |
| 71 | ) |
| 72 | nerdtest.EnsureContainerStarted(helpers, rwContainer) |
| 73 | |
| 74 | helpers.Ensure("exec", rwContainer, "sh", "-euxc", "cd /vol3/dir3/rw; ln -s ../../../ relativelinktoroot") |
| 75 | helpers.Ensure("exec", rwContainer, "sh", "-euxc", "cd /vol3/dir3/rw; ln -s / absolutelinktoroot") |
| 76 | helpers.Ensure("exec", roContainer, "sh", "-euxc", "cd /vol2/dir2/rw; ln -s ../../../ relativelinktoroot") |
| 77 | helpers.Ensure("exec", roContainer, "sh", "-euxc", "cd /vol2/dir2/rw; ln -s / absolutelinktoroot") |
| 78 | |
| 79 | // Create file on the host |
| 80 | err := os.WriteFile(sourceFile, sourceFileContent, filePerm) |
| 81 | assert.NilError(t, err) |
| 82 | |
| 83 | expectedErr := containerutil.ErrTargetIsReadOnly.Error() |
| 84 | if nerdtest.IsDocker() { |
| 85 | expectedErr = "" |
| 86 | } |
| 87 | data.Labels().Set("expectedErr", expectedErr) |
| 88 | } |
| 89 | |
| 90 | testCase.Cleanup = func(data test.Data, helpers test.Helpers) { |
| 91 | testID := data.Identifier() |
| 92 | helpers.Anyhow("rm", "-f", testID+"-ro") |
| 93 | helpers.Anyhow("rm", "-f", testID+"-rw") |
| 94 | helpers.Anyhow("volume", "rm", testID+"-1-ro") |
| 95 | helpers.Anyhow("volume", "rm", testID+"-2-rw") |
nothing calls this directly
no test coverage detected
searching dependent graphs…