|
@@ -1,8 +1,10 @@
|
|
package main
|
|
package main
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
+ "archive/tar"
|
|
"encoding/json"
|
|
"encoding/json"
|
|
"fmt"
|
|
"fmt"
|
|
|
|
+ "io"
|
|
"io/ioutil"
|
|
"io/ioutil"
|
|
"os"
|
|
"os"
|
|
"os/exec"
|
|
"os/exec"
|
|
@@ -18,7 +20,6 @@ import (
|
|
"github.com/docker/docker/pkg/testutil"
|
|
"github.com/docker/docker/pkg/testutil"
|
|
icmd "github.com/docker/docker/pkg/testutil/cmd"
|
|
icmd "github.com/docker/docker/pkg/testutil/cmd"
|
|
"github.com/go-check/check"
|
|
"github.com/go-check/check"
|
|
- "github.com/opencontainers/go-digest"
|
|
|
|
)
|
|
)
|
|
|
|
|
|
// save a repo using gz compression and try to load it using stdout
|
|
// save a repo using gz compression and try to load it using stdout
|
|
@@ -289,7 +290,7 @@ func (s *DockerSuite) TestSaveDirectoryPermissions(c *check.C) {
|
|
c.Assert(err, checker.IsNil, check.Commentf("failed to open %s: %s", layerPath, err))
|
|
c.Assert(err, checker.IsNil, check.Commentf("failed to open %s: %s", layerPath, err))
|
|
defer f.Close()
|
|
defer f.Close()
|
|
|
|
|
|
- entries, err := testutil.ListTar(f)
|
|
|
|
|
|
+ entries, err := listTar(f)
|
|
for _, e := range entries {
|
|
for _, e := range entries {
|
|
if !strings.Contains(e, "dev/") {
|
|
if !strings.Contains(e, "dev/") {
|
|
entriesSansDev = append(entriesSansDev, e)
|
|
entriesSansDev = append(entriesSansDev, e)
|
|
@@ -308,6 +309,23 @@ func (s *DockerSuite) TestSaveDirectoryPermissions(c *check.C) {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func listTar(f io.Reader) ([]string, error) {
|
|
|
|
+ tr := tar.NewReader(f)
|
|
|
|
+ var entries []string
|
|
|
|
+
|
|
|
|
+ for {
|
|
|
|
+ th, err := tr.Next()
|
|
|
|
+ if err == io.EOF {
|
|
|
|
+ // end of tar archive
|
|
|
|
+ return entries, nil
|
|
|
|
+ }
|
|
|
|
+ if err != nil {
|
|
|
|
+ return entries, err
|
|
|
|
+ }
|
|
|
|
+ entries = append(entries, th.Name)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
// Test loading a weird image where one of the layers is of zero size.
|
|
// Test loading a weird image where one of the layers is of zero size.
|
|
// The layer.tar file is actually zero bytes, no padding or anything else.
|
|
// The layer.tar file is actually zero bytes, no padding or anything else.
|
|
// See issue: 18170
|
|
// See issue: 18170
|