From 1d10ca739f3599b9bd746783ad15c8f51ce9f75c Mon Sep 17 00:00:00 2001
From: cdoern <cdoern@redhat.com>
Date: Fri, 25 Jun 2021 14:26:33 -0400
Subject: Created scp.go image_scp_test.go and podman-image-scp.1.md

added functionality for image secure copying from local to remote.
Also moved system connection add code around a bit so functions within that file
can be used by scp.

Signed-off-by: cdoern <cdoern@redhat.com>
---
 test/e2e/image_scp_test.go | 104 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 104 insertions(+)
 create mode 100644 test/e2e/image_scp_test.go

(limited to 'test')

diff --git a/test/e2e/image_scp_test.go b/test/e2e/image_scp_test.go
new file mode 100644
index 000000000..9fd8d7e27
--- /dev/null
+++ b/test/e2e/image_scp_test.go
@@ -0,0 +1,104 @@
+package integration
+
+import (
+	"io/ioutil"
+	"os"
+
+	"github.com/containers/common/pkg/config"
+	. "github.com/containers/podman/v3/test/utils"
+	. "github.com/onsi/ginkgo"
+	. "github.com/onsi/gomega"
+	. "github.com/onsi/gomega/gexec"
+)
+
+var _ = Describe("podman image scp", func() {
+	ConfPath := struct {
+		Value string
+		IsSet bool
+	}{}
+	var (
+		tempdir    string
+		podmanTest *PodmanTestIntegration
+	)
+
+	BeforeEach(func() {
+		ConfPath.Value, ConfPath.IsSet = os.LookupEnv("CONTAINERS_CONF")
+		conf, err := ioutil.TempFile("", "containersconf")
+		if err != nil {
+			panic(err)
+		}
+		os.Setenv("CONTAINERS_CONF", conf.Name())
+		tempdir, err = CreateTempDirInTempDir()
+		if err != nil {
+			os.Exit(1)
+		}
+		podmanTest = PodmanTestCreate(tempdir)
+		podmanTest.Setup()
+	})
+
+	AfterEach(func() {
+		podmanTest.Cleanup()
+		os.Remove(os.Getenv("CONTAINERS_CONF"))
+		if ConfPath.IsSet {
+			os.Setenv("CONTAINERS_CONF", ConfPath.Value)
+		} else {
+			os.Unsetenv("CONTAINERS_CONF")
+		}
+		f := CurrentGinkgoTestDescription()
+		processTestResult(f)
+
+	})
+
+	It("podman image scp quiet flag", func() {
+		if IsRemote() {
+			Skip("this test is only for non-remote")
+		}
+		scp := podmanTest.Podman([]string{"image", "scp", "-q", ALPINE})
+		scp.WaitWithDefaultTimeout()
+		Expect(scp).To(Exit(0))
+	})
+
+	It("podman image scp bogus image", func() {
+		if IsRemote() {
+			Skip("this test is only for non-remote")
+		}
+		scp := podmanTest.Podman([]string{"image", "scp", "FOOBAR"})
+		scp.WaitWithDefaultTimeout()
+		Expect(scp).To(ExitWithError())
+	})
+
+	It("podman image scp with proper connection", func() {
+		if IsRemote() {
+			Skip("this test is only for non-remote")
+		}
+		cmd := []string{"system", "connection", "add",
+			"--default",
+			"QA",
+			"ssh://root@server.fubar.com:2222/run/podman/podman.sock",
+		}
+		session := podmanTest.Podman(cmd)
+		session.WaitWithDefaultTimeout()
+		Expect(session).To(Exit(0))
+
+		cfg, err := config.ReadCustomConfig()
+		Expect(err).ShouldNot(HaveOccurred())
+		Expect(cfg.Engine.ActiveService).To(Equal("QA"))
+		Expect(cfg.Engine.ServiceDestinations["QA"]).To(Equal(
+			config.Destination{
+				URI: "ssh://root@server.fubar.com:2222/run/podman/podman.sock",
+			},
+		))
+
+		scp := podmanTest.Podman([]string{"image", "scp", ALPINE, "QA::"})
+		scp.Wait(45)
+		// exit with error because we cannot make an actual ssh connection
+		// This tests that the input we are given is validated and prepared correctly
+		// Error: failed to connect: dial tcp: address foo: missing port in address
+		Expect(scp).To(ExitWithError())
+		Expect(scp.ErrorToString()).To(ContainSubstring(
+			"Error: failed to connect: dial tcp 66.151.147.142:2222: i/o timeout",
+		))
+
+	})
+
+})
-- 
cgit v1.2.3-54-g00ecf