Browse code

Remove testutil.CompareDirectoryEntries and IsKilled

Signed-off-by: Daniel Nephin <dnephin@docker.com>

Daniel Nephin authored on 2017/08/22 07:40:56
Showing 4 changed files
... ...
@@ -1526,7 +1526,7 @@ func (s *DockerSuite) TestBuildContextCleanup(c *check.C) {
1526 1526
 	if err != nil {
1527 1527
 		c.Fatalf("failed to list contents of tmp dir: %s", err)
1528 1528
 	}
1529
-	if err = testutil.CompareDirectoryEntries(entries, entriesFinal); err != nil {
1529
+	if err = compareDirectoryEntries(entries, entriesFinal); err != nil {
1530 1530
 		c.Fatalf("context should have been deleted, but wasn't")
1531 1531
 	}
1532 1532
 
... ...
@@ -1550,12 +1550,31 @@ func (s *DockerSuite) TestBuildContextCleanupFailedBuild(c *check.C) {
1550 1550
 	if err != nil {
1551 1551
 		c.Fatalf("failed to list contents of tmp dir: %s", err)
1552 1552
 	}
1553
-	if err = testutil.CompareDirectoryEntries(entries, entriesFinal); err != nil {
1553
+	if err = compareDirectoryEntries(entries, entriesFinal); err != nil {
1554 1554
 		c.Fatalf("context should have been deleted, but wasn't")
1555 1555
 	}
1556 1556
 
1557 1557
 }
1558 1558
 
1559
+// compareDirectoryEntries compares two sets of FileInfo (usually taken from a directory)
1560
+// and returns an error if different.
1561
+func compareDirectoryEntries(e1 []os.FileInfo, e2 []os.FileInfo) error {
1562
+	var (
1563
+		e1Entries = make(map[string]struct{})
1564
+		e2Entries = make(map[string]struct{})
1565
+	)
1566
+	for _, e := range e1 {
1567
+		e1Entries[e.Name()] = struct{}{}
1568
+	}
1569
+	for _, e := range e2 {
1570
+		e2Entries[e.Name()] = struct{}{}
1571
+	}
1572
+	if !reflect.DeepEqual(e1Entries, e2Entries) {
1573
+		return fmt.Errorf("entries differ")
1574
+	}
1575
+	return nil
1576
+}
1577
+
1559 1578
 func (s *DockerSuite) TestBuildCmd(c *check.C) {
1560 1579
 	name := "testbuildcmd"
1561 1580
 	expected := "[/bin/echo Hello World]"
... ...
@@ -14,13 +14,13 @@ import (
14 14
 	"strings"
15 15
 	"time"
16 16
 
17
+	"syscall"
18
+
17 19
 	"github.com/docker/docker/integration-cli/checker"
18 20
 	"github.com/docker/docker/integration-cli/cli"
19 21
 	"github.com/docker/docker/integration-cli/cli/build"
20 22
 	"github.com/docker/docker/integration-cli/cli/build/fakecontext"
21
-	"github.com/docker/docker/pkg/testutil"
22 23
 	icmd "github.com/docker/docker/pkg/testutil/cmd"
23
-	"github.com/docker/go-units"
24 24
 	"github.com/go-check/check"
25 25
 )
26 26
 
... ...
@@ -191,7 +191,7 @@ func (s *DockerSuite) TestBuildCancellationKillsSleep(c *check.C) {
191 191
 	}
192 192
 
193 193
 	// Get the exit status of `docker build`, check it exited because killed.
194
-	if err := buildCmd.Wait(); err != nil && !testutil.IsKilled(err) {
194
+	if err := buildCmd.Wait(); err != nil && !isKilled(err) {
195 195
 		c.Fatalf("wait failed during build run: %T %s", err, err)
196 196
 	}
197 197
 
... ...
@@ -202,3 +202,17 @@ func (s *DockerSuite) TestBuildCancellationKillsSleep(c *check.C) {
202 202
 		// ignore, done
203 203
 	}
204 204
 }
205
+
206
+func isKilled(err error) bool {
207
+	if exitErr, ok := err.(*exec.ExitError); ok {
208
+		status, ok := exitErr.Sys().(syscall.WaitStatus)
209
+		if !ok {
210
+			return false
211
+		}
212
+		// status.ExitStatus() is required on Windows because it does not
213
+		// implement Signal() nor Signaled(). Just check it had a bad exit
214
+		// status could mean it was killed (and in tests we do kill)
215
+		return (status.Signaled() && status.Signal() == os.Kill) || status.ExitStatus() != 0
216
+	}
217
+	return false
218
+}
... ...
@@ -9,30 +9,13 @@ import (
9 9
 	"os"
10 10
 	"os/exec"
11 11
 	"path/filepath"
12
-	"reflect"
13 12
 	"strings"
14
-	"syscall"
15 13
 	"time"
16 14
 
17 15
 	"github.com/docker/docker/pkg/stringutils"
18 16
 	"github.com/docker/docker/pkg/system"
19 17
 )
20 18
 
21
-// IsKilled process the specified error and returns whether the process was killed or not.
22
-func IsKilled(err error) bool {
23
-	if exitErr, ok := err.(*exec.ExitError); ok {
24
-		status, ok := exitErr.Sys().(syscall.WaitStatus)
25
-		if !ok {
26
-			return false
27
-		}
28
-		// status.ExitStatus() is required on Windows because it does not
29
-		// implement Signal() nor Signaled(). Just check it had a bad exit
30
-		// status could mean it was killed (and in tests we do kill)
31
-		return (status.Signaled() && status.Signal() == os.Kill) || status.ExitStatus() != 0
32
-	}
33
-	return false
34
-}
35
-
36 19
 func runCommandWithOutput(cmd *exec.Cmd) (output string, exitCode int, err error) {
37 20
 	out, err := cmd.CombinedOutput()
38 21
 	exitCode = system.ProcessExitCode(err)
... ...
@@ -85,25 +68,6 @@ func RunCommandPipelineWithOutput(cmds ...*exec.Cmd) (output string, exitCode in
85 85
 	return runCommandWithOutput(cmds[len(cmds)-1])
86 86
 }
87 87
 
88
-// CompareDirectoryEntries compares two sets of FileInfo (usually taken from a directory)
89
-// and returns an error if different.
90
-func CompareDirectoryEntries(e1 []os.FileInfo, e2 []os.FileInfo) error {
91
-	var (
92
-		e1Entries = make(map[string]struct{})
93
-		e2Entries = make(map[string]struct{})
94
-	)
95
-	for _, e := range e1 {
96
-		e1Entries[e.Name()] = struct{}{}
97
-	}
98
-	for _, e := range e2 {
99
-		e2Entries[e.Name()] = struct{}{}
100
-	}
101
-	if !reflect.DeepEqual(e1Entries, e2Entries) {
102
-		return fmt.Errorf("entries differ")
103
-	}
104
-	return nil
105
-}
106
-
107 88
 // ListTar lists the entries of a tar.
108 89
 func ListTar(f io.Reader) ([]string, error) {
109 90
 	tr := tar.NewReader(f)
... ...
@@ -12,47 +12,6 @@ import (
12 12
 	"time"
13 13
 )
14 14
 
15
-func TestIsKilledFalseWithNonKilledProcess(t *testing.T) {
16
-	var lsCmd *exec.Cmd
17
-	if runtime.GOOS != "windows" {
18
-		lsCmd = exec.Command("ls")
19
-	} else {
20
-		lsCmd = exec.Command("cmd", "/c", "dir")
21
-	}
22
-
23
-	err := lsCmd.Run()
24
-	if IsKilled(err) {
25
-		t.Fatalf("Expected the ls command to not be killed, was.")
26
-	}
27
-}
28
-
29
-func TestIsKilledTrueWithKilledProcess(t *testing.T) {
30
-	var longCmd *exec.Cmd
31
-	if runtime.GOOS != "windows" {
32
-		longCmd = exec.Command("top")
33
-	} else {
34
-		longCmd = exec.Command("powershell", "while ($true) { sleep 1 }")
35
-	}
36
-
37
-	// Start a command
38
-	err := longCmd.Start()
39
-	if err != nil {
40
-		t.Fatal(err)
41
-	}
42
-	// Capture the error when *dying*
43
-	done := make(chan error, 1)
44
-	go func() {
45
-		done <- longCmd.Wait()
46
-	}()
47
-	// Then kill it
48
-	longCmd.Process.Kill()
49
-	// Get the error
50
-	err = <-done
51
-	if !IsKilled(err) {
52
-		t.Fatalf("Expected the command to be killed, was not.")
53
-	}
54
-}
55
-
56 15
 func TestRunCommandPipelineWithOutputWithNotEnoughCmds(t *testing.T) {
57 16
 	_, _, err := RunCommandPipelineWithOutput(exec.Command("ls"))
58 17
 	expectedError := "pipeline does not have multiple cmds"
... ...
@@ -100,72 +59,6 @@ func TestRunCommandPipelineWithOutput(t *testing.T) {
100 100
 	}
101 101
 }
102 102
 
103
-func TestCompareDirectoryEntries(t *testing.T) {
104
-	tmpFolder, err := ioutil.TempDir("", "integration-cli-utils-compare-directories")
105
-	if err != nil {
106
-		t.Fatal(err)
107
-	}
108
-	defer os.RemoveAll(tmpFolder)
109
-
110
-	file1 := filepath.Join(tmpFolder, "file1")
111
-	file2 := filepath.Join(tmpFolder, "file2")
112
-	os.Create(file1)
113
-	os.Create(file2)
114
-
115
-	fi1, err := os.Stat(file1)
116
-	if err != nil {
117
-		t.Fatal(err)
118
-	}
119
-	fi1bis, err := os.Stat(file1)
120
-	if err != nil {
121
-		t.Fatal(err)
122
-	}
123
-	fi2, err := os.Stat(file2)
124
-	if err != nil {
125
-		t.Fatal(err)
126
-	}
127
-
128
-	cases := []struct {
129
-		e1          []os.FileInfo
130
-		e2          []os.FileInfo
131
-		shouldError bool
132
-	}{
133
-		// Empty directories
134
-		{
135
-			[]os.FileInfo{},
136
-			[]os.FileInfo{},
137
-			false,
138
-		},
139
-		// Same FileInfos
140
-		{
141
-			[]os.FileInfo{fi1},
142
-			[]os.FileInfo{fi1},
143
-			false,
144
-		},
145
-		// Different FileInfos but same names
146
-		{
147
-			[]os.FileInfo{fi1},
148
-			[]os.FileInfo{fi1bis},
149
-			false,
150
-		},
151
-		// Different FileInfos, different names
152
-		{
153
-			[]os.FileInfo{fi1},
154
-			[]os.FileInfo{fi2},
155
-			true,
156
-		},
157
-	}
158
-	for _, elt := range cases {
159
-		err := CompareDirectoryEntries(elt.e1, elt.e2)
160
-		if elt.shouldError && err == nil {
161
-			t.Fatalf("Should have return an error, did not with %v and %v", elt.e1, elt.e2)
162
-		}
163
-		if !elt.shouldError && err != nil {
164
-			t.Fatalf("Should have not returned an error, but did : %v with %v and %v", err, elt.e1, elt.e2)
165
-		}
166
-	}
167
-}
168
-
169 103
 // FIXME make an "unhappy path" test for ListTar without "panicking" :-)
170 104
 func TestListTar(t *testing.T) {
171 105
 	// TODO Windows: Figure out why this fails. Should be portable.