From f610a485c1bca7a78d3b2f70e2005b79668fab2f Mon Sep 17 00:00:00 2001
From: baude <bbaude@redhat.com>
Date: Tue, 14 May 2019 14:28:50 -0500
Subject: [PATCH] use imagecaches for local tests

when doing localized tests (not varlink), we can use secondary image
stores as read-only image caches.  this cuts down on test time
significantly because each test does not need to restore the images from
a tarball anymore.

Signed-off-by: baude <bbaude@redhat.com>
---
 test/e2e/attach_test.go                    |   2 +-
 test/e2e/checkpoint_test.go                |   3 +-
 test/e2e/commit_test.go                    |   2 +-
 test/e2e/common_test.go                    | 107 ++++++++++-----------
 test/e2e/config.go                         |   1 +
 test/e2e/config_amd64.go                   |   2 +
 test/e2e/config_ppc64le.go                 |   2 +
 test/e2e/cp_test.go                        |  39 ++++----
 test/e2e/create_staticip_test.go           |   2 +-
 test/e2e/create_test.go                    |   2 +-
 test/e2e/diff_test.go                      |   2 +-
 test/e2e/events_test.go                    |   2 +-
 test/e2e/exec_test.go                      |   3 +-
 test/e2e/exists_test.go                    |   8 +-
 test/e2e/export_test.go                    |   2 +-
 test/e2e/generate_kube_test.go             |   2 +-
 test/e2e/generate_systemd_test.go          |   2 +-
 test/e2e/healthcheck_run_test.go           |   5 +-
 test/e2e/history_test.go                   |   2 +-
 test/e2e/images_test.go                    |  49 ++++++----
 test/e2e/import_test.go                    |   9 +-
 test/e2e/init_test.go                      |   2 +-
 test/e2e/inspect_test.go                   |   2 +-
 test/e2e/kill_test.go                      |   2 +-
 test/e2e/libpod_suite_remoteclient_test.go |  26 ++++-
 test/e2e/libpod_suite_test.go              |  43 ++++++++-
 test/e2e/load_test.go                      |  87 +++++++++--------
 test/e2e/logs_test.go                      |   2 +-
 test/e2e/mount_test.go                     |   2 +-
 test/e2e/namespace_test.go                 |   2 +-
 test/e2e/pause_test.go                     |   4 +-
 test/e2e/pod_create_test.go                |   2 +-
 test/e2e/pod_infra_container_test.go       |   7 +-
 test/e2e/pod_inspect_test.go               |   2 +-
 test/e2e/pod_kill_test.go                  |   2 +-
 test/e2e/pod_pause_test.go                 |   2 +-
 test/e2e/pod_pod_namespaces.go             |   3 +-
 test/e2e/pod_prune_test.go                 |   2 +-
 test/e2e/pod_ps_test.go                    |   2 +-
 test/e2e/pod_restart_test.go               |   2 +-
 test/e2e/pod_rm_test.go                    |   2 +-
 test/e2e/pod_start_test.go                 |   2 +-
 test/e2e/pod_stats_test.go                 |   2 +-
 test/e2e/pod_stop_test.go                  |   2 +-
 test/e2e/pod_top_test.go                   |   2 +-
 test/e2e/port_test.go                      |   6 +-
 test/e2e/prune_test.go                     |  12 ++-
 test/e2e/ps_test.go                        |   2 +-
 test/e2e/pull_test.go                      |  64 ++++++------
 test/e2e/push_test.go                      |  44 ++++-----
 test/e2e/restart_test.go                   |   2 +-
 test/e2e/rm_test.go                        |   2 +-
 test/e2e/rmi_test.go                       |  84 ++++++++--------
 test/e2e/run_cgroup_parent_test.go         |   2 +-
 test/e2e/run_cleanup_test.go               |   2 +-
 test/e2e/run_cpu_test.go                   |   2 +-
 test/e2e/run_device_test.go                |   2 +-
 test/e2e/run_dns_test.go                   |   2 +-
 test/e2e/run_entrypoint_test.go            |   2 +-
 test/e2e/run_exit_test.go                  |   2 +-
 test/e2e/run_memory_test.go                |   2 +-
 test/e2e/run_networking_test.go            |   3 +-
 test/e2e/run_ns_test.go                    |   2 +-
 test/e2e/run_passwd_test.go                |   2 +-
 test/e2e/run_privileged_test.go            |   2 +-
 test/e2e/run_restart_test.go               |   2 +-
 test/e2e/run_selinux_test.go               |   2 +-
 test/e2e/run_signal_test.go                |   2 +-
 test/e2e/run_staticip_test.go              |   2 +-
 test/e2e/run_test.go                       |  27 +-----
 test/e2e/run_userns_test.go                |   2 +-
 test/e2e/run_volume_test.go                |   2 +-
 test/e2e/runlabel_test.go                  |   2 +-
 test/e2e/save_test.go                      |  18 ++--
 test/e2e/search_test.go                    |  33 +++----
 test/e2e/start_test.go                     |   2 +-
 test/e2e/stats_test.go                     |   2 +-
 test/e2e/stop_test.go                      |   2 +-
 test/e2e/system_df_test.go                 |   5 +-
 test/e2e/systemd_test.go                   |   2 +-
 test/e2e/tag_test.go                       |  18 ++--
 test/e2e/top_test.go                       |   2 +-
 test/e2e/tree_test.go                      |  13 +--
 test/e2e/trust_test.go                     |   2 +-
 test/e2e/unshare_test.go                   |   2 +-
 test/e2e/version_test.go                   |   1 +
 test/e2e/volume_create_test.go             |   2 +-
 test/e2e/volume_inspect_test.go            |   2 +-
 test/e2e/volume_ls_test.go                 |   2 +-
 test/e2e/volume_prune_test.go              |   2 +-
 test/e2e/volume_rm_test.go                 |   2 +-
 test/e2e/wait_test.go                      |   2 +-
 test/utils/podmantest_test.go              |   2 +-
 test/utils/utils.go                        |  24 +++--
 94 files changed, 460 insertions(+), 416 deletions(-)

diff --git a/test/e2e/attach_test.go b/test/e2e/attach_test.go
index a843fe7ff2..7233d169c8 100644
--- a/test/e2e/attach_test.go
+++ b/test/e2e/attach_test.go
@@ -26,7 +26,7 @@ var _ = Describe("Podman attach", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/checkpoint_test.go b/test/e2e/checkpoint_test.go
index c2f5a592c1..95ec214339 100644
--- a/test/e2e/checkpoint_test.go
+++ b/test/e2e/checkpoint_test.go
@@ -28,7 +28,7 @@ var _ = Describe("Podman checkpoint", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 		// Check if the runtime implements checkpointing. Currently only
 		// runc's checkpoint/restore implementation is supported.
 		cmd := exec.Command(podmanTest.OCIRuntime, "checkpoint", "-h")
@@ -221,7 +221,6 @@ var _ = Describe("Podman checkpoint", func() {
 	})
 
 	It("podman checkpoint container with established tcp connections", func() {
-		podmanTest.RestoreArtifact(redis)
 		session := podmanTest.Podman([]string{"run", "-it", "--security-opt", "seccomp=unconfined", "-d", redis})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
diff --git a/test/e2e/commit_test.go b/test/e2e/commit_test.go
index bf20ac999f..50577fdfbb 100644
--- a/test/e2e/commit_test.go
+++ b/test/e2e/commit_test.go
@@ -24,7 +24,7 @@ var _ = Describe("Podman commit", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/common_test.go b/test/e2e/common_test.go
index 3c7675b359..0a388dc42e 100644
--- a/test/e2e/common_test.go
+++ b/test/e2e/common_test.go
@@ -100,12 +100,23 @@ var _ = SynchronizedBeforeSuite(func() []byte {
 		}
 	}
 
+	// make cache dir
+	if err := os.MkdirAll(ImageCacheDir, 0777); err != nil {
+		fmt.Printf("%q\n", err)
+		os.Exit(1)
+	}
+
 	for _, image := range CACHE_IMAGES {
 		if err := podman.CreateArtifact(image); err != nil {
 			fmt.Printf("%q\n", err)
 			os.Exit(1)
 		}
 	}
+
+	// If running localized tests, the cache dir is created and populated. if the
+	// tests are remote, this is a no-op
+	populateCache(podman)
+
 	host := GetHostDistributionInfo()
 	if host.Distribution == "rhel" && strings.HasPrefix(host.Version, "7") {
 		f, err := os.OpenFile("/proc/sys/user/max_user_namespaces", os.O_WRONLY, 0644)
@@ -136,53 +147,29 @@ func (p *PodmanTestIntegration) Setup() {
 	p.ArtifactPath = ARTIFACT_DIR
 }
 
-// var _ = BeforeSuite(func() {
-// 	cwd, _ := os.Getwd()
-// 	INTEGRATION_ROOT = filepath.Join(cwd, "../../")
-// 	podman := PodmanTestCreate("/tmp")
-// 	podman.ArtifactPath = ARTIFACT_DIR
-// 	if _, err := os.Stat(ARTIFACT_DIR); os.IsNotExist(err) {
-// 		if err = os.Mkdir(ARTIFACT_DIR, 0777); err != nil {
-// 			fmt.Printf("%q\n", err)
-// 			os.Exit(1)
-// 		}
-// 	}
-// })
-// for _, image := range CACHE_IMAGES {
-// 	if err := podman.CreateArtifact(image); err != nil {
-// 		fmt.Printf("%q\n", err)
-// 		os.Exit(1)
-// 	}
-// }
-// host := GetHostDistributionInfo()
-// if host.Distribution == "rhel" && strings.HasPrefix(host.Version, "7") {
-// 	f, err := os.OpenFile("/proc/sys/user/max_user_namespaces", os.O_WRONLY, 0644)
-// 	if err != nil {
-// 		fmt.Println("Unable to enable userspace on RHEL 7")
-// 		os.Exit(1)
-// 	}
-// 	_, err = f.WriteString("15000")
-// 	if err != nil {
-// 		fmt.Println("Unable to enable userspace on RHEL 7")
-// 		os.Exit(1)
-// 	}
-// 	f.Close()
-// }
-// path, err := ioutil.TempDir("", "libpodlock")
-// if err != nil {
-// 	fmt.Println(err)
-// 	os.Exit(1)
-// }
-// LockTmpDir = path
-// })
+var _ = SynchronizedAfterSuite(func() {},
+	func() {
+		sort.Sort(testResultsSortedLength{testResults})
+		fmt.Println("integration timing results")
+		for _, result := range testResults {
+			fmt.Printf("%s\t\t%f\n", result.name, result.length)
+		}
 
-var _ = AfterSuite(func() {
-	sort.Sort(testResultsSortedLength{testResults})
-	fmt.Println("integration timing results")
-	for _, result := range testResults {
-		fmt.Printf("%s\t\t%f\n", result.name, result.length)
-	}
-})
+		// previous crio-run
+		tempdir, err := CreateTempDirInTempDir()
+		if err != nil {
+			os.Exit(1)
+		}
+		podmanTest := PodmanTestCreate(tempdir)
+
+		if err := os.RemoveAll(podmanTest.CrioRoot); err != nil {
+			fmt.Printf("%q\n", err)
+		}
+
+		// for localized tests, this removes the image cache dir and for remote tests
+		// this is a no-op
+		removeCache()
+	})
 
 // PodmanTestCreate creates a PodmanTestIntegration instance for the tests
 func PodmanTestCreateUtil(tempDir string, remote bool) *PodmanTestIntegration {
@@ -244,12 +231,18 @@ func PodmanTestCreateUtil(tempDir string, remote bool) *PodmanTestIntegration {
 	os.Setenv("DISABLE_HC_SYSTEMD", "true")
 	CNIConfigDir := "/etc/cni/net.d"
 
+	storageFs := STORAGE_FS
+	if rootless.IsRootless() {
+		storageFs = ROOTLESS_STORAGE_FS
+	}
 	p := &PodmanTestIntegration{
 		PodmanTest: PodmanTest{
-			PodmanBinary: podmanBinary,
-			ArtifactPath: ARTIFACT_DIR,
-			TempDir:      tempDir,
-			RemoteTest:   remote,
+			PodmanBinary:  podmanBinary,
+			ArtifactPath:  ARTIFACT_DIR,
+			TempDir:       tempDir,
+			RemoteTest:    remote,
+			ImageCacheFS:  storageFs,
+			ImageCacheDir: ImageCacheDir,
 		},
 		ConmonBinary:        conmonBinary,
 		CrioRoot:            filepath.Join(tempDir, "crio"),
@@ -304,10 +297,10 @@ func (p *PodmanTestIntegration) CreateArtifact(image string) error {
 	dest := strings.Split(image, "/")
 	destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1))
 	if _, err := os.Stat(destName); os.IsNotExist(err) {
-		pull := p.Podman([]string{"pull", image})
+		pull := p.PodmanNoCache([]string{"pull", image})
 		pull.Wait(90)
 
-		save := p.Podman([]string{"save", "-o", destName, image})
+		save := p.PodmanNoCache([]string{"save", "-o", destName, image})
 		save.Wait(90)
 		fmt.Printf("\n")
 	} else {
@@ -390,7 +383,7 @@ func (p *PodmanTestIntegration) BuildImage(dockerfile, imageName string, layers
 	dockerfilePath := filepath.Join(p.TempDir, "Dockerfile")
 	err := ioutil.WriteFile(dockerfilePath, []byte(dockerfile), 0755)
 	Expect(err).To(BeNil())
-	session := p.Podman([]string{"build", "--layers=" + layers, "-t", imageName, "--file", dockerfilePath, p.TempDir})
+	session := p.PodmanNoCache([]string{"build", "--layers=" + layers, "-t", imageName, "--file", dockerfilePath, p.TempDir})
 	session.Wait(120)
 	Expect(session.ExitCode()).To(Equal(0))
 }
@@ -465,7 +458,7 @@ func (p *PodmanTestIntegration) PullImages(images []string) error {
 // PullImage pulls a single image
 // TODO should the timeout be configurable?
 func (p *PodmanTestIntegration) PullImage(image string) error {
-	session := p.Podman([]string{"pull", image})
+	session := p.PodmanNoCache([]string{"pull", image})
 	session.Wait(60)
 	Expect(session.ExitCode()).To(Equal(0))
 	return nil
@@ -508,3 +501,9 @@ func (p *PodmanTestIntegration) RunTopContainerInPod(name, pod string) *PodmanSe
 	podmanArgs = append(podmanArgs, "-d", ALPINE, "top")
 	return p.Podman(podmanArgs)
 }
+
+func (p *PodmanTestIntegration) ImageExistsInMainStore(idOrName string) bool {
+	results := p.PodmanNoCache([]string{"image", "exists", idOrName})
+	results.WaitWithDefaultTimeout()
+	return Expect(results.ExitCode()).To(Equal(0))
+}
diff --git a/test/e2e/config.go b/test/e2e/config.go
index 3fdb9e116b..5e0000e099 100644
--- a/test/e2e/config.go
+++ b/test/e2e/config.go
@@ -7,4 +7,5 @@ var (
 	infra         = "k8s.gcr.io/pause:3.1"
 	BB            = "docker.io/library/busybox:latest"
 	healthcheck   = "docker.io/libpod/alpine_healthcheck:latest"
+	ImageCacheDir = "/tmp/podman/imagecachedir"
 )
diff --git a/test/e2e/config_amd64.go b/test/e2e/config_amd64.go
index d02de7a6e4..01aa8445a5 100644
--- a/test/e2e/config_amd64.go
+++ b/test/e2e/config_amd64.go
@@ -1,7 +1,9 @@
 package integration
 
 var (
+	STORAGE_FS               = "vfs"
 	STORAGE_OPTIONS          = "--storage-driver vfs"
+	ROOTLESS_STORAGE_FS      = "vfs"
 	ROOTLESS_STORAGE_OPTIONS = "--storage-driver vfs"
 	CACHE_IMAGES             = []string{ALPINE, BB, fedoraMinimal, nginx, redis, registry, infra, labels, healthcheck}
 	nginx                    = "quay.io/libpod/alpine_nginx:latest"
diff --git a/test/e2e/config_ppc64le.go b/test/e2e/config_ppc64le.go
index d1737fa6fb..569a34efb7 100644
--- a/test/e2e/config_ppc64le.go
+++ b/test/e2e/config_ppc64le.go
@@ -1,7 +1,9 @@
 package integration
 
 var (
+	STORAGE_FS               = "overlay"
 	STORAGE_OPTIONS          = "--storage-driver overlay"
+	ROOTLESS_STORAGE_FS      = "vfs"
 	ROOTLESS_STORAGE_OPTIONS = "--storage-driver vfs"
 	CACHE_IMAGES             = []string{ALPINE, BB, fedoraMinimal, nginx, redis, infra, labels}
 	nginx                    = "quay.io/libpod/alpine_nginx-ppc64le:latest"
diff --git a/test/e2e/cp_test.go b/test/e2e/cp_test.go
index f8df5d3d09..1606d08685 100644
--- a/test/e2e/cp_test.go
+++ b/test/e2e/cp_test.go
@@ -28,7 +28,7 @@ var _ = Describe("Podman cp", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
@@ -42,14 +42,15 @@ var _ = Describe("Podman cp", func() {
 		srcPath := filepath.Join(podmanTest.RunRoot, "cp_test.txt")
 		dstPath := filepath.Join(podmanTest.RunRoot, "cp_from_container")
 		fromHostToContainer := []byte("copy from host to container")
-		err := ioutil.WriteFile(srcPath, fromHostToContainer, 0644)
-		Expect(err).To(BeNil())
 
 		session := podmanTest.Podman([]string{"create", ALPINE, "cat", "foo"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		name := session.OutputToString()
 
+		err := ioutil.WriteFile(srcPath, fromHostToContainer, 0644)
+		Expect(err).To(BeNil())
+
 		session = podmanTest.Podman([]string{"cp", srcPath, name + ":foo"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
@@ -63,16 +64,17 @@ var _ = Describe("Podman cp", func() {
 		srcPath := filepath.Join(podmanTest.RunRoot, "cp_test.txt")
 		dstDir := filepath.Join(podmanTest.RunRoot, "receive")
 		fromHostToContainer := []byte("copy from host to container directory")
-		err := ioutil.WriteFile(srcPath, fromHostToContainer, 0644)
-		Expect(err).To(BeNil())
-		err = os.Mkdir(dstDir, 0755)
-		Expect(err).To(BeNil())
 
 		session := podmanTest.Podman([]string{"create", ALPINE, "ls", "foodir/"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		name := session.OutputToString()
 
+		err := ioutil.WriteFile(srcPath, fromHostToContainer, 0644)
+		Expect(err).To(BeNil())
+		err = os.Mkdir(dstDir, 0755)
+		Expect(err).To(BeNil())
+
 		session = podmanTest.Podman([]string{"cp", srcPath, name + ":foodir/"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
@@ -87,14 +89,15 @@ var _ = Describe("Podman cp", func() {
 
 	It("podman cp dir to dir", func() {
 		testDirPath := filepath.Join(podmanTest.RunRoot, "TestDir")
-		err := os.Mkdir(testDirPath, 0755)
-		Expect(err).To(BeNil())
 
 		session := podmanTest.Podman([]string{"create", ALPINE, "ls", "/foodir"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		name := session.OutputToString()
 
+		err := os.Mkdir(testDirPath, 0755)
+		Expect(err).To(BeNil())
+
 		session = podmanTest.Podman([]string{"cp", testDirPath, name + ":/foodir"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
@@ -105,6 +108,11 @@ var _ = Describe("Podman cp", func() {
 	})
 
 	It("podman cp stdin/stdout", func() {
+		session := podmanTest.Podman([]string{"create", ALPINE, "ls", "foo"})
+		session.WaitWithDefaultTimeout()
+		Expect(session.ExitCode()).To(Equal(0))
+		name := session.OutputToString()
+
 		testDirPath := filepath.Join(podmanTest.RunRoot, "TestDir")
 		err := os.Mkdir(testDirPath, 0755)
 		Expect(err).To(BeNil())
@@ -112,11 +120,6 @@ var _ = Describe("Podman cp", func() {
 		_, err = cmd.Output()
 		Expect(err).To(BeNil())
 
-		session := podmanTest.Podman([]string{"create", ALPINE, "ls", "foo"})
-		session.WaitWithDefaultTimeout()
-		Expect(session.ExitCode()).To(Equal(0))
-		name := session.OutputToString()
-
 		data, err := ioutil.ReadFile("foo.tar.gz")
 		reader := strings.NewReader(string(data))
 		cmd.Stdin = reader
@@ -133,6 +136,10 @@ var _ = Describe("Podman cp", func() {
 	})
 
 	It("podman cp tar", func() {
+		session := podmanTest.Podman([]string{"create", "--name", "testctr", ALPINE, "ls", "-l", "foo"})
+		session.WaitWithDefaultTimeout()
+		Expect(session.ExitCode()).To(Equal(0))
+
 		path, err := os.Getwd()
 		Expect(err).To(BeNil())
 		testDirPath := filepath.Join(path, "TestDir")
@@ -142,10 +149,6 @@ var _ = Describe("Podman cp", func() {
 		_, err = cmd.Output()
 		Expect(err).To(BeNil())
 
-		session := podmanTest.Podman([]string{"create", "--name", "testctr", ALPINE, "ls", "-l", "foo"})
-		session.WaitWithDefaultTimeout()
-		Expect(session.ExitCode()).To(Equal(0))
-
 		session = podmanTest.Podman([]string{"cp", "file.tar", "testctr:/foo/"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
diff --git a/test/e2e/create_staticip_test.go b/test/e2e/create_staticip_test.go
index 6c4ca1cb8e..11301856bc 100644
--- a/test/e2e/create_staticip_test.go
+++ b/test/e2e/create_staticip_test.go
@@ -25,7 +25,7 @@ var _ = Describe("Podman create with --ip flag", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 		// Cleanup the CNI networks used by the tests
 		os.RemoveAll("/var/lib/cni/networks/podman")
 	})
diff --git a/test/e2e/create_test.go b/test/e2e/create_test.go
index f3367337ef..e2b4a7cf44 100644
--- a/test/e2e/create_test.go
+++ b/test/e2e/create_test.go
@@ -24,7 +24,7 @@ var _ = Describe("Podman create", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/diff_test.go b/test/e2e/diff_test.go
index 920b920c09..0f53d9bc81 100644
--- a/test/e2e/diff_test.go
+++ b/test/e2e/diff_test.go
@@ -23,7 +23,7 @@ var _ = Describe("Podman diff", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/events_test.go b/test/e2e/events_test.go
index 5ac5c9860e..c5eedda3cf 100644
--- a/test/e2e/events_test.go
+++ b/test/e2e/events_test.go
@@ -23,7 +23,7 @@ var _ = Describe("Podman events", func() {
 			os.Exit(1)
 		}
 		podmanTest = PodmanTestCreate(tempdir)
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/exec_test.go b/test/e2e/exec_test.go
index 2a10e52b17..f42831ebb6 100644
--- a/test/e2e/exec_test.go
+++ b/test/e2e/exec_test.go
@@ -24,7 +24,7 @@ var _ = Describe("Podman exec", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
@@ -123,7 +123,6 @@ var _ = Describe("Podman exec", func() {
 	})
 
 	It("podman exec with user only in container", func() {
-		podmanTest.RestoreArtifact(fedoraMinimal)
 		testUser := "test123"
 		setup := podmanTest.Podman([]string{"run", "--name", "test1", "-d", fedoraMinimal, "sleep", "60"})
 		setup.WaitWithDefaultTimeout()
diff --git a/test/e2e/exists_test.go b/test/e2e/exists_test.go
index 71c6c1820b..1486427c5a 100644
--- a/test/e2e/exists_test.go
+++ b/test/e2e/exists_test.go
@@ -48,7 +48,6 @@ var _ = Describe("Podman image|container exists", func() {
 		Expect(session.ExitCode()).To(Equal(1))
 	})
 	It("podman container exists in local storage by name", func() {
-		SkipIfRemote()
 		setup := podmanTest.RunTopContainer("foobar")
 		setup.WaitWithDefaultTimeout()
 		Expect(setup.ExitCode()).To(Equal(0))
@@ -58,7 +57,6 @@ var _ = Describe("Podman image|container exists", func() {
 		Expect(session.ExitCode()).To(Equal(0))
 	})
 	It("podman container exists in local storage by container ID", func() {
-		SkipIfRemote()
 		setup := podmanTest.RunTopContainer("")
 		setup.WaitWithDefaultTimeout()
 		Expect(setup.ExitCode()).To(Equal(0))
@@ -69,7 +67,6 @@ var _ = Describe("Podman image|container exists", func() {
 		Expect(session.ExitCode()).To(Equal(0))
 	})
 	It("podman container exists in local storage by short container ID", func() {
-		SkipIfRemote()
 		setup := podmanTest.RunTopContainer("")
 		setup.WaitWithDefaultTimeout()
 		Expect(setup.ExitCode()).To(Equal(0))
@@ -80,14 +77,12 @@ var _ = Describe("Podman image|container exists", func() {
 		Expect(session.ExitCode()).To(Equal(0))
 	})
 	It("podman container does not exist in local storage", func() {
-		SkipIfRemote()
 		session := podmanTest.Podman([]string{"container", "exists", "foobar"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(1))
 	})
 
 	It("podman pod exists in local storage by name", func() {
-		SkipIfRemote()
 		setup, rc, _ := podmanTest.CreatePod("foobar")
 		setup.WaitWithDefaultTimeout()
 		Expect(rc).To(Equal(0))
@@ -97,7 +92,6 @@ var _ = Describe("Podman image|container exists", func() {
 		Expect(session.ExitCode()).To(Equal(0))
 	})
 	It("podman pod exists in local storage by container ID", func() {
-		SkipIfRemote()
 		setup, rc, podID := podmanTest.CreatePod("")
 		setup.WaitWithDefaultTimeout()
 		Expect(rc).To(Equal(0))
@@ -107,7 +101,6 @@ var _ = Describe("Podman image|container exists", func() {
 		Expect(session.ExitCode()).To(Equal(0))
 	})
 	It("podman pod exists in local storage by short container ID", func() {
-		SkipIfRemote()
 		setup, rc, podID := podmanTest.CreatePod("")
 		setup.WaitWithDefaultTimeout()
 		Expect(rc).To(Equal(0))
@@ -117,6 +110,7 @@ var _ = Describe("Podman image|container exists", func() {
 		Expect(session.ExitCode()).To(Equal(0))
 	})
 	It("podman pod does not exist in local storage", func() {
+		// The exit code for non-existing pod is incorrect (125 vs 1)
 		SkipIfRemote()
 		session := podmanTest.Podman([]string{"pod", "exists", "foobar"})
 		session.WaitWithDefaultTimeout()
diff --git a/test/e2e/export_test.go b/test/e2e/export_test.go
index 71ddb518af..8406b0e73a 100644
--- a/test/e2e/export_test.go
+++ b/test/e2e/export_test.go
@@ -23,7 +23,7 @@ var _ = Describe("Podman export", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/generate_kube_test.go b/test/e2e/generate_kube_test.go
index 2f0af7e5ff..95d46476da 100644
--- a/test/e2e/generate_kube_test.go
+++ b/test/e2e/generate_kube_test.go
@@ -25,7 +25,7 @@ var _ = Describe("Podman generate kube", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/generate_systemd_test.go b/test/e2e/generate_systemd_test.go
index 940e894bcf..5bb0402069 100644
--- a/test/e2e/generate_systemd_test.go
+++ b/test/e2e/generate_systemd_test.go
@@ -23,7 +23,7 @@ var _ = Describe("Podman generate systemd", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/healthcheck_run_test.go b/test/e2e/healthcheck_run_test.go
index 60be86ebc9..be54cf1bdd 100644
--- a/test/e2e/healthcheck_run_test.go
+++ b/test/e2e/healthcheck_run_test.go
@@ -24,7 +24,8 @@ var _ = Describe("Podman healthcheck run", func() {
 			os.Exit(1)
 		}
 		podmanTest = PodmanTestCreate(tempdir)
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.Setup()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
@@ -42,7 +43,6 @@ var _ = Describe("Podman healthcheck run", func() {
 	})
 
 	It("podman healthcheck on valid container", func() {
-		podmanTest.RestoreArtifact(healthcheck)
 		session := podmanTest.Podman([]string{"run", "-dt", "--name", "hc", healthcheck})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
@@ -63,7 +63,6 @@ var _ = Describe("Podman healthcheck run", func() {
 	})
 
 	It("podman healthcheck on stopped container", func() {
-		podmanTest.RestoreArtifact(healthcheck)
 		session := podmanTest.Podman([]string{"run", "-dt", "--name", "hc", healthcheck, "ls"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
diff --git a/test/e2e/history_test.go b/test/e2e/history_test.go
index 9e519dd9ce..231e8b8561 100644
--- a/test/e2e/history_test.go
+++ b/test/e2e/history_test.go
@@ -22,7 +22,7 @@ var _ = Describe("Podman history", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/images_test.go b/test/e2e/images_test.go
index 23455163b8..07d61e885f 100644
--- a/test/e2e/images_test.go
+++ b/test/e2e/images_test.go
@@ -25,7 +25,7 @@ var _ = Describe("Podman images", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
@@ -44,14 +44,15 @@ var _ = Describe("Podman images", func() {
 	})
 
 	It("podman images with no images prints header", func() {
-		rmi := podmanTest.Podman([]string{"rmi", "-a"})
+		rmi := podmanTest.PodmanNoCache([]string{"rmi", "-a"})
 		rmi.WaitWithDefaultTimeout()
 		Expect(rmi.ExitCode()).To(Equal(0))
 
-		session := podmanTest.Podman([]string{"images"})
+		session := podmanTest.PodmanNoCache([]string{"images"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		Expect(len(session.OutputToStringArray())).To(Equal(1))
+		Expect(session.LineInOutputContains("REPOSITORY")).To(BeTrue())
 	})
 
 	It("podman image List", func() {
@@ -65,15 +66,16 @@ var _ = Describe("Podman images", func() {
 
 	It("podman images with multiple tags", func() {
 		// tag "docker.io/library/alpine:latest" to "foo:{a,b,c}"
-		session := podmanTest.Podman([]string{"tag", ALPINE, "foo:a", "foo:b", "foo:c"})
+		podmanTest.RestoreAllArtifacts()
+		session := podmanTest.PodmanNoCache([]string{"tag", ALPINE, "foo:a", "foo:b", "foo:c"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		// tag "foo:c" to "bar:{a,b}"
-		session = podmanTest.Podman([]string{"tag", "foo:c", "bar:a", "bar:b"})
+		session = podmanTest.PodmanNoCache([]string{"tag", "foo:c", "bar:a", "bar:b"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		// check all previous and the newly tagged images
-		session = podmanTest.Podman([]string{"images"})
+		session = podmanTest.PodmanNoCache([]string{"images"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		session.LineInOutputContainsTag("docker.io/library/alpine", "latest")
@@ -83,7 +85,7 @@ var _ = Describe("Podman images", func() {
 		session.LineInOutputContainsTag("foo", "c")
 		session.LineInOutputContainsTag("bar", "a")
 		session.LineInOutputContainsTag("bar", "b")
-		session = podmanTest.Podman([]string{"images", "-qn"})
+		session = podmanTest.PodmanNoCache([]string{"images", "-qn"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		Expect(len(session.OutputToStringArray())).To(BeNumerically("==", 2))
@@ -119,19 +121,20 @@ var _ = Describe("Podman images", func() {
 	})
 
 	It("podman images filter by image name", func() {
-		session := podmanTest.Podman([]string{"images", "-q", ALPINE})
+		podmanTest.RestoreAllArtifacts()
+		session := podmanTest.PodmanNoCache([]string{"images", "-q", ALPINE})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		Expect(len(session.OutputToStringArray())).To(Equal(1))
 
-		session = podmanTest.Podman([]string{"tag", ALPINE, "foo:a"})
+		session = podmanTest.PodmanNoCache([]string{"tag", ALPINE, "foo:a"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
-		session = podmanTest.Podman([]string{"tag", BB, "foo:b"})
+		session = podmanTest.PodmanNoCache([]string{"tag", BB, "foo:b"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"images", "-q", "foo"})
+		session = podmanTest.PodmanNoCache([]string{"images", "-q", "foo"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		Expect(len(session.OutputToStringArray())).To(Equal(2))
@@ -141,24 +144,25 @@ var _ = Describe("Podman images", func() {
 		if podmanTest.RemoteTest {
 			Skip("Does not work on remote client")
 		}
-		result := podmanTest.Podman([]string{"images", "-q", "-f", "reference=docker.io*"})
+		podmanTest.RestoreAllArtifacts()
+		result := podmanTest.PodmanNoCache([]string{"images", "-q", "-f", "reference=docker.io*"})
 		result.WaitWithDefaultTimeout()
 		Expect(result.ExitCode()).To(Equal(0))
 		Expect(len(result.OutputToStringArray())).To(Equal(2))
 
-		retapline := podmanTest.Podman([]string{"images", "-f", "reference=a*pine"})
+		retapline := podmanTest.PodmanNoCache([]string{"images", "-f", "reference=a*pine"})
 		retapline.WaitWithDefaultTimeout()
 		Expect(retapline.ExitCode()).To(Equal(0))
 		Expect(len(retapline.OutputToStringArray())).To(Equal(2))
 		Expect(retapline.LineInOutputContains("alpine"))
 
-		retapline = podmanTest.Podman([]string{"images", "-f", "reference=alpine"})
+		retapline = podmanTest.PodmanNoCache([]string{"images", "-f", "reference=alpine"})
 		retapline.WaitWithDefaultTimeout()
 		Expect(retapline.ExitCode()).To(Equal(0))
 		Expect(len(retapline.OutputToStringArray())).To(Equal(2))
 		Expect(retapline.LineInOutputContains("alpine"))
 
-		retnone := podmanTest.Podman([]string{"images", "-q", "-f", "reference=bogus"})
+		retnone := podmanTest.PodmanNoCache([]string{"images", "-q", "-f", "reference=bogus"})
 		retnone.WaitWithDefaultTimeout()
 		Expect(retnone.ExitCode()).To(Equal(0))
 		Expect(len(retnone.OutputToStringArray())).To(Equal(0))
@@ -182,14 +186,15 @@ RUN apk update && apk add man
 		if podmanTest.RemoteTest {
 			Skip("Does not work on remote client")
 		}
-		rmi := podmanTest.Podman([]string{"rmi", "busybox"})
+		podmanTest.RestoreAllArtifacts()
+		rmi := podmanTest.PodmanNoCache([]string{"rmi", "busybox"})
 		rmi.WaitWithDefaultTimeout()
 		Expect(rmi.ExitCode()).To(Equal(0))
 
 		dockerfile := `FROM docker.io/library/alpine:latest
 `
 		podmanTest.BuildImage(dockerfile, "foobar.com/before:latest", "false")
-		result := podmanTest.Podman([]string{"images", "-q", "-f", "after=docker.io/library/alpine:latest"})
+		result := podmanTest.PodmanNoCache([]string{"images", "-q", "-f", "after=docker.io/library/alpine:latest"})
 		result.WaitWithDefaultTimeout()
 		Expect(result.ExitCode()).To(Equal(0))
 		Expect(len(result.OutputToStringArray())).To(Equal(0))
@@ -199,14 +204,15 @@ RUN apk update && apk add man
 		if podmanTest.RemoteTest {
 			Skip("Does not work on remote client")
 		}
-		rmi := podmanTest.Podman([]string{"image", "rm", "busybox"})
+		podmanTest.RestoreAllArtifacts()
+		rmi := podmanTest.PodmanNoCache([]string{"image", "rm", "busybox"})
 		rmi.WaitWithDefaultTimeout()
 		Expect(rmi.ExitCode()).To(Equal(0))
 
 		dockerfile := `FROM docker.io/library/alpine:latest
 `
 		podmanTest.BuildImage(dockerfile, "foobar.com/before:latest", "false")
-		result := podmanTest.Podman([]string{"image", "list", "-q", "-f", "after=docker.io/library/alpine:latest"})
+		result := podmanTest.PodmanNoCache([]string{"image", "list", "-q", "-f", "after=docker.io/library/alpine:latest"})
 		result.WaitWithDefaultTimeout()
 		Expect(result.ExitCode()).To(Equal(0))
 		Expect(len(result.OutputToStringArray())).To(Equal(0))
@@ -282,18 +288,19 @@ RUN apk update && apk add man
 		if podmanTest.RemoteTest {
 			Skip("Does not work on remote client")
 		}
+		podmanTest.RestoreAllArtifacts()
 		dockerfile := `FROM docker.io/library/alpine:latest
 RUN mkdir hello
 RUN touch test.txt
 ENV foo=bar
 `
 		podmanTest.BuildImage(dockerfile, "test", "true")
-		session := podmanTest.Podman([]string{"images"})
+		session := podmanTest.PodmanNoCache([]string{"images"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		Expect(len(session.OutputToStringArray())).To(Equal(4))
 
-		session2 := podmanTest.Podman([]string{"images", "--all"})
+		session2 := podmanTest.PodmanNoCache([]string{"images", "--all"})
 		session2.WaitWithDefaultTimeout()
 		Expect(session2.ExitCode()).To(Equal(0))
 		Expect(len(session2.OutputToStringArray())).To(Equal(6))
diff --git a/test/e2e/import_test.go b/test/e2e/import_test.go
index e819d819c0..84a91a7830 100644
--- a/test/e2e/import_test.go
+++ b/test/e2e/import_test.go
@@ -25,7 +25,7 @@ var _ = Describe("Podman import", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
@@ -62,14 +62,11 @@ var _ = Describe("Podman import", func() {
 		export.WaitWithDefaultTimeout()
 		Expect(export.ExitCode()).To(Equal(0))
 
-		importImage := podmanTest.Podman([]string{"import", outfile})
+		importImage := podmanTest.PodmanNoCache([]string{"import", outfile})
 		importImage.WaitWithDefaultTimeout()
 		Expect(importImage.ExitCode()).To(Equal(0))
 
-		results := podmanTest.Podman([]string{"images", "-q"})
-		results.WaitWithDefaultTimeout()
-		Expect(results.ExitCode()).To(Equal(0))
-		Expect(len(results.OutputToStringArray())).To(Equal(3))
+		Expect(podmanTest.ImageExistsInMainStore(importImage.OutputToString())).To(BeTrue())
 	})
 
 	It("podman import with message flag", func() {
diff --git a/test/e2e/init_test.go b/test/e2e/init_test.go
index 5865930a54..919fe4abf7 100644
--- a/test/e2e/init_test.go
+++ b/test/e2e/init_test.go
@@ -22,7 +22,7 @@ var _ = Describe("Podman init", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/inspect_test.go b/test/e2e/inspect_test.go
index 34328828f0..ccd8602c46 100644
--- a/test/e2e/inspect_test.go
+++ b/test/e2e/inspect_test.go
@@ -23,7 +23,7 @@ var _ = Describe("Podman inspect", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/kill_test.go b/test/e2e/kill_test.go
index 3286180a4d..017fe4a3fc 100644
--- a/test/e2e/kill_test.go
+++ b/test/e2e/kill_test.go
@@ -22,7 +22,7 @@ var _ = Describe("Podman kill", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/libpod_suite_remoteclient_test.go b/test/e2e/libpod_suite_remoteclient_test.go
index b7fd8537d5..c8210f7d13 100644
--- a/test/e2e/libpod_suite_remoteclient_test.go
+++ b/test/e2e/libpod_suite_remoteclient_test.go
@@ -30,7 +30,13 @@ func SkipIfRootless() {
 
 // Podman is the exec call to podman on the filesystem
 func (p *PodmanTestIntegration) Podman(args []string) *PodmanSessionIntegration {
-	podmanSession := p.PodmanBase(args)
+	podmanSession := p.PodmanBase(args, false)
+	return &PodmanSessionIntegration{podmanSession}
+}
+
+// PodmanNoCache calls podman with out adding the imagecache
+func (p *PodmanTestIntegration) PodmanNoCache(args []string) *PodmanSessionIntegration {
+	podmanSession := p.PodmanBase(args, true)
 	return &PodmanSessionIntegration{podmanSession}
 }
 
@@ -145,6 +151,21 @@ func getVarlinkOptions(p *PodmanTestIntegration, args []string) []string {
 	return podmanOptions
 }
 
+func (p *PodmanTestIntegration) RestoreArtifactToCache(image string) error {
+	fmt.Printf("Restoring %s...\n", image)
+	dest := strings.Split(image, "/")
+	destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1))
+	p.CrioRoot = p.ImageCacheDir
+	restore := p.PodmanNoCache([]string{"load", "-q", "-i", destName})
+	restore.WaitWithDefaultTimeout()
+	return nil
+}
+
+// SeedImages restores all the artifacts into the main store for remote tests
+func (p *PodmanTestIntegration) SeedImages() error {
+	return p.RestoreAllArtifacts()
+}
+
 // RestoreArtifact puts the cached image into our test store
 func (p *PodmanTestIntegration) RestoreArtifact(image string) error {
 	fmt.Printf("Restoring %s...\n", image)
@@ -169,3 +190,6 @@ func (p *PodmanTestIntegration) DelayForVarlink() {
 		time.Sleep(1 * time.Second)
 	}
 }
+
+func populateCache(podman *PodmanTestIntegration) {}
+func removeCache()                                {}
diff --git a/test/e2e/libpod_suite_test.go b/test/e2e/libpod_suite_test.go
index 0a85c625da..8d993ee720 100644
--- a/test/e2e/libpod_suite_test.go
+++ b/test/e2e/libpod_suite_test.go
@@ -23,13 +23,19 @@ func SkipIfRootless() {
 
 // Podman is the exec call to podman on the filesystem
 func (p *PodmanTestIntegration) Podman(args []string) *PodmanSessionIntegration {
-	podmanSession := p.PodmanBase(args)
+	podmanSession := p.PodmanBase(args, false)
+	return &PodmanSessionIntegration{podmanSession}
+}
+
+// PodmanNoCache calls the podman command with no configured imagecache
+func (p *PodmanTestIntegration) PodmanNoCache(args []string) *PodmanSessionIntegration {
+	podmanSession := p.PodmanBase(args, true)
 	return &PodmanSessionIntegration{podmanSession}
 }
 
 // PodmanAsUser is the exec call to podman on the filesystem with the specified uid/gid and environment
 func (p *PodmanTestIntegration) PodmanAsUser(args []string, uid, gid uint32, cwd string, env []string) *PodmanSessionIntegration {
-	podmanSession := p.PodmanAsUserBase(args, uid, gid, cwd, env)
+	podmanSession := p.PodmanAsUserBase(args, uid, gid, cwd, env, false)
 	return &PodmanSessionIntegration{podmanSession}
 }
 
@@ -75,9 +81,40 @@ func (p *PodmanTestIntegration) RestoreArtifact(image string) error {
 	fmt.Printf("Restoring %s...\n", image)
 	dest := strings.Split(image, "/")
 	destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1))
-	restore := p.Podman([]string{"load", "-q", "-i", destName})
+	restore := p.PodmanNoCache([]string{"load", "-q", "-i", destName})
 	restore.Wait(90)
 	return nil
 }
+
+// RestoreArtifactToCache populates the imagecache from tarballs that were cached earlier
+func (p *PodmanTestIntegration) RestoreArtifactToCache(image string) error {
+	fmt.Printf("Restoring %s...\n", image)
+	dest := strings.Split(image, "/")
+	destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1))
+
+	p.CrioRoot = p.ImageCacheDir
+	restore := p.PodmanNoCache([]string{"load", "-q", "-i", destName})
+	restore.WaitWithDefaultTimeout()
+	return nil
+}
+
 func (p *PodmanTestIntegration) StopVarlink()     {}
 func (p *PodmanTestIntegration) DelayForVarlink() {}
+
+func populateCache(podman *PodmanTestIntegration) {
+	for _, image := range CACHE_IMAGES {
+		podman.RestoreArtifactToCache(image)
+	}
+}
+
+func removeCache() {
+	// Remove cache dirs
+	if err := os.RemoveAll(ImageCacheDir); err != nil {
+		fmt.Printf("%q\n", err)
+	}
+}
+
+// SeedImages is a no-op for localized testing
+func (p *PodmanTestIntegration) SeedImages() error {
+	return nil
+}
diff --git a/test/e2e/load_test.go b/test/e2e/load_test.go
index 0e193640e0..9209e17704 100644
--- a/test/e2e/load_test.go
+++ b/test/e2e/load_test.go
@@ -3,6 +3,7 @@
 package integration
 
 import (
+	"fmt"
 	"os"
 	"path/filepath"
 
@@ -38,7 +39,11 @@ var _ = Describe("Podman load", func() {
 	It("podman load input flag", func() {
 		outfile := filepath.Join(podmanTest.TempDir, "alpine.tar")
 
-		save := podmanTest.Podman([]string{"save", "-o", outfile, ALPINE})
+		images := podmanTest.PodmanNoCache([]string{"images"})
+		images.WaitWithDefaultTimeout()
+		fmt.Println(images.OutputToStringArray())
+
+		save := podmanTest.PodmanNoCache([]string{"save", "-o", outfile, ALPINE})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Equal(0))
 
@@ -46,7 +51,7 @@ var _ = Describe("Podman load", func() {
 		rmi.WaitWithDefaultTimeout()
 		Expect(rmi.ExitCode()).To(Equal(0))
 
-		result := podmanTest.Podman([]string{"load", "-i", outfile})
+		result := podmanTest.PodmanNoCache([]string{"load", "-i", outfile})
 		result.WaitWithDefaultTimeout()
 		Expect(result.ExitCode()).To(Equal(0))
 	})
@@ -54,7 +59,7 @@ var _ = Describe("Podman load", func() {
 	It("podman load compressed tar file", func() {
 		outfile := filepath.Join(podmanTest.TempDir, "alpine.tar")
 
-		save := podmanTest.Podman([]string{"save", "-o", outfile, ALPINE})
+		save := podmanTest.PodmanNoCache([]string{"save", "-o", outfile, ALPINE})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Equal(0))
 
@@ -62,11 +67,11 @@ var _ = Describe("Podman load", func() {
 		Expect(compress.ExitCode()).To(Equal(0))
 		outfile = outfile + ".gz"
 
-		rmi := podmanTest.Podman([]string{"rmi", ALPINE})
+		rmi := podmanTest.PodmanNoCache([]string{"rmi", ALPINE})
 		rmi.WaitWithDefaultTimeout()
 		Expect(rmi.ExitCode()).To(Equal(0))
 
-		result := podmanTest.Podman([]string{"load", "-i", outfile})
+		result := podmanTest.PodmanNoCache([]string{"load", "-i", outfile})
 		result.WaitWithDefaultTimeout()
 		Expect(result.ExitCode()).To(Equal(0))
 	})
@@ -74,15 +79,15 @@ var _ = Describe("Podman load", func() {
 	It("podman load oci-archive image", func() {
 		outfile := filepath.Join(podmanTest.TempDir, "alpine.tar")
 
-		save := podmanTest.Podman([]string{"save", "-o", outfile, "--format", "oci-archive", ALPINE})
+		save := podmanTest.PodmanNoCache([]string{"save", "-o", outfile, "--format", "oci-archive", ALPINE})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Equal(0))
 
-		rmi := podmanTest.Podman([]string{"rmi", ALPINE})
+		rmi := podmanTest.PodmanNoCache([]string{"rmi", ALPINE})
 		rmi.WaitWithDefaultTimeout()
 		Expect(rmi.ExitCode()).To(Equal(0))
 
-		result := podmanTest.Podman([]string{"load", "-i", outfile})
+		result := podmanTest.PodmanNoCache([]string{"load", "-i", outfile})
 		result.WaitWithDefaultTimeout()
 		Expect(result.ExitCode()).To(Equal(0))
 	})
@@ -90,15 +95,15 @@ var _ = Describe("Podman load", func() {
 	It("podman load oci-archive with signature", func() {
 		outfile := filepath.Join(podmanTest.TempDir, "alpine.tar")
 
-		save := podmanTest.Podman([]string{"save", "-o", outfile, "--format", "oci-archive", ALPINE})
+		save := podmanTest.PodmanNoCache([]string{"save", "-o", outfile, "--format", "oci-archive", ALPINE})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Equal(0))
 
-		rmi := podmanTest.Podman([]string{"rmi", ALPINE})
+		rmi := podmanTest.PodmanNoCache([]string{"rmi", ALPINE})
 		rmi.WaitWithDefaultTimeout()
 		Expect(rmi.ExitCode()).To(Equal(0))
 
-		result := podmanTest.Podman([]string{"load", "--signature-policy", "/etc/containers/policy.json", "-i", outfile})
+		result := podmanTest.PodmanNoCache([]string{"load", "--signature-policy", "/etc/containers/policy.json", "-i", outfile})
 		result.WaitWithDefaultTimeout()
 		Expect(result.ExitCode()).To(Equal(0))
 	})
@@ -106,15 +111,15 @@ var _ = Describe("Podman load", func() {
 	It("podman load with quiet flag", func() {
 		outfile := filepath.Join(podmanTest.TempDir, "alpine.tar")
 
-		save := podmanTest.Podman([]string{"save", "-o", outfile, ALPINE})
+		save := podmanTest.PodmanNoCache([]string{"save", "-o", outfile, ALPINE})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Equal(0))
 
-		rmi := podmanTest.Podman([]string{"rmi", ALPINE})
+		rmi := podmanTest.PodmanNoCache([]string{"rmi", ALPINE})
 		rmi.WaitWithDefaultTimeout()
 		Expect(rmi.ExitCode()).To(Equal(0))
 
-		result := podmanTest.Podman([]string{"load", "-q", "-i", outfile})
+		result := podmanTest.PodmanNoCache([]string{"load", "-q", "-i", outfile})
 		result.WaitWithDefaultTimeout()
 		Expect(result.ExitCode()).To(Equal(0))
 	})
@@ -122,7 +127,7 @@ var _ = Describe("Podman load", func() {
 	It("podman load directory", func() {
 		outdir := filepath.Join(podmanTest.TempDir, "alpine")
 
-		save := podmanTest.Podman([]string{"save", "--format", "oci-dir", "-o", outdir, ALPINE})
+		save := podmanTest.PodmanNoCache([]string{"save", "--format", "oci-dir", "-o", outdir, ALPINE})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Equal(0))
 
@@ -136,7 +141,7 @@ var _ = Describe("Podman load", func() {
 	})
 
 	It("podman load bogus file", func() {
-		save := podmanTest.Podman([]string{"load", "-i", "foobar.tar"})
+		save := podmanTest.PodmanNoCache([]string{"load", "-i", "foobar.tar"})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).ToNot(Equal(0))
 	})
@@ -148,75 +153,75 @@ var _ = Describe("Podman load", func() {
 		outfile := filepath.Join(podmanTest.TempDir, "alpine.tar")
 		alpVersion := "docker.io/library/alpine:3.2"
 
-		pull := podmanTest.Podman([]string{"pull", alpVersion})
+		pull := podmanTest.PodmanNoCache([]string{"pull", alpVersion})
 		pull.WaitWithDefaultTimeout()
 		Expect(pull.ExitCode()).To(Equal(0))
 
-		save := podmanTest.Podman([]string{"save", "-o", outfile, ALPINE, alpVersion})
+		save := podmanTest.PodmanNoCache([]string{"save", "-o", outfile, ALPINE, alpVersion})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Equal(0))
 
-		rmi := podmanTest.Podman([]string{"rmi", ALPINE, alpVersion})
+		rmi := podmanTest.PodmanNoCache([]string{"rmi", ALPINE, alpVersion})
 		rmi.WaitWithDefaultTimeout()
 		Expect(rmi.ExitCode()).To(Equal(0))
 
-		result := podmanTest.Podman([]string{"load", "-i", outfile})
+		result := podmanTest.PodmanNoCache([]string{"load", "-i", outfile})
 		result.WaitWithDefaultTimeout()
 		Expect(result.ExitCode()).To(Equal(0))
 
-		inspect := podmanTest.Podman([]string{"inspect", ALPINE})
+		inspect := podmanTest.PodmanNoCache([]string{"inspect", ALPINE})
 		inspect.WaitWithDefaultTimeout()
 		Expect(result.ExitCode()).To(Equal(0))
-		inspect = podmanTest.Podman([]string{"inspect", alpVersion})
+		inspect = podmanTest.PodmanNoCache([]string{"inspect", alpVersion})
 		inspect.WaitWithDefaultTimeout()
 		Expect(result.ExitCode()).To(Equal(0))
 	})
 
 	It("podman load localhost registry from scratch", func() {
 		outfile := filepath.Join(podmanTest.TempDir, "load_test.tar.gz")
-		setup := podmanTest.Podman([]string{"tag", ALPINE, "hello:world"})
+		setup := podmanTest.PodmanNoCache([]string{"tag", ALPINE, "hello:world"})
 		setup.WaitWithDefaultTimeout()
 		Expect(setup.ExitCode()).To(Equal(0))
 
-		setup = podmanTest.Podman([]string{"save", "-o", outfile, "--format", "oci-archive", "hello:world"})
+		setup = podmanTest.PodmanNoCache([]string{"save", "-o", outfile, "--format", "oci-archive", "hello:world"})
 		setup.WaitWithDefaultTimeout()
 		Expect(setup.ExitCode()).To(Equal(0))
 
-		setup = podmanTest.Podman([]string{"rmi", "hello:world"})
+		setup = podmanTest.PodmanNoCache([]string{"rmi", "hello:world"})
 		setup.WaitWithDefaultTimeout()
 		Expect(setup.ExitCode()).To(Equal(0))
 
-		load := podmanTest.Podman([]string{"load", "-i", outfile})
+		load := podmanTest.PodmanNoCache([]string{"load", "-i", outfile})
 		load.WaitWithDefaultTimeout()
 		Expect(load.ExitCode()).To(Equal(0))
 
-		result := podmanTest.Podman([]string{"images", "hello:world"})
+		result := podmanTest.PodmanNoCache([]string{"images", "hello:world"})
 		result.WaitWithDefaultTimeout()
 		Expect(result.LineInOutputContains("docker")).To(Not(BeTrue()))
 		Expect(result.LineInOutputContains("localhost")).To(BeTrue())
 	})
 
 	It("podman load localhost registry from scratch and :latest", func() {
+		podmanTest.RestoreArtifact(fedoraMinimal)
 		outfile := filepath.Join(podmanTest.TempDir, "load_test.tar.gz")
-		podmanTest.RestoreArtifact("fedora-minimal:latest")
 
-		setup := podmanTest.Podman([]string{"tag", "fedora-minimal", "hello"})
+		setup := podmanTest.PodmanNoCache([]string{"tag", "fedora-minimal", "hello"})
 		setup.WaitWithDefaultTimeout()
 		Expect(setup.ExitCode()).To(Equal(0))
 
-		setup = podmanTest.Podman([]string{"save", "-o", outfile, "--format", "oci-archive", "hello"})
+		setup = podmanTest.PodmanNoCache([]string{"save", "-o", outfile, "--format", "oci-archive", "hello"})
 		setup.WaitWithDefaultTimeout()
 		Expect(setup.ExitCode()).To(Equal(0))
 
-		setup = podmanTest.Podman([]string{"rmi", "hello"})
+		setup = podmanTest.PodmanNoCache([]string{"rmi", "hello"})
 		setup.WaitWithDefaultTimeout()
 		Expect(setup.ExitCode()).To(Equal(0))
 
-		load := podmanTest.Podman([]string{"load", "-i", outfile})
+		load := podmanTest.PodmanNoCache([]string{"load", "-i", outfile})
 		load.WaitWithDefaultTimeout()
 		Expect(load.ExitCode()).To(Equal(0))
 
-		result := podmanTest.Podman([]string{"images", "hello:latest"})
+		result := podmanTest.PodmanNoCache([]string{"images", "hello:latest"})
 		result.WaitWithDefaultTimeout()
 		Expect(result.LineInOutputContains("docker")).To(Not(BeTrue()))
 		Expect(result.LineInOutputContains("localhost")).To(BeTrue())
@@ -225,23 +230,23 @@ var _ = Describe("Podman load", func() {
 	It("podman load localhost registry from dir", func() {
 		outfile := filepath.Join(podmanTest.TempDir, "load")
 
-		setup := podmanTest.Podman([]string{"tag", BB, "hello:world"})
+		setup := podmanTest.PodmanNoCache([]string{"tag", BB, "hello:world"})
 		setup.WaitWithDefaultTimeout()
 		Expect(setup.ExitCode()).To(Equal(0))
 
-		setup = podmanTest.Podman([]string{"save", "-o", outfile, "--format", "oci-dir", "hello:world"})
+		setup = podmanTest.PodmanNoCache([]string{"save", "-o", outfile, "--format", "oci-dir", "hello:world"})
 		setup.WaitWithDefaultTimeout()
 		Expect(setup.ExitCode()).To(Equal(0))
 
-		setup = podmanTest.Podman([]string{"rmi", "hello:world"})
+		setup = podmanTest.PodmanNoCache([]string{"rmi", "hello:world"})
 		setup.WaitWithDefaultTimeout()
 		Expect(setup.ExitCode()).To(Equal(0))
 
-		load := podmanTest.Podman([]string{"load", "-i", outfile})
+		load := podmanTest.PodmanNoCache([]string{"load", "-i", outfile})
 		load.WaitWithDefaultTimeout()
 		Expect(load.ExitCode()).To(Equal(0))
 
-		result := podmanTest.Podman([]string{"images", "load:latest"})
+		result := podmanTest.PodmanNoCache([]string{"images", "load:latest"})
 		result.WaitWithDefaultTimeout()
 		Expect(result.LineInOutputContains("docker")).To(Not(BeTrue()))
 		Expect(result.LineInOutputContains("localhost")).To(BeTrue())
@@ -250,17 +255,17 @@ var _ = Describe("Podman load", func() {
 	It("podman load xz compressed image", func() {
 		outfile := filepath.Join(podmanTest.TempDir, "bb.tar")
 
-		save := podmanTest.Podman([]string{"save", "-o", outfile, BB})
+		save := podmanTest.PodmanNoCache([]string{"save", "-o", outfile, BB})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Equal(0))
 		session := SystemExec("xz", []string{outfile})
 		Expect(session.ExitCode()).To(Equal(0))
 
-		rmi := podmanTest.Podman([]string{"rmi", BB})
+		rmi := podmanTest.PodmanNoCache([]string{"rmi", BB})
 		rmi.WaitWithDefaultTimeout()
 		Expect(rmi.ExitCode()).To(Equal(0))
 
-		result := podmanTest.Podman([]string{"load", "-i", outfile + ".xz"})
+		result := podmanTest.PodmanNoCache([]string{"load", "-i", outfile + ".xz"})
 		result.WaitWithDefaultTimeout()
 		Expect(result.ExitCode()).To(Equal(0))
 	})
diff --git a/test/e2e/logs_test.go b/test/e2e/logs_test.go
index 20d02efcb5..cc50c4d952 100644
--- a/test/e2e/logs_test.go
+++ b/test/e2e/logs_test.go
@@ -23,7 +23,7 @@ var _ = Describe("Podman logs", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/mount_test.go b/test/e2e/mount_test.go
index b361e0057d..61abdf6fc0 100644
--- a/test/e2e/mount_test.go
+++ b/test/e2e/mount_test.go
@@ -24,7 +24,7 @@ var _ = Describe("Podman mount", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/namespace_test.go b/test/e2e/namespace_test.go
index 28d050be3c..88b48cb06d 100644
--- a/test/e2e/namespace_test.go
+++ b/test/e2e/namespace_test.go
@@ -24,7 +24,7 @@ var _ = Describe("Podman namespaces", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/pause_test.go b/test/e2e/pause_test.go
index c47189a0ec..01fb6d91b4 100644
--- a/test/e2e/pause_test.go
+++ b/test/e2e/pause_test.go
@@ -27,7 +27,7 @@ var _ = Describe("Podman pause", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
@@ -249,7 +249,6 @@ var _ = Describe("Podman pause", func() {
 	})
 
 	It("Pause a bunch of running containers", func() {
-		podmanTest.RestoreArtifact(nginx)
 		for i := 0; i < 3; i++ {
 			name := fmt.Sprintf("test%d", i)
 			run := podmanTest.Podman([]string{"run", "-dt", "--name", name, nginx})
@@ -277,7 +276,6 @@ var _ = Describe("Podman pause", func() {
 	})
 
 	It("Unpause a bunch of running containers", func() {
-		podmanTest.RestoreArtifact(nginx)
 		for i := 0; i < 3; i++ {
 			name := fmt.Sprintf("test%d", i)
 			run := podmanTest.Podman([]string{"run", "-dt", "--name", name, nginx})
diff --git a/test/e2e/pod_create_test.go b/test/e2e/pod_create_test.go
index 84966f77b0..2efa361416 100644
--- a/test/e2e/pod_create_test.go
+++ b/test/e2e/pod_create_test.go
@@ -22,7 +22,7 @@ var _ = Describe("Podman pod create", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/pod_infra_container_test.go b/test/e2e/pod_infra_container_test.go
index 82f35999cc..c8763de9fc 100644
--- a/test/e2e/pod_infra_container_test.go
+++ b/test/e2e/pod_infra_container_test.go
@@ -25,8 +25,7 @@ var _ = Describe("Podman pod create", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
-		podmanTest.RestoreArtifact(infra)
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
@@ -113,12 +112,10 @@ var _ = Describe("Podman pod create", func() {
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		podmanTest.RestoreArtifact(nginx)
 		session = podmanTest.Podman([]string{"run", "-d", "--pod", podID, nginx})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		podmanTest.RestoreArtifact(fedoraMinimal)
 		session = podmanTest.Podman([]string{"run", "--pod", podID, fedoraMinimal, "curl", "localhost:80"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
@@ -138,7 +135,6 @@ var _ = Describe("Podman pod create", func() {
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		podmanTest.RestoreArtifact(fedoraMinimal)
 		session = podmanTest.Podman([]string{"run", "--pod", podID, fedoraMinimal, "/bin/sh", "-c", "'touch /dev/shm/hi'"})
 		session.WaitWithDefaultTimeout()
 		if session.ExitCode() != 0 {
@@ -216,7 +212,6 @@ var _ = Describe("Podman pod create", func() {
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		podmanTest.RestoreArtifact(nginx)
 		session = podmanTest.Podman([]string{"run", "-d", "--pod", podID, nginx})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
diff --git a/test/e2e/pod_inspect_test.go b/test/e2e/pod_inspect_test.go
index d1a0231538..488dd1685a 100644
--- a/test/e2e/pod_inspect_test.go
+++ b/test/e2e/pod_inspect_test.go
@@ -22,7 +22,7 @@ var _ = Describe("Podman pod inspect", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/pod_kill_test.go b/test/e2e/pod_kill_test.go
index 23a8ea97ee..7cf67bbfc2 100644
--- a/test/e2e/pod_kill_test.go
+++ b/test/e2e/pod_kill_test.go
@@ -23,7 +23,7 @@ var _ = Describe("Podman pod kill", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/pod_pause_test.go b/test/e2e/pod_pause_test.go
index ab828853bb..619ee6f122 100644
--- a/test/e2e/pod_pause_test.go
+++ b/test/e2e/pod_pause_test.go
@@ -25,7 +25,7 @@ var _ = Describe("Podman pod pause", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/pod_pod_namespaces.go b/test/e2e/pod_pod_namespaces.go
index 9d6321c0e6..83c877f5a4 100644
--- a/test/e2e/pod_pod_namespaces.go
+++ b/test/e2e/pod_pod_namespaces.go
@@ -25,8 +25,7 @@ var _ = Describe("Podman pod create", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
-		podmanTest.RestoreArtifact(infra)
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/pod_prune_test.go b/test/e2e/pod_prune_test.go
index 8a4ba23990..da0d425cb5 100644
--- a/test/e2e/pod_prune_test.go
+++ b/test/e2e/pod_prune_test.go
@@ -22,7 +22,7 @@ var _ = Describe("Podman pod prune", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/pod_ps_test.go b/test/e2e/pod_ps_test.go
index 8513c6c2ef..6d5873caaa 100644
--- a/test/e2e/pod_ps_test.go
+++ b/test/e2e/pod_ps_test.go
@@ -24,7 +24,7 @@ var _ = Describe("Podman ps", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/pod_restart_test.go b/test/e2e/pod_restart_test.go
index 7b19ecc949..691fe5f0c2 100644
--- a/test/e2e/pod_restart_test.go
+++ b/test/e2e/pod_restart_test.go
@@ -22,7 +22,7 @@ var _ = Describe("Podman pod restart", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/pod_rm_test.go b/test/e2e/pod_rm_test.go
index 7417a12983..0d3f47f302 100644
--- a/test/e2e/pod_rm_test.go
+++ b/test/e2e/pod_rm_test.go
@@ -23,7 +23,7 @@ var _ = Describe("Podman pod rm", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/pod_start_test.go b/test/e2e/pod_start_test.go
index 967fbc2da5..2722cb5b3b 100644
--- a/test/e2e/pod_start_test.go
+++ b/test/e2e/pod_start_test.go
@@ -22,7 +22,7 @@ var _ = Describe("Podman pod start", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/pod_stats_test.go b/test/e2e/pod_stats_test.go
index 6018b4494b..01176f97cc 100644
--- a/test/e2e/pod_stats_test.go
+++ b/test/e2e/pod_stats_test.go
@@ -25,7 +25,7 @@ var _ = Describe("Podman pod stats", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/pod_stop_test.go b/test/e2e/pod_stop_test.go
index 9fd9e3ef43..361a63a7fa 100644
--- a/test/e2e/pod_stop_test.go
+++ b/test/e2e/pod_stop_test.go
@@ -22,7 +22,7 @@ var _ = Describe("Podman pod stop", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/pod_top_test.go b/test/e2e/pod_top_test.go
index 420e4aca9a..c313b06750 100644
--- a/test/e2e/pod_top_test.go
+++ b/test/e2e/pod_top_test.go
@@ -26,7 +26,7 @@ var _ = Describe("Podman top", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/port_test.go b/test/e2e/port_test.go
index 7cf3e16bfc..e451183614 100644
--- a/test/e2e/port_test.go
+++ b/test/e2e/port_test.go
@@ -26,7 +26,7 @@ var _ = Describe("Podman port", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
@@ -49,7 +49,6 @@ var _ = Describe("Podman port", func() {
 	})
 
 	It("podman port  -l nginx", func() {
-		podmanTest.RestoreArtifact(nginx)
 		session := podmanTest.Podman([]string{"run", "-dt", "-P", nginx})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
@@ -62,7 +61,6 @@ var _ = Describe("Podman port", func() {
 	})
 
 	It("podman container port  -l nginx", func() {
-		podmanTest.RestoreArtifact(nginx)
 		session := podmanTest.Podman([]string{"container", "run", "-dt", "-P", nginx})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
@@ -75,7 +73,6 @@ var _ = Describe("Podman port", func() {
 	})
 
 	It("podman port -l port nginx", func() {
-		podmanTest.RestoreArtifact(nginx)
 		session := podmanTest.Podman([]string{"run", "-dt", "-P", nginx})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
@@ -88,7 +85,6 @@ var _ = Describe("Podman port", func() {
 	})
 
 	It("podman port -a nginx", func() {
-		podmanTest.RestoreArtifact(nginx)
 		session := podmanTest.Podman([]string{"run", "-dt", "-P", nginx})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
diff --git a/test/e2e/prune_test.go b/test/e2e/prune_test.go
index 377c9f5e16..df0525a79f 100644
--- a/test/e2e/prune_test.go
+++ b/test/e2e/prune_test.go
@@ -28,7 +28,7 @@ var _ = Describe("Podman prune", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
@@ -77,11 +77,12 @@ var _ = Describe("Podman prune", func() {
 	})
 
 	It("podman image prune unused images", func() {
-		prune := podmanTest.Podman([]string{"image", "prune", "-a"})
+		podmanTest.RestoreAllArtifacts()
+		prune := podmanTest.PodmanNoCache([]string{"image", "prune", "-a"})
 		prune.WaitWithDefaultTimeout()
 		Expect(prune.ExitCode()).To(Equal(0))
 
-		images := podmanTest.Podman([]string{"images", "-aq"})
+		images := podmanTest.PodmanNoCache([]string{"images", "-aq"})
 		images.WaitWithDefaultTimeout()
 		// all images are unused, so they all should be deleted!
 		Expect(len(images.OutputToStringArray())).To(Equal(0))
@@ -89,12 +90,13 @@ var _ = Describe("Podman prune", func() {
 
 	It("podman system image prune unused images", func() {
 		SkipIfRemote()
+		podmanTest.RestoreAllArtifacts()
 		podmanTest.BuildImage(pruneImage, "alpine_bash:latest", "true")
-		prune := podmanTest.Podman([]string{"system", "prune", "-a", "--force"})
+		prune := podmanTest.PodmanNoCache([]string{"system", "prune", "-a", "--force"})
 		prune.WaitWithDefaultTimeout()
 		Expect(prune.ExitCode()).To(Equal(0))
 
-		images := podmanTest.Podman([]string{"images", "-aq"})
+		images := podmanTest.PodmanNoCache([]string{"images", "-aq"})
 		images.WaitWithDefaultTimeout()
 		// all images are unused, so they all should be deleted!
 		Expect(len(images.OutputToStringArray())).To(Equal(0))
diff --git a/test/e2e/ps_test.go b/test/e2e/ps_test.go
index 7edb350f38..b0a28501a0 100644
--- a/test/e2e/ps_test.go
+++ b/test/e2e/ps_test.go
@@ -27,7 +27,7 @@ var _ = Describe("Podman ps", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/pull_test.go b/test/e2e/pull_test.go
index 4e4e80d56b..d6e7b44d1b 100644
--- a/test/e2e/pull_test.go
+++ b/test/e2e/pull_test.go
@@ -28,7 +28,6 @@ var _ = Describe("Podman pull", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
 	})
 
 	AfterEach(func() {
@@ -39,132 +38,135 @@ var _ = Describe("Podman pull", func() {
 	})
 
 	It("podman pull from docker a not existing image", func() {
-		session := podmanTest.Podman([]string{"pull", "ibetthisdoesntexistthere:foo"})
+		session := podmanTest.PodmanNoCache([]string{"pull", "ibetthisdoesntexistthere:foo"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Not(Equal(0)))
 	})
 
 	It("podman pull from docker with tag", func() {
-		session := podmanTest.Podman([]string{"pull", "busybox:glibc"})
+		session := podmanTest.PodmanNoCache([]string{"pull", "busybox:glibc"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"rmi", "busybox:glibc"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "busybox:glibc"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 	})
 
 	It("podman pull from docker without tag", func() {
-		session := podmanTest.Podman([]string{"pull", "busybox"})
+		session := podmanTest.PodmanNoCache([]string{"pull", "busybox"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"rmi", "busybox"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "busybox"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 	})
 
 	It("podman pull from alternate registry with tag", func() {
-		session := podmanTest.Podman([]string{"pull", nginx})
+		session := podmanTest.PodmanNoCache([]string{"pull", nginx})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"rmi", nginx})
+		session = podmanTest.PodmanNoCache([]string{"rmi", nginx})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 	})
 
 	It("podman pull from alternate registry without tag", func() {
-		session := podmanTest.Podman([]string{"pull", "quay.io/libpod/alpine_nginx"})
+		session := podmanTest.PodmanNoCache([]string{"pull", "quay.io/libpod/alpine_nginx"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"rmi", "quay.io/libpod/alpine_nginx"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "quay.io/libpod/alpine_nginx"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 	})
 
 	It("podman pull by digest", func() {
-		session := podmanTest.Podman([]string{"pull", "alpine@sha256:1072e499f3f655a032e88542330cf75b02e7bdf673278f701d7ba61629ee3ebe"})
+		session := podmanTest.PodmanNoCache([]string{"pull", "alpine@sha256:1072e499f3f655a032e88542330cf75b02e7bdf673278f701d7ba61629ee3ebe"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"rmi", "alpine:none"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "alpine:none"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 	})
 
 	It("podman pull bogus image", func() {
-		session := podmanTest.Podman([]string{"pull", "umohnani/get-started"})
+		session := podmanTest.PodmanNoCache([]string{"pull", "umohnani/get-started"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Not(Equal(0)))
 	})
 
 	It("podman pull from docker-archive", func() {
+		podmanTest.RestoreArtifact(ALPINE)
 		tarfn := filepath.Join(podmanTest.TempDir, "alp.tar")
-		session := podmanTest.Podman([]string{"save", "-o", tarfn, "alpine"})
+		session := podmanTest.PodmanNoCache([]string{"save", "-o", tarfn, "alpine"})
 		session.WaitWithDefaultTimeout()
 
 		Expect(session.ExitCode()).To(Equal(0))
-		session = podmanTest.Podman([]string{"rmi", "alpine"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "alpine"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
-		session = podmanTest.Podman([]string{"pull", fmt.Sprintf("docker-archive:%s", tarfn)})
+		session = podmanTest.PodmanNoCache([]string{"pull", fmt.Sprintf("docker-archive:%s", tarfn)})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
-		session = podmanTest.Podman([]string{"rmi", "alpine"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "alpine"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 	})
 
 	It("podman pull from oci-archive", func() {
+		podmanTest.RestoreArtifact(ALPINE)
 		tarfn := filepath.Join(podmanTest.TempDir, "oci-alp.tar")
-		session := podmanTest.Podman([]string{"save", "--format", "oci-archive", "-o", tarfn, "alpine"})
+		session := podmanTest.PodmanNoCache([]string{"save", "--format", "oci-archive", "-o", tarfn, "alpine"})
 		session.WaitWithDefaultTimeout()
 
 		Expect(session.ExitCode()).To(Equal(0))
-		session = podmanTest.Podman([]string{"rmi", "alpine"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "alpine"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
-		session = podmanTest.Podman([]string{"pull", fmt.Sprintf("oci-archive:%s", tarfn)})
+		session = podmanTest.PodmanNoCache([]string{"pull", fmt.Sprintf("oci-archive:%s", tarfn)})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
-		session = podmanTest.Podman([]string{"rmi", "alpine"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "alpine"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 	})
 
 	It("podman pull from local directory", func() {
+		podmanTest.RestoreArtifact(ALPINE)
 		dirpath := filepath.Join(podmanTest.TempDir, "alpine")
 		os.MkdirAll(dirpath, os.ModePerm)
 		imgPath := fmt.Sprintf("dir:%s", dirpath)
 
-		session := podmanTest.Podman([]string{"push", "alpine", imgPath})
+		session := podmanTest.PodmanNoCache([]string{"push", "alpine", imgPath})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
-		session = podmanTest.Podman([]string{"rmi", "alpine"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "alpine"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
-		session = podmanTest.Podman([]string{"pull", imgPath})
+		session = podmanTest.PodmanNoCache([]string{"pull", imgPath})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
-		session = podmanTest.Podman([]string{"rmi", "alpine"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "alpine"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 	})
 
 	It("podman pull check quiet", func() {
 		podmanTest.RestoreArtifact(ALPINE)
-		setup := podmanTest.Podman([]string{"images", ALPINE, "-q", "--no-trunc"})
+		setup := podmanTest.PodmanNoCache([]string{"images", ALPINE, "-q", "--no-trunc"})
 		setup.WaitWithDefaultTimeout()
 		Expect(setup.ExitCode()).To(Equal(0))
 		shortImageId := strings.Split(setup.OutputToString(), ":")[1]
 
-		rmi := podmanTest.Podman([]string{"rmi", ALPINE})
+		rmi := podmanTest.PodmanNoCache([]string{"rmi", ALPINE})
 		rmi.WaitWithDefaultTimeout()
 		Expect(rmi.ExitCode()).To(Equal(0))
 
-		pull := podmanTest.Podman([]string{"pull", "-q", ALPINE})
+		pull := podmanTest.PodmanNoCache([]string{"pull", "-q", ALPINE})
 		pull.WaitWithDefaultTimeout()
 		Expect(pull.ExitCode()).To(Equal(0))
 
@@ -172,17 +174,17 @@ var _ = Describe("Podman pull", func() {
 	})
 
 	It("podman pull check all tags", func() {
-		session := podmanTest.Podman([]string{"pull", "--all-tags", "alpine"})
+		session := podmanTest.PodmanNoCache([]string{"pull", "--all-tags", "alpine"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		Expect(session.LineInOuputStartsWith("Pulled Images:")).To(BeTrue())
 
-		session = podmanTest.Podman([]string{"images"})
+		session = podmanTest.PodmanNoCache([]string{"images"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		Expect(len(session.OutputToStringArray())).To(BeNumerically(">", 4))
 
-		rmi := podmanTest.Podman([]string{"rmi", "-a", "-f"})
+		rmi := podmanTest.PodmanNoCache([]string{"rmi", "-a", "-f"})
 		rmi.WaitWithDefaultTimeout()
 		Expect(rmi.ExitCode()).To(Equal(0))
 	})
diff --git a/test/e2e/push_test.go b/test/e2e/push_test.go
index 0090674826..de24168685 100644
--- a/test/e2e/push_test.go
+++ b/test/e2e/push_test.go
@@ -38,22 +38,18 @@ var _ = Describe("Podman push", func() {
 	})
 
 	It("podman push to containers/storage", func() {
-		session := podmanTest.Podman([]string{"push", ALPINE, "containers-storage:busybox:test"})
+		session := podmanTest.PodmanNoCache([]string{"push", ALPINE, "containers-storage:busybox:test"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"rmi", ALPINE})
-		session.WaitWithDefaultTimeout()
-		Expect(session.ExitCode()).To(Equal(0))
-
-		session = podmanTest.Podman([]string{"rmi", "busybox:test"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", ALPINE})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 	})
 
 	It("podman push to dir", func() {
 		bbdir := filepath.Join(podmanTest.TempDir, "busybox")
-		session := podmanTest.Podman([]string{"push", "--remove-signatures", ALPINE,
+		session := podmanTest.PodmanNoCache([]string{"push", "--remove-signatures", ALPINE,
 			fmt.Sprintf("dir:%s", bbdir)})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
@@ -65,8 +61,7 @@ var _ = Describe("Podman push", func() {
 		}
 		lock := GetPortLock("5000")
 		defer lock.Unlock()
-		podmanTest.RestoreArtifact(registry)
-		session := podmanTest.Podman([]string{"run", "-d", "--name", "registry", "-p", "5000:5000", registry, "/entrypoint.sh", "/etc/docker/registry/config.yml"})
+		session := podmanTest.PodmanNoCache([]string{"run", "-d", "--name", "registry", "-p", "5000:5000", registry, "/entrypoint.sh", "/etc/docker/registry/config.yml"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
@@ -74,7 +69,7 @@ var _ = Describe("Podman push", func() {
 			Skip("Can not start docker registry.")
 		}
 
-		push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, "localhost:5000/my-alpine"})
+		push := podmanTest.PodmanNoCache([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, "localhost:5000/my-alpine"})
 		push.WaitWithDefaultTimeout()
 		Expect(push.ExitCode()).To(Equal(0))
 	})
@@ -106,8 +101,7 @@ var _ = Describe("Podman push", func() {
 		}
 		lock := GetPortLock("5000")
 		defer lock.Unlock()
-		podmanTest.RestoreArtifact(registry)
-		session := podmanTest.Podman([]string{"run", "--entrypoint", "htpasswd", registry, "-Bbn", "podmantest", "test"})
+		session := podmanTest.PodmanNoCache([]string{"run", "--entrypoint", "htpasswd", registry, "-Bbn", "podmantest", "test"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
@@ -117,7 +111,7 @@ var _ = Describe("Podman push", func() {
 		f.WriteString(session.OutputToString())
 		f.Sync()
 
-		session = podmanTest.Podman([]string{"run", "-d", "-p", "5000:5000", "--name", "registry", "-v",
+		session = podmanTest.PodmanNoCache([]string{"run", "-d", "-p", "5000:5000", "--name", "registry", "-v",
 			strings.Join([]string{authPath, "/auth"}, ":"), "-e", "REGISTRY_AUTH=htpasswd", "-e",
 			"REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm", "-e", "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd",
 			"-v", strings.Join([]string{certPath, "/certs"}, ":"), "-e", "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt",
@@ -129,36 +123,36 @@ var _ = Describe("Podman push", func() {
 			Skip("Can not start docker registry.")
 		}
 
-		session = podmanTest.Podman([]string{"logs", "registry"})
+		session = podmanTest.PodmanNoCache([]string{"logs", "registry"})
 		session.WaitWithDefaultTimeout()
 
-		push := podmanTest.Podman([]string{"push", "--creds=podmantest:test", ALPINE, "localhost:5000/tlstest"})
+		push := podmanTest.PodmanNoCache([]string{"push", "--creds=podmantest:test", ALPINE, "localhost:5000/tlstest"})
 		push.WaitWithDefaultTimeout()
 		Expect(push.ExitCode()).To(Not(Equal(0)))
 
-		push = podmanTest.Podman([]string{"push", "--creds=podmantest:test", "--tls-verify=false", ALPINE, "localhost:5000/tlstest"})
+		push = podmanTest.PodmanNoCache([]string{"push", "--creds=podmantest:test", "--tls-verify=false", ALPINE, "localhost:5000/tlstest"})
 		push.WaitWithDefaultTimeout()
 		Expect(push.ExitCode()).To(Equal(0))
 
 		setup := SystemExec("cp", []string{filepath.Join(certPath, "domain.crt"), "/etc/containers/certs.d/localhost:5000/ca.crt"})
 		Expect(setup.ExitCode()).To(Equal(0))
 
-		push = podmanTest.Podman([]string{"push", "--creds=podmantest:wrongpasswd", ALPINE, "localhost:5000/credstest"})
+		push = podmanTest.PodmanNoCache([]string{"push", "--creds=podmantest:wrongpasswd", ALPINE, "localhost:5000/credstest"})
 		push.WaitWithDefaultTimeout()
 		Expect(push.ExitCode()).To(Not(Equal(0)))
 
-		push = podmanTest.Podman([]string{"push", "--creds=podmantest:test", "--cert-dir=fakedir", ALPINE, "localhost:5000/certdirtest"})
+		push = podmanTest.PodmanNoCache([]string{"push", "--creds=podmantest:test", "--cert-dir=fakedir", ALPINE, "localhost:5000/certdirtest"})
 		push.WaitWithDefaultTimeout()
 		Expect(push.ExitCode()).To(Not(Equal(0)))
 
-		push = podmanTest.Podman([]string{"push", "--creds=podmantest:test", ALPINE, "localhost:5000/defaultflags"})
+		push = podmanTest.PodmanNoCache([]string{"push", "--creds=podmantest:test", ALPINE, "localhost:5000/defaultflags"})
 		push.WaitWithDefaultTimeout()
 		Expect(push.ExitCode()).To(Equal(0))
 	})
 
 	It("podman push to docker-archive", func() {
 		tarfn := filepath.Join(podmanTest.TempDir, "alp.tar")
-		session := podmanTest.Podman([]string{"push", ALPINE,
+		session := podmanTest.PodmanNoCache([]string{"push", ALPINE,
 			fmt.Sprintf("docker-archive:%s:latest", tarfn)})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
@@ -177,7 +171,7 @@ var _ = Describe("Podman push", func() {
 			Skip("Docker is not available")
 		}
 
-		session := podmanTest.Podman([]string{"push", ALPINE, "docker-daemon:alpine:podmantest"})
+		session := podmanTest.PodmanNoCache([]string{"push", ALPINE, "docker-daemon:alpine:podmantest"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
@@ -191,7 +185,7 @@ var _ = Describe("Podman push", func() {
 
 	It("podman push to oci-archive", func() {
 		tarfn := filepath.Join(podmanTest.TempDir, "alp.tar")
-		session := podmanTest.Podman([]string{"push", ALPINE,
+		session := podmanTest.PodmanNoCache([]string{"push", ALPINE,
 			fmt.Sprintf("oci-archive:%s:latest", tarfn)})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
@@ -208,7 +202,7 @@ var _ = Describe("Podman push", func() {
 		setup := SystemExec("ostree", []string{strings.Join([]string{"--repo=", ostreePath}, ""), "init"})
 		Expect(setup.ExitCode()).To(Equal(0))
 
-		session := podmanTest.Podman([]string{"push", ALPINE, strings.Join([]string{"ostree:alp@", ostreePath}, "")})
+		session := podmanTest.PodmanNoCache([]string{"push", ALPINE, strings.Join([]string{"ostree:alp@", ostreePath}, "")})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
@@ -216,7 +210,7 @@ var _ = Describe("Podman push", func() {
 
 	It("podman push to docker-archive no reference", func() {
 		tarfn := filepath.Join(podmanTest.TempDir, "alp.tar")
-		session := podmanTest.Podman([]string{"push", ALPINE,
+		session := podmanTest.PodmanNoCache([]string{"push", ALPINE,
 			fmt.Sprintf("docker-archive:%s", tarfn)})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
@@ -224,7 +218,7 @@ var _ = Describe("Podman push", func() {
 
 	It("podman push to oci-archive no reference", func() {
 		ociarc := filepath.Join(podmanTest.TempDir, "alp-oci")
-		session := podmanTest.Podman([]string{"push", ALPINE,
+		session := podmanTest.PodmanNoCache([]string{"push", ALPINE,
 			fmt.Sprintf("oci-archive:%s", ociarc)})
 
 		session.WaitWithDefaultTimeout()
diff --git a/test/e2e/restart_test.go b/test/e2e/restart_test.go
index 7a9a466d88..2b515f53be 100644
--- a/test/e2e/restart_test.go
+++ b/test/e2e/restart_test.go
@@ -23,7 +23,7 @@ var _ = Describe("Podman restart", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/rm_test.go b/test/e2e/rm_test.go
index 29150d67c6..2dbabbf6ad 100644
--- a/test/e2e/rm_test.go
+++ b/test/e2e/rm_test.go
@@ -22,7 +22,7 @@ var _ = Describe("Podman rm", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/rmi_test.go b/test/e2e/rmi_test.go
index e034f24cf4..1687bf7643 100644
--- a/test/e2e/rmi_test.go
+++ b/test/e2e/rmi_test.go
@@ -41,14 +41,14 @@ var _ = Describe("Podman rmi", func() {
 	})
 
 	It("podman rmi with fq name", func() {
-		session := podmanTest.Podman([]string{"rmi", ALPINE})
+		session := podmanTest.PodmanNoCache([]string{"rmi", ALPINE})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
 	})
 
 	It("podman rmi with short name", func() {
-		session := podmanTest.Podman([]string{"rmi", "alpine"})
+		session := podmanTest.PodmanNoCache([]string{"rmi", "alpine"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
@@ -56,9 +56,9 @@ var _ = Describe("Podman rmi", func() {
 
 	It("podman rmi all images", func() {
 		podmanTest.PullImages([]string{nginx})
-		session := podmanTest.Podman([]string{"rmi", "-a"})
+		session := podmanTest.PodmanNoCache([]string{"rmi", "-a"})
 		session.WaitWithDefaultTimeout()
-		images := podmanTest.Podman([]string{"images"})
+		images := podmanTest.PodmanNoCache([]string{"images"})
 		images.WaitWithDefaultTimeout()
 		fmt.Println(images.OutputToStringArray())
 		Expect(session.ExitCode()).To(Equal(0))
@@ -67,22 +67,22 @@ var _ = Describe("Podman rmi", func() {
 
 	It("podman rmi all images forcibly with short options", func() {
 		podmanTest.PullImages([]string{nginx})
-		session := podmanTest.Podman([]string{"rmi", "-fa"})
+		session := podmanTest.PodmanNoCache([]string{"rmi", "-fa"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
 	})
 
 	It("podman rmi tagged image", func() {
-		setup := podmanTest.Podman([]string{"images", "-q", ALPINE})
+		setup := podmanTest.PodmanNoCache([]string{"images", "-q", ALPINE})
 		setup.WaitWithDefaultTimeout()
 		Expect(setup.ExitCode()).To(Equal(0))
 
-		session := podmanTest.Podman([]string{"tag", "alpine", "foo:bar", "foo"})
+		session := podmanTest.PodmanNoCache([]string{"tag", "alpine", "foo:bar", "foo"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		result := podmanTest.Podman([]string{"images", "-q", "foo"})
+		result := podmanTest.PodmanNoCache([]string{"images", "-q", "foo"})
 		result.WaitWithDefaultTimeout()
 		Expect(result.ExitCode()).To(Equal(0))
 
@@ -90,95 +90,95 @@ var _ = Describe("Podman rmi", func() {
 	})
 
 	It("podman rmi image with tags by ID cannot be done without force", func() {
-		setup := podmanTest.Podman([]string{"images", "-q", ALPINE})
+		setup := podmanTest.PodmanNoCache([]string{"images", "-q", ALPINE})
 		setup.WaitWithDefaultTimeout()
 		Expect(setup.ExitCode()).To(Equal(0))
 		alpineId := setup.OutputToString()
 
-		session := podmanTest.Podman([]string{"tag", "alpine", "foo:bar", "foo"})
+		session := podmanTest.PodmanNoCache([]string{"tag", "alpine", "foo:bar", "foo"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
 		// Trying without --force should fail
-		result := podmanTest.Podman([]string{"rmi", alpineId})
+		result := podmanTest.PodmanNoCache([]string{"rmi", alpineId})
 		result.WaitWithDefaultTimeout()
 		Expect(result.ExitCode()).ToNot(Equal(0))
 
 		// With --force it should work
-		resultForce := podmanTest.Podman([]string{"rmi", "-f", alpineId})
+		resultForce := podmanTest.PodmanNoCache([]string{"rmi", "-f", alpineId})
 		resultForce.WaitWithDefaultTimeout()
 		Expect(resultForce.ExitCode()).To(Equal(0))
 	})
 
 	It("podman rmi image that is a parent of another image", func() {
 		SkipIfRemote()
-		session := podmanTest.Podman([]string{"rmi", "-fa"})
+		session := podmanTest.PodmanNoCache([]string{"rmi", "-fa"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"run", "--name", "c_test", ALPINE, "true"})
+		session = podmanTest.PodmanNoCache([]string{"run", "--name", "c_test", ALPINE, "true"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"commit", "-q", "c_test", "test"})
+		session = podmanTest.PodmanNoCache([]string{"commit", "-q", "c_test", "test"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"rm", "c_test"})
+		session = podmanTest.PodmanNoCache([]string{"rm", "c_test"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"rmi", ALPINE})
+		session = podmanTest.PodmanNoCache([]string{"rmi", ALPINE})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"images", "-q"})
+		session = podmanTest.PodmanNoCache([]string{"images", "-q"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		Expect(len(session.OutputToStringArray())).To(Equal(1))
 
-		session = podmanTest.Podman([]string{"images", "-q", "-a"})
+		session = podmanTest.PodmanNoCache([]string{"images", "-q", "-a"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		Expect(len(session.OutputToStringArray())).To(Equal(2))
 		untaggedImg := session.OutputToStringArray()[1]
 
-		session = podmanTest.Podman([]string{"rmi", "-f", untaggedImg})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "-f", untaggedImg})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Not(Equal(0)))
 	})
 
 	It("podman rmi image that is created from another named imaged", func() {
 		SkipIfRemote()
-		session := podmanTest.Podman([]string{"rmi", "-fa"})
+		session := podmanTest.PodmanNoCache([]string{"rmi", "-fa"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"create", "--name", "c_test1", ALPINE, "true"})
+		session = podmanTest.PodmanNoCache([]string{"create", "--name", "c_test1", ALPINE, "true"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"commit", "-q", "c_test1", "test1"})
+		session = podmanTest.PodmanNoCache([]string{"commit", "-q", "c_test1", "test1"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"create", "--name", "c_test2", "test1", "true"})
+		session = podmanTest.PodmanNoCache([]string{"create", "--name", "c_test2", "test1", "true"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"commit", "-q", "c_test2", "test2"})
+		session = podmanTest.PodmanNoCache([]string{"commit", "-q", "c_test2", "test2"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"rm", "-a"})
+		session = podmanTest.PodmanNoCache([]string{"rm", "-a"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"rmi", "test2"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "test2"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"images", "-q"})
+		session = podmanTest.PodmanNoCache([]string{"images", "-q"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		Expect(len(session.OutputToStringArray())).To(Equal(2))
@@ -186,7 +186,7 @@ var _ = Describe("Podman rmi", func() {
 
 	It("podman rmi with cached images", func() {
 		SkipIfRemote()
-		session := podmanTest.Podman([]string{"rmi", "-fa"})
+		session := podmanTest.PodmanNoCache([]string{"rmi", "-fa"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
@@ -205,51 +205,51 @@ var _ = Describe("Podman rmi", func() {
 		`
 		podmanTest.BuildImage(dockerfile, "test2", "true")
 
-		session = podmanTest.Podman([]string{"images", "-q", "-a"})
+		session = podmanTest.PodmanNoCache([]string{"images", "-q", "-a"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		numOfImages := len(session.OutputToStringArray())
 
-		session = podmanTest.Podman([]string{"rmi", "test2"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "test2"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"images", "-q", "-a"})
+		session = podmanTest.PodmanNoCache([]string{"images", "-q", "-a"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		Expect(numOfImages - len(session.OutputToStringArray())).To(Equal(2))
 
-		session = podmanTest.Podman([]string{"rmi", "test"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "test"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"images", "-q", "-a"})
+		session = podmanTest.PodmanNoCache([]string{"images", "-q", "-a"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		Expect(len(session.OutputToStringArray())).To(Equal(1))
 
 		podmanTest.BuildImage(dockerfile, "test3", "true")
 
-		session = podmanTest.Podman([]string{"rmi", ALPINE})
+		session = podmanTest.PodmanNoCache([]string{"rmi", ALPINE})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"rmi", "test3"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "test3"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"images", "-q", "-a"})
+		session = podmanTest.PodmanNoCache([]string{"images", "-q", "-a"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		Expect(len(session.OutputToString())).To(Equal(0))
 	})
 
 	It("podman rmi -a with no images should be exit 0", func() {
-		session := podmanTest.Podman([]string{"rmi", "-fa"})
+		session := podmanTest.PodmanNoCache([]string{"rmi", "-fa"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session2 := podmanTest.Podman([]string{"rmi", "-fa"})
+		session2 := podmanTest.PodmanNoCache([]string{"rmi", "-fa"})
 		session2.WaitWithDefaultTimeout()
 		Expect(session2.ExitCode()).To(Equal(0))
 	})
@@ -265,12 +265,12 @@ RUN find $LOCAL
 
 `
 		podmanTest.BuildImage(dockerfile, "test", "true")
-		session := podmanTest.Podman([]string{"rmi", "-a"})
+		session := podmanTest.PodmanNoCache([]string{"rmi", "-a"})
 		session.WaitWithDefaultTimeout()
 		fmt.Println(session.OutputToString())
 		Expect(session.ExitCode()).To(Equal(0))
 
-		images := podmanTest.Podman([]string{"images", "-aq"})
+		images := podmanTest.PodmanNoCache([]string{"images", "-aq"})
 		images.WaitWithDefaultTimeout()
 		Expect(images.ExitCode()).To(Equal(0))
 		Expect(len(images.OutputToStringArray())).To(Equal(0))
@@ -279,7 +279,7 @@ RUN find $LOCAL
 	// Don't rerun all tests; just assume that if we get that diagnostic,
 	// we're getting rmi
 	It("podman image rm is the same as rmi", func() {
-		session := podmanTest.Podman([]string{"image", "rm"})
+		session := podmanTest.PodmanNoCache([]string{"image", "rm"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(125))
 		Expect(session.LineInOutputContains("image name or ID must be specified"))
diff --git a/test/e2e/run_cgroup_parent_test.go b/test/e2e/run_cgroup_parent_test.go
index 0d04c5f03b..1fb9f68719 100644
--- a/test/e2e/run_cgroup_parent_test.go
+++ b/test/e2e/run_cgroup_parent_test.go
@@ -25,7 +25,7 @@ var _ = Describe("Podman run with --cgroup-parent", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreArtifact(fedoraMinimal)
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/run_cleanup_test.go b/test/e2e/run_cleanup_test.go
index b20e37794d..73647b6bb8 100644
--- a/test/e2e/run_cleanup_test.go
+++ b/test/e2e/run_cleanup_test.go
@@ -24,7 +24,7 @@ var _ = Describe("Podman run exit", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.RestoreArtifact(ALPINE)
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/run_cpu_test.go b/test/e2e/run_cpu_test.go
index 42a66865c1..87f89b1dd1 100644
--- a/test/e2e/run_cpu_test.go
+++ b/test/e2e/run_cpu_test.go
@@ -24,7 +24,7 @@ var _ = Describe("Podman run cpu", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/run_device_test.go b/test/e2e/run_device_test.go
index fac09b78da..2e537a9f9f 100644
--- a/test/e2e/run_device_test.go
+++ b/test/e2e/run_device_test.go
@@ -24,7 +24,7 @@ var _ = Describe("Podman run device", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/run_dns_test.go b/test/e2e/run_dns_test.go
index 0f4dd67421..f1196ff38a 100644
--- a/test/e2e/run_dns_test.go
+++ b/test/e2e/run_dns_test.go
@@ -24,7 +24,7 @@ var _ = Describe("Podman run dns", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/run_entrypoint_test.go b/test/e2e/run_entrypoint_test.go
index ee9fd1263c..b1344a371f 100644
--- a/test/e2e/run_entrypoint_test.go
+++ b/test/e2e/run_entrypoint_test.go
@@ -24,7 +24,7 @@ var _ = Describe("Podman run entrypoint", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreArtifact(ALPINE)
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/run_exit_test.go b/test/e2e/run_exit_test.go
index da4cf7ee7d..861d6b3b73 100644
--- a/test/e2e/run_exit_test.go
+++ b/test/e2e/run_exit_test.go
@@ -24,7 +24,7 @@ var _ = Describe("Podman run exit", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/run_memory_test.go b/test/e2e/run_memory_test.go
index 05d0b7a188..8fe90c8d81 100644
--- a/test/e2e/run_memory_test.go
+++ b/test/e2e/run_memory_test.go
@@ -25,7 +25,7 @@ var _ = Describe("Podman run memory", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/run_networking_test.go b/test/e2e/run_networking_test.go
index 93919925c3..1497a651bd 100644
--- a/test/e2e/run_networking_test.go
+++ b/test/e2e/run_networking_test.go
@@ -25,7 +25,7 @@ var _ = Describe("Podman run networking", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
@@ -78,7 +78,6 @@ var _ = Describe("Podman run networking", func() {
 	})
 
 	It("podman run network expose ports in image metadata", func() {
-		podmanTest.RestoreArtifact(nginx)
 		session := podmanTest.Podman([]string{"create", "-dt", "-P", nginx})
 		session.Wait(90)
 		Expect(session.ExitCode()).To(Equal(0))
diff --git a/test/e2e/run_ns_test.go b/test/e2e/run_ns_test.go
index 51f921bce7..6ba0d1aba4 100644
--- a/test/e2e/run_ns_test.go
+++ b/test/e2e/run_ns_test.go
@@ -25,7 +25,7 @@ var _ = Describe("Podman run ns", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreArtifact(fedoraMinimal)
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/run_passwd_test.go b/test/e2e/run_passwd_test.go
index becbc5bfa3..bd6a0e0368 100644
--- a/test/e2e/run_passwd_test.go
+++ b/test/e2e/run_passwd_test.go
@@ -24,7 +24,7 @@ var _ = Describe("Podman run passwd", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/run_privileged_test.go b/test/e2e/run_privileged_test.go
index 16011b2fda..f2c424483a 100644
--- a/test/e2e/run_privileged_test.go
+++ b/test/e2e/run_privileged_test.go
@@ -25,7 +25,7 @@ var _ = Describe("Podman privileged container tests", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/run_restart_test.go b/test/e2e/run_restart_test.go
index 9976b45e86..8bbdf20568 100644
--- a/test/e2e/run_restart_test.go
+++ b/test/e2e/run_restart_test.go
@@ -24,7 +24,7 @@ var _ = Describe("Podman run restart containers", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/run_selinux_test.go b/test/e2e/run_selinux_test.go
index 4d2bad49cf..a2228411e0 100644
--- a/test/e2e/run_selinux_test.go
+++ b/test/e2e/run_selinux_test.go
@@ -25,7 +25,7 @@ var _ = Describe("Podman run", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 		if !selinux.GetEnabled() {
 			Skip("SELinux not enabled")
 		}
diff --git a/test/e2e/run_signal_test.go b/test/e2e/run_signal_test.go
index e482adb840..3a5ed483cc 100644
--- a/test/e2e/run_signal_test.go
+++ b/test/e2e/run_signal_test.go
@@ -33,7 +33,7 @@ var _ = Describe("Podman run with --sig-proxy", func() {
 		}
 		podmanTest = PodmanTestCreate(tmpdir)
 		podmanTest.Setup()
-		podmanTest.RestoreArtifact(fedoraMinimal)
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/run_staticip_test.go b/test/e2e/run_staticip_test.go
index 318a7a62dd..9753cfc9cd 100644
--- a/test/e2e/run_staticip_test.go
+++ b/test/e2e/run_staticip_test.go
@@ -25,7 +25,7 @@ var _ = Describe("Podman run with --ip flag", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 		// Cleanup the CNI networks used by the tests
 		os.RemoveAll("/var/lib/cni/networks/podman")
 	})
diff --git a/test/e2e/run_test.go b/test/e2e/run_test.go
index f908fe1545..31720ea04b 100644
--- a/test/e2e/run_test.go
+++ b/test/e2e/run_test.go
@@ -32,7 +32,7 @@ var _ = Describe("Podman run", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
@@ -51,7 +51,6 @@ var _ = Describe("Podman run", func() {
 	It("podman run a container based on a complex local image name", func() {
 		SkipIfRootless()
 		imageName := strings.TrimPrefix(nginx, "quay.io/")
-		podmanTest.RestoreArtifact(nginx)
 		session := podmanTest.Podman([]string{"run", imageName, "ls"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ErrorToString()).ToNot(ContainSubstring("Trying to pull"))
@@ -59,7 +58,6 @@ var _ = Describe("Podman run", func() {
 	})
 
 	It("podman run a container based on on a short name with localhost", func() {
-		podmanTest.RestoreArtifact(nginx)
 		tag := podmanTest.Podman([]string{"tag", nginx, "localhost/libpod/alpine_nginx:latest"})
 		tag.WaitWithDefaultTimeout()
 
@@ -73,7 +71,6 @@ var _ = Describe("Podman run", func() {
 	})
 
 	It("podman container run a container based on on a short name with localhost", func() {
-		podmanTest.RestoreArtifact(nginx)
 		tag := podmanTest.Podman([]string{"image", "tag", nginx, "localhost/libpod/alpine_nginx:latest"})
 		tag.WaitWithDefaultTimeout()
 
@@ -229,7 +226,6 @@ var _ = Describe("Podman run", func() {
 
 	It("podman run limits test", func() {
 		SkipIfRootless()
-		podmanTest.RestoreArtifact(fedoraMinimal)
 		session := podmanTest.Podman([]string{"run", "--rm", "--ulimit", "rtprio=99", "--cap-add=sys_nice", fedoraMinimal, "cat", "/proc/self/sched"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
@@ -349,11 +345,12 @@ var _ = Describe("Podman run", func() {
 	})
 
 	It("podman run tagged image", func() {
-		tag := podmanTest.Podman([]string{"tag", "busybox", "bb"})
+		podmanTest.RestoreArtifact(BB)
+		tag := podmanTest.PodmanNoCache([]string{"tag", "busybox", "bb"})
 		tag.WaitWithDefaultTimeout()
 		Expect(tag.ExitCode()).To(Equal(0))
 
-		session := podmanTest.Podman([]string{"run", "--rm", "bb", "ls"})
+		session := podmanTest.PodmanNoCache([]string{"run", "--rm", "bb", "ls"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 	})
@@ -536,15 +533,10 @@ var _ = Describe("Podman run", func() {
 	})
 
 	It("podman run with built-in volume image", func() {
-		podmanTest.RestoreArtifact(redis)
 		session := podmanTest.Podman([]string{"run", "--rm", redis, "ls"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"rmi", redis})
-		session.WaitWithDefaultTimeout()
-		Expect(session.ExitCode()).To(Equal(0))
-
 		dockerfile := `FROM busybox
 RUN mkdir -p /myvol/data && chown -R mail.0 /myvol
 VOLUME ["/myvol/data"]
@@ -555,10 +547,6 @@ USER mail`
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 		Expect(session.OutputToString()).To(ContainSubstring("mail root"))
-
-		session = podmanTest.Podman([]string{"rmi", "test"})
-		session.WaitWithDefaultTimeout()
-		Expect(session.ExitCode()).To(Equal(0))
 	})
 
 	It("podman run --volumes-from flag", func() {
@@ -571,7 +559,6 @@ USER mail`
 		err = ioutil.WriteFile(volFile, []byte(data), 0755)
 		Expect(err).To(BeNil())
 
-		podmanTest.RestoreArtifact(redis)
 		session := podmanTest.Podman([]string{"create", "--volume", vol + ":/myvol", redis, "sh"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
@@ -587,7 +574,6 @@ USER mail`
 	})
 
 	It("podman run --volumes-from flag with built-in volumes", func() {
-		podmanTest.RestoreArtifact(redis)
 		session := podmanTest.Podman([]string{"create", redis, "sh"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
@@ -641,7 +627,6 @@ USER mail`
 	})
 
 	It("podman run findmnt nothing shared", func() {
-		podmanTest.RestoreArtifact(fedoraMinimal)
 		vol1 := filepath.Join(podmanTest.TempDir, "vol-test1")
 		err := os.MkdirAll(vol1, 0755)
 		Expect(err).To(BeNil())
@@ -657,7 +642,6 @@ USER mail`
 	})
 
 	It("podman run findmnt shared", func() {
-		podmanTest.RestoreArtifact(fedoraMinimal)
 		vol1 := filepath.Join(podmanTest.TempDir, "vol-test1")
 		err := os.MkdirAll(vol1, 0755)
 		Expect(err).To(BeNil())
@@ -765,10 +749,9 @@ USER mail`
 	})
 
 	It("podman run with restart-policy always restarts containers", func() {
-		podmanTest.RestoreArtifact(fedoraMinimal)
 
 		testDir := filepath.Join(podmanTest.RunRoot, "restart-test")
-		err := os.Mkdir(testDir, 0755)
+		err := os.MkdirAll(testDir, 0755)
 		Expect(err).To(BeNil())
 
 		aliveFile := filepath.Join(testDir, "running")
diff --git a/test/e2e/run_userns_test.go b/test/e2e/run_userns_test.go
index ce6971cd1d..be3f7df49b 100644
--- a/test/e2e/run_userns_test.go
+++ b/test/e2e/run_userns_test.go
@@ -31,7 +31,7 @@ var _ = Describe("Podman UserNS support", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/run_volume_test.go b/test/e2e/run_volume_test.go
index d031ca1435..d89c809098 100644
--- a/test/e2e/run_volume_test.go
+++ b/test/e2e/run_volume_test.go
@@ -26,7 +26,7 @@ var _ = Describe("Podman run with volumes", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/runlabel_test.go b/test/e2e/runlabel_test.go
index f52a2b8fc9..5ef68603e2 100644
--- a/test/e2e/runlabel_test.go
+++ b/test/e2e/runlabel_test.go
@@ -37,7 +37,7 @@ var _ = Describe("podman container runlabel", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/save_test.go b/test/e2e/save_test.go
index ffb5182d67..be1ede962f 100644
--- a/test/e2e/save_test.go
+++ b/test/e2e/save_test.go
@@ -37,7 +37,7 @@ var _ = Describe("Podman save", func() {
 	It("podman save output flag", func() {
 		outfile := filepath.Join(podmanTest.TempDir, "alpine.tar")
 
-		save := podmanTest.Podman([]string{"save", "-o", outfile, ALPINE})
+		save := podmanTest.PodmanNoCache([]string{"save", "-o", outfile, ALPINE})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Equal(0))
 	})
@@ -45,7 +45,7 @@ var _ = Describe("Podman save", func() {
 	It("podman save oci flag", func() {
 		outfile := filepath.Join(podmanTest.TempDir, "alpine.tar")
 
-		save := podmanTest.Podman([]string{"save", "-o", outfile, "--format", "oci-archive", ALPINE})
+		save := podmanTest.PodmanNoCache([]string{"save", "-o", outfile, "--format", "oci-archive", ALPINE})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Equal(0))
 	})
@@ -54,7 +54,7 @@ var _ = Describe("Podman save", func() {
 		Skip("Pipe redirection in ginkgo probably wont work")
 		outfile := filepath.Join(podmanTest.TempDir, "alpine.tar")
 
-		save := podmanTest.Podman([]string{"save", ALPINE, ">", outfile})
+		save := podmanTest.PodmanNoCache([]string{"save", ALPINE, ">", outfile})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Equal(0))
 	})
@@ -62,7 +62,7 @@ var _ = Describe("Podman save", func() {
 	It("podman save quiet flag", func() {
 		outfile := filepath.Join(podmanTest.TempDir, "alpine.tar")
 
-		save := podmanTest.Podman([]string{"save", "-q", "-o", outfile, ALPINE})
+		save := podmanTest.PodmanNoCache([]string{"save", "-q", "-o", outfile, ALPINE})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Equal(0))
 	})
@@ -70,7 +70,7 @@ var _ = Describe("Podman save", func() {
 	It("podman save bogus image", func() {
 		outfile := filepath.Join(podmanTest.TempDir, "alpine.tar")
 
-		save := podmanTest.Podman([]string{"save", "-o", outfile, "FOOBAR"})
+		save := podmanTest.PodmanNoCache([]string{"save", "-o", outfile, "FOOBAR"})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Not(Equal(0)))
 	})
@@ -81,7 +81,7 @@ var _ = Describe("Podman save", func() {
 		}
 		outdir := filepath.Join(podmanTest.TempDir, "save")
 
-		save := podmanTest.Podman([]string{"save", "--format", "oci-dir", "-o", outdir, ALPINE})
+		save := podmanTest.PodmanNoCache([]string{"save", "--format", "oci-dir", "-o", outdir, ALPINE})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Equal(0))
 	})
@@ -92,7 +92,7 @@ var _ = Describe("Podman save", func() {
 		}
 		outdir := filepath.Join(podmanTest.TempDir, "save")
 
-		save := podmanTest.Podman([]string{"save", "--format", "docker-dir", "-o", outdir, ALPINE})
+		save := podmanTest.PodmanNoCache([]string{"save", "--format", "docker-dir", "-o", outdir, ALPINE})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Equal(0))
 	})
@@ -103,7 +103,7 @@ var _ = Describe("Podman save", func() {
 		}
 		outdir := filepath.Join(podmanTest.TempDir, "save")
 
-		save := podmanTest.Podman([]string{"save", "--compress", "--format", "docker-dir", "-o", outdir, ALPINE})
+		save := podmanTest.PodmanNoCache([]string{"save", "--compress", "--format", "docker-dir", "-o", outdir, ALPINE})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Equal(0))
 	})
@@ -111,7 +111,7 @@ var _ = Describe("Podman save", func() {
 	It("podman save bad filename", func() {
 		outdir := filepath.Join(podmanTest.TempDir, "save:colon")
 
-		save := podmanTest.Podman([]string{"save", "--compress", "--format", "docker-dir", "-o", outdir, ALPINE})
+		save := podmanTest.PodmanNoCache([]string{"save", "--compress", "--format", "docker-dir", "-o", outdir, ALPINE})
 		save.WaitWithDefaultTimeout()
 		Expect(save.ExitCode()).To(Not(Equal(0)))
 	})
diff --git a/test/e2e/search_test.go b/test/e2e/search_test.go
index 72b083de8b..3b1da859c9 100644
--- a/test/e2e/search_test.go
+++ b/test/e2e/search_test.go
@@ -75,8 +75,8 @@ registries = ['{{.Host}}:{{.Port}}']`
 
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
+		podmanTest.SeedImages()
 
-		podmanTest.RestoreAllArtifacts()
 	})
 
 	AfterEach(func() {
@@ -168,7 +168,6 @@ registries = ['{{.Host}}:{{.Port}}']`
 		lock := GetPortLock(registryEndpoints[0].Port)
 		defer lock.Unlock()
 
-		podmanTest.RestoreArtifact(registry)
 		fakereg := podmanTest.Podman([]string{"run", "-d", "--name", "registry",
 			"-p", fmt.Sprintf("%s:5000", registryEndpoints[0].Port),
 			registry, "/entrypoint.sh", "/etc/docker/registry/config.yml"})
@@ -196,7 +195,6 @@ registries = ['{{.Host}}:{{.Port}}']`
 		}
 		lock := GetPortLock(registryEndpoints[3].Port)
 		defer lock.Unlock()
-		podmanTest.RestoreArtifact(registry)
 		registry := podmanTest.Podman([]string{"run", "-d", "--name", "registry3",
 			"-p", fmt.Sprintf("%s:5000", registryEndpoints[3].Port), registry,
 			"/entrypoint.sh", "/etc/docker/registry/config.yml"})
@@ -207,11 +205,12 @@ registries = ['{{.Host}}:{{.Port}}']`
 			Skip("Can not start docker registry.")
 		}
 
+		podmanTest.RestoreArtifact(ALPINE)
 		image := fmt.Sprintf("%s/my-alpine", registryEndpoints[3].Address())
-		push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, image})
+		push := podmanTest.PodmanNoCache([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, image})
 		push.WaitWithDefaultTimeout()
 		Expect(push.ExitCode()).To(Equal(0))
-		search := podmanTest.Podman([]string{"search", image, "--tls-verify=false"})
+		search := podmanTest.PodmanNoCache([]string{"search", image, "--tls-verify=false"})
 		search.WaitWithDefaultTimeout()
 
 		Expect(search.ExitCode()).To(Equal(0))
@@ -225,7 +224,6 @@ registries = ['{{.Host}}:{{.Port}}']`
 
 		lock := GetPortLock(registryEndpoints[4].Port)
 		defer lock.Unlock()
-		podmanTest.RestoreArtifact(registry)
 		registry := podmanTest.Podman([]string{"run", "-d", "-p", fmt.Sprintf("%s:5000", registryEndpoints[4].Port),
 			"--name", "registry4", registry, "/entrypoint.sh", "/etc/docker/registry/config.yml"})
 		registry.WaitWithDefaultTimeout()
@@ -235,8 +233,9 @@ registries = ['{{.Host}}:{{.Port}}']`
 			Skip("Can not start docker registry.")
 		}
 
+		podmanTest.RestoreArtifact(ALPINE)
 		image := fmt.Sprintf("%s/my-alpine", registryEndpoints[4].Address())
-		push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, image})
+		push := podmanTest.PodmanNoCache([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, image})
 		push.WaitWithDefaultTimeout()
 		Expect(push.ExitCode()).To(Equal(0))
 
@@ -246,7 +245,7 @@ registries = ['{{.Host}}:{{.Port}}']`
 		podmanTest.setRegistriesConfigEnv(buffer.Bytes())
 		ioutil.WriteFile(fmt.Sprintf("%s/registry4.conf", tempdir), buffer.Bytes(), 0644)
 
-		search := podmanTest.Podman([]string{"search", image})
+		search := podmanTest.PodmanNoCache([]string{"search", image})
 		search.WaitWithDefaultTimeout()
 
 		Expect(search.ExitCode()).To(Equal(0))
@@ -264,7 +263,6 @@ registries = ['{{.Host}}:{{.Port}}']`
 		}
 		lock := GetPortLock(registryEndpoints[5].Port)
 		defer lock.Unlock()
-		podmanTest.RestoreArtifact(registry)
 		registry := podmanTest.Podman([]string{"run", "-d", "-p", fmt.Sprintf("%s:5000", registryEndpoints[5].Port),
 			"--name", "registry5", registry})
 		registry.WaitWithDefaultTimeout()
@@ -274,8 +272,9 @@ registries = ['{{.Host}}:{{.Port}}']`
 			Skip("Can not start docker registry.")
 		}
 
+		podmanTest.RestoreArtifact(ALPINE)
 		image := fmt.Sprintf("%s/my-alpine", registryEndpoints[5].Address())
-		push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, image})
+		push := podmanTest.PodmanNoCache([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, image})
 		push.WaitWithDefaultTimeout()
 		Expect(push.ExitCode()).To(Equal(0))
 
@@ -284,7 +283,7 @@ registries = ['{{.Host}}:{{.Port}}']`
 		podmanTest.setRegistriesConfigEnv(buffer.Bytes())
 		ioutil.WriteFile(fmt.Sprintf("%s/registry5.conf", tempdir), buffer.Bytes(), 0644)
 
-		search := podmanTest.Podman([]string{"search", image, "--tls-verify=true"})
+		search := podmanTest.PodmanNoCache([]string{"search", image, "--tls-verify=true"})
 		search.WaitWithDefaultTimeout()
 
 		Expect(search.ExitCode()).To(Equal(0))
@@ -302,7 +301,6 @@ registries = ['{{.Host}}:{{.Port}}']`
 		}
 		lock := GetPortLock(registryEndpoints[6].Port)
 		defer lock.Unlock()
-		podmanTest.RestoreArtifact(registry)
 		registry := podmanTest.Podman([]string{"run", "-d", "-p", fmt.Sprintf("%s:5000", registryEndpoints[6].Port),
 			"--name", "registry6", registry})
 		registry.WaitWithDefaultTimeout()
@@ -312,8 +310,9 @@ registries = ['{{.Host}}:{{.Port}}']`
 			Skip("Can not start docker registry.")
 		}
 
+		podmanTest.RestoreArtifact(ALPINE)
 		image := fmt.Sprintf("%s/my-alpine", registryEndpoints[6].Address())
-		push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, image})
+		push := podmanTest.PodmanNoCache([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, image})
 		push.WaitWithDefaultTimeout()
 		Expect(push.ExitCode()).To(Equal(0))
 
@@ -322,7 +321,7 @@ registries = ['{{.Host}}:{{.Port}}']`
 		podmanTest.setRegistriesConfigEnv(buffer.Bytes())
 		ioutil.WriteFile(fmt.Sprintf("%s/registry6.conf", tempdir), buffer.Bytes(), 0644)
 
-		search := podmanTest.Podman([]string{"search", image})
+		search := podmanTest.PodmanNoCache([]string{"search", image})
 		search.WaitWithDefaultTimeout()
 
 		Expect(search.ExitCode()).To(Equal(0))
@@ -343,7 +342,6 @@ registries = ['{{.Host}}:{{.Port}}']`
 		lock8 := GetPortLock("6000")
 		defer lock8.Unlock()
 
-		podmanTest.RestoreArtifact(registry)
 		registryLocal := podmanTest.Podman([]string{"run", "-d", "--net=host", "-p", fmt.Sprintf("%s:5000", registryEndpoints[7].Port),
 			"--name", "registry7", registry})
 		registryLocal.WaitWithDefaultTimeout()
@@ -361,7 +359,8 @@ registries = ['{{.Host}}:{{.Port}}']`
 			Skip("Can not start docker registry.")
 		}
 
-		push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, "localhost:6000/my-alpine"})
+		podmanTest.RestoreArtifact(ALPINE)
+		push := podmanTest.PodmanNoCache([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, "localhost:6000/my-alpine"})
 		push.WaitWithDefaultTimeout()
 		Expect(push.ExitCode()).To(Equal(0))
 
@@ -371,7 +370,7 @@ registries = ['{{.Host}}:{{.Port}}']`
 		podmanTest.setRegistriesConfigEnv(buffer.Bytes())
 		ioutil.WriteFile(fmt.Sprintf("%s/registry8.conf", tempdir), buffer.Bytes(), 0644)
 
-		search := podmanTest.Podman([]string{"search", "my-alpine"})
+		search := podmanTest.PodmanNoCache([]string{"search", "my-alpine"})
 		search.WaitWithDefaultTimeout()
 
 		Expect(search.ExitCode()).To(Equal(0))
diff --git a/test/e2e/start_test.go b/test/e2e/start_test.go
index c92da9777d..fc1203ed1c 100644
--- a/test/e2e/start_test.go
+++ b/test/e2e/start_test.go
@@ -22,7 +22,7 @@ var _ = Describe("Podman start", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/stats_test.go b/test/e2e/stats_test.go
index 05f24539f5..45511edb8f 100644
--- a/test/e2e/stats_test.go
+++ b/test/e2e/stats_test.go
@@ -26,7 +26,7 @@ var _ = Describe("Podman stats", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/stop_test.go b/test/e2e/stop_test.go
index e201204df4..77ab6dbb03 100644
--- a/test/e2e/stop_test.go
+++ b/test/e2e/stop_test.go
@@ -23,7 +23,7 @@ var _ = Describe("Podman stop", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/system_df_test.go b/test/e2e/system_df_test.go
index 92787f17c1..bbbdf30b0d 100644
--- a/test/e2e/system_df_test.go
+++ b/test/e2e/system_df_test.go
@@ -25,7 +25,8 @@ var _ = Describe("podman system df", func() {
 			os.Exit(1)
 		}
 		podmanTest = PodmanTestCreate(tempdir)
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.Setup()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
@@ -55,7 +56,7 @@ var _ = Describe("podman system df", func() {
 		images := strings.Fields(session.OutputToStringArray()[1])
 		containers := strings.Fields(session.OutputToStringArray()[2])
 		volumes := strings.Fields(session.OutputToStringArray()[3])
-		Expect(images[1]).To(Equal("2"))
+		Expect(images[1]).To(Equal("9"))
 		Expect(containers[1]).To(Equal("2"))
 		Expect(volumes[2]).To(Equal("1"))
 	})
diff --git a/test/e2e/systemd_test.go b/test/e2e/systemd_test.go
index 52efc9fca1..91604867d5 100644
--- a/test/e2e/systemd_test.go
+++ b/test/e2e/systemd_test.go
@@ -27,7 +27,7 @@ var _ = Describe("Podman systemd", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 		systemd_unit_file = `[Unit]
 Description=redis container
 [Service]
diff --git a/test/e2e/tag_test.go b/test/e2e/tag_test.go
index 26d6dfa758..2b513015b2 100644
--- a/test/e2e/tag_test.go
+++ b/test/e2e/tag_test.go
@@ -33,11 +33,11 @@ var _ = Describe("Podman tag", func() {
 	})
 
 	It("podman tag shortname:latest", func() {
-		session := podmanTest.Podman([]string{"tag", ALPINE, "foobar:latest"})
+		session := podmanTest.PodmanNoCache([]string{"tag", ALPINE, "foobar:latest"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		results := podmanTest.Podman([]string{"inspect", "foobar:latest"})
+		results := podmanTest.PodmanNoCache([]string{"inspect", "foobar:latest"})
 		results.WaitWithDefaultTimeout()
 		Expect(results.ExitCode()).To(Equal(0))
 		inspectData := results.InspectImageJSON()
@@ -46,11 +46,11 @@ var _ = Describe("Podman tag", func() {
 	})
 
 	It("podman tag shortname", func() {
-		session := podmanTest.Podman([]string{"tag", ALPINE, "foobar"})
+		session := podmanTest.PodmanNoCache([]string{"tag", ALPINE, "foobar"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		results := podmanTest.Podman([]string{"inspect", "foobar:latest"})
+		results := podmanTest.PodmanNoCache([]string{"inspect", "foobar:latest"})
 		results.WaitWithDefaultTimeout()
 		Expect(results.ExitCode()).To(Equal(0))
 		inspectData := results.InspectImageJSON()
@@ -59,11 +59,11 @@ var _ = Describe("Podman tag", func() {
 	})
 
 	It("podman tag shortname:tag", func() {
-		session := podmanTest.Podman([]string{"tag", ALPINE, "foobar:new"})
+		session := podmanTest.PodmanNoCache([]string{"tag", ALPINE, "foobar:new"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		results := podmanTest.Podman([]string{"inspect", "foobar:new"})
+		results := podmanTest.PodmanNoCache([]string{"inspect", "foobar:new"})
 		results.WaitWithDefaultTimeout()
 		Expect(results.ExitCode()).To(Equal(0))
 		inspectData := results.InspectImageJSON()
@@ -72,15 +72,15 @@ var _ = Describe("Podman tag", func() {
 	})
 
 	It("podman tag shortname image no tag", func() {
-		session := podmanTest.Podman([]string{"tag", ALPINE, "foobar"})
+		session := podmanTest.PodmanNoCache([]string{"tag", ALPINE, "foobar"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		results := podmanTest.Podman([]string{"tag", "foobar", "barfoo"})
+		results := podmanTest.PodmanNoCache([]string{"tag", "foobar", "barfoo"})
 		results.WaitWithDefaultTimeout()
 		Expect(results.ExitCode()).To(Equal(0))
 
-		verify := podmanTest.Podman([]string{"inspect", "barfoo"})
+		verify := podmanTest.PodmanNoCache([]string{"inspect", "barfoo"})
 		verify.WaitWithDefaultTimeout()
 		Expect(verify.ExitCode()).To(Equal(0))
 	})
diff --git a/test/e2e/top_test.go b/test/e2e/top_test.go
index 4c2cdb7b5d..b62d242f13 100644
--- a/test/e2e/top_test.go
+++ b/test/e2e/top_test.go
@@ -24,7 +24,7 @@ var _ = Describe("Podman top", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/tree_test.go b/test/e2e/tree_test.go
index 9740adada9..2db7aeb5e6 100644
--- a/test/e2e/tree_test.go
+++ b/test/e2e/tree_test.go
@@ -22,7 +22,8 @@ var _ = Describe("Podman image tree", func() {
 			os.Exit(1)
 		}
 		podmanTest = PodmanTestCreate(tempdir)
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.Setup()
+		podmanTest.RestoreArtifact(BB)
 	})
 
 	AfterEach(func() {
@@ -36,7 +37,7 @@ var _ = Describe("Podman image tree", func() {
 		if podmanTest.RemoteTest {
 			Skip("Does not work on remote client")
 		}
-		session := podmanTest.Podman([]string{"pull", "docker.io/library/busybox:latest"})
+		session := podmanTest.PodmanNoCache([]string{"pull", "docker.io/library/busybox:latest"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
@@ -47,17 +48,17 @@ ENV foo=bar
 `
 		podmanTest.BuildImage(dockerfile, "test:latest", "true")
 
-		session = podmanTest.Podman([]string{"image", "tree", "test:latest"})
+		session = podmanTest.PodmanNoCache([]string{"image", "tree", "test:latest"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
-		session = podmanTest.Podman([]string{"image", "tree", "--whatrequires", "docker.io/library/busybox:latest"})
+		session = podmanTest.PodmanNoCache([]string{"image", "tree", "--whatrequires", "docker.io/library/busybox:latest"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 
-		session = podmanTest.Podman([]string{"rmi", "test:latest"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "test:latest"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
-		session = podmanTest.Podman([]string{"rmi", "docker.io/library/busybox:latest"})
+		session = podmanTest.PodmanNoCache([]string{"rmi", "docker.io/library/busybox:latest"})
 		session.WaitWithDefaultTimeout()
 		Expect(session.ExitCode()).To(Equal(0))
 	})
diff --git a/test/e2e/trust_test.go b/test/e2e/trust_test.go
index 493c4a7d54..8c97e6b288 100644
--- a/test/e2e/trust_test.go
+++ b/test/e2e/trust_test.go
@@ -27,7 +27,7 @@ var _ = Describe("Podman trust", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/unshare_test.go b/test/e2e/unshare_test.go
index 1e3f06a62d..5f342ffc33 100644
--- a/test/e2e/unshare_test.go
+++ b/test/e2e/unshare_test.go
@@ -32,7 +32,7 @@ var _ = Describe("Podman unshare", func() {
 		podmanTest.CgroupManager = "cgroupfs"
 		podmanTest.StorageOptions = ROOTLESS_STORAGE_OPTIONS
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/version_test.go b/test/e2e/version_test.go
index 35ee21e49a..2c8b3068c5 100644
--- a/test/e2e/version_test.go
+++ b/test/e2e/version_test.go
@@ -27,6 +27,7 @@ var _ = Describe("Podman version", func() {
 		podmanTest.Cleanup()
 		f := CurrentGinkgoTestDescription()
 		processTestResult(f)
+		podmanTest.SeedImages()
 
 	})
 
diff --git a/test/e2e/volume_create_test.go b/test/e2e/volume_create_test.go
index dccecd457d..041a9e6f03 100644
--- a/test/e2e/volume_create_test.go
+++ b/test/e2e/volume_create_test.go
@@ -22,7 +22,7 @@ var _ = Describe("Podman volume create", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/volume_inspect_test.go b/test/e2e/volume_inspect_test.go
index e7f20ce7bc..0683c6bbfc 100644
--- a/test/e2e/volume_inspect_test.go
+++ b/test/e2e/volume_inspect_test.go
@@ -22,7 +22,7 @@ var _ = Describe("Podman volume inspect", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/volume_ls_test.go b/test/e2e/volume_ls_test.go
index 1f0177def4..da2d7ae779 100644
--- a/test/e2e/volume_ls_test.go
+++ b/test/e2e/volume_ls_test.go
@@ -22,7 +22,7 @@ var _ = Describe("Podman volume ls", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/volume_prune_test.go b/test/e2e/volume_prune_test.go
index 55a95c8c99..ba249278b5 100644
--- a/test/e2e/volume_prune_test.go
+++ b/test/e2e/volume_prune_test.go
@@ -24,7 +24,7 @@ var _ = Describe("Podman volume prune", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/volume_rm_test.go b/test/e2e/volume_rm_test.go
index 39628d56f1..5dcf51ccdb 100644
--- a/test/e2e/volume_rm_test.go
+++ b/test/e2e/volume_rm_test.go
@@ -22,7 +22,7 @@ var _ = Describe("Podman volume rm", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/e2e/wait_test.go b/test/e2e/wait_test.go
index 28a4c1e407..c03116b01a 100644
--- a/test/e2e/wait_test.go
+++ b/test/e2e/wait_test.go
@@ -22,7 +22,7 @@ var _ = Describe("Podman wait", func() {
 		}
 		podmanTest = PodmanTestCreate(tempdir)
 		podmanTest.Setup()
-		podmanTest.RestoreAllArtifacts()
+		podmanTest.SeedImages()
 	})
 
 	AfterEach(func() {
diff --git a/test/utils/podmantest_test.go b/test/utils/podmantest_test.go
index 28f294a947..cb31d55486 100644
--- a/test/utils/podmantest_test.go
+++ b/test/utils/podmantest_test.go
@@ -23,7 +23,7 @@ var _ = Describe("PodmanTest test", func() {
 		FakeOutputs["check"] = []string{"check"}
 		os.Setenv("HOOK_OPTION", "hook_option")
 		env := os.Environ()
-		session := podmanTest.PodmanAsUserBase([]string{"check"}, 1000, 1000, "", env)
+		session := podmanTest.PodmanAsUserBase([]string{"check"}, 1000, 1000, "", env, true)
 		os.Unsetenv("HOOK_OPTION")
 		session.WaitWithDefaultTimeout()
 		Expect(session.Command.Process).ShouldNot(BeNil())
diff --git a/test/utils/utils.go b/test/utils/utils.go
index beadab549c..98031385dd 100644
--- a/test/utils/utils.go
+++ b/test/utils/utils.go
@@ -42,6 +42,8 @@ type PodmanTest struct {
 	VarlinkSession     *os.Process
 	VarlinkEndpoint    string
 	VarlinkCommand     *exec.Cmd
+	ImageCacheDir      string
+	ImageCacheFS       string
 }
 
 // PodmanSession wraps the gexec.session so we can extend it
@@ -63,7 +65,7 @@ func (p *PodmanTest) MakeOptions(args []string) []string {
 
 // PodmanAsUserBase exec podman as user. uid and gid is set for credentials useage. env is used
 // to record the env for debugging
-func (p *PodmanTest) PodmanAsUserBase(args []string, uid, gid uint32, cwd string, env []string) *PodmanSession {
+func (p *PodmanTest) PodmanAsUserBase(args []string, uid, gid uint32, cwd string, env []string, nocache bool) *PodmanSession {
 	var command *exec.Cmd
 	podmanOptions := p.MakeOptions(args)
 	podmanBinary := p.PodmanBinary
@@ -71,6 +73,10 @@ func (p *PodmanTest) PodmanAsUserBase(args []string, uid, gid uint32, cwd string
 		podmanBinary = p.RemotePodmanBinary
 		env = append(env, fmt.Sprintf("PODMAN_VARLINK_ADDRESS=%s", p.VarlinkEndpoint))
 	}
+	if !nocache && !p.RemoteTest {
+		cacheOptions := []string{"--storage-opt", fmt.Sprintf("%s.imagestore=%s", p.ImageCacheFS, p.ImageCacheDir)}
+		podmanOptions = append(cacheOptions, podmanOptions...)
+	}
 
 	if env == nil {
 		fmt.Printf("Running: %s %s\n", podmanBinary, strings.Join(podmanOptions, " "))
@@ -99,8 +105,8 @@ func (p *PodmanTest) PodmanAsUserBase(args []string, uid, gid uint32, cwd string
 }
 
 // PodmanBase exec podman with default env.
-func (p *PodmanTest) PodmanBase(args []string) *PodmanSession {
-	return p.PodmanAsUserBase(args, 0, 0, "", nil)
+func (p *PodmanTest) PodmanBase(args []string, nocache bool) *PodmanSession {
+	return p.PodmanAsUserBase(args, 0, 0, "", nil, nocache)
 }
 
 // WaitForContainer waits on a started container
@@ -118,7 +124,7 @@ func (p *PodmanTest) WaitForContainer() bool {
 // containers are currently running.
 func (p *PodmanTest) NumberOfContainersRunning() int {
 	var containers []string
-	ps := p.PodmanBase([]string{"ps", "-q"})
+	ps := p.PodmanBase([]string{"ps", "-q"}, true)
 	ps.WaitWithDefaultTimeout()
 	Expect(ps.ExitCode()).To(Equal(0))
 	for _, i := range ps.OutputToStringArray() {
@@ -133,7 +139,7 @@ func (p *PodmanTest) NumberOfContainersRunning() int {
 // containers are currently defined.
 func (p *PodmanTest) NumberOfContainers() int {
 	var containers []string
-	ps := p.PodmanBase([]string{"ps", "-aq"})
+	ps := p.PodmanBase([]string{"ps", "-aq"}, true)
 	ps.WaitWithDefaultTimeout()
 	Expect(ps.ExitCode()).To(Equal(0))
 	for _, i := range ps.OutputToStringArray() {
@@ -148,7 +154,7 @@ func (p *PodmanTest) NumberOfContainers() int {
 // pods are currently defined.
 func (p *PodmanTest) NumberOfPods() int {
 	var pods []string
-	ps := p.PodmanBase([]string{"pod", "ps", "-q"})
+	ps := p.PodmanBase([]string{"pod", "ps", "-q"}, true)
 	ps.WaitWithDefaultTimeout()
 	Expect(ps.ExitCode()).To(Equal(0))
 	for _, i := range ps.OutputToStringArray() {
@@ -164,7 +170,7 @@ func (p *PodmanTest) NumberOfPods() int {
 func (p *PodmanTest) GetContainerStatus() string {
 	var podmanArgs = []string{"ps"}
 	podmanArgs = append(podmanArgs, "--all", "--format={{.Status}}")
-	session := p.PodmanBase(podmanArgs)
+	session := p.PodmanBase(podmanArgs, true)
 	session.WaitWithDefaultTimeout()
 	return session.OutputToString()
 }
@@ -172,7 +178,7 @@ func (p *PodmanTest) GetContainerStatus() string {
 // WaitContainerReady waits process or service inside container start, and ready to be used.
 func (p *PodmanTest) WaitContainerReady(id string, expStr string, timeout int, step int) bool {
 	startTime := time.Now()
-	s := p.PodmanBase([]string{"logs", id})
+	s := p.PodmanBase([]string{"logs", id}, true)
 	s.WaitWithDefaultTimeout()
 
 	for {
@@ -185,7 +191,7 @@ func (p *PodmanTest) WaitContainerReady(id string, expStr string, timeout int, s
 			return true
 		}
 		time.Sleep(time.Duration(step) * time.Second)
-		s = p.PodmanBase([]string{"logs", id})
+		s = p.PodmanBase([]string{"logs", id}, true)
 		s.WaitWithDefaultTimeout()
 	}
 }