From bf31ed1591effba2a9c5d8395a7c580c0738f7de Mon Sep 17 00:00:00 2001 From: Gabe Rosenhouse Date: Fri, 2 Sep 2016 16:39:01 -0400 Subject: [PATCH] invoke: better name and unit test coverage for GetVersionInfo --- libcni/api.go | 2 +- pkg/invoke/exec.go | 12 ++++++------ pkg/invoke/exec_integration_test.go | 2 +- pkg/invoke/exec_test.go | 28 +++++++++++++++++++++++++--- 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/libcni/api.go b/libcni/api.go index 08883250..273123d8 100644 --- a/libcni/api.go +++ b/libcni/api.go @@ -67,7 +67,7 @@ func (c *CNIConfig) GetVersionInfo(pluginType string) (version.PluginInfo, error return nil, err } - return invoke.ExecPluginForVersion(pluginPath) + return invoke.GetVersionInfo(pluginPath) } // ===== diff --git a/pkg/invoke/exec.go b/pkg/invoke/exec.go index fe792b62..68efbb9b 100644 --- a/pkg/invoke/exec.go +++ b/pkg/invoke/exec.go @@ -30,8 +30,8 @@ func ExecPluginWithoutResult(pluginPath string, netconf []byte, args CNIArgs) er return defaultPluginExec.WithoutResult(pluginPath, netconf, args) } -func ExecPluginForVersion(pluginPath string) (version.PluginInfo, error) { - return defaultPluginExec.GetVersion(pluginPath) +func GetVersionInfo(pluginPath string) (version.PluginInfo, error) { + return defaultPluginExec.GetVersionInfo(pluginPath) } var defaultPluginExec = &PluginExec{ @@ -64,14 +64,14 @@ func (e *PluginExec) WithoutResult(pluginPath string, netconf []byte, args CNIAr return err } -func (e *PluginExec) GetVersion(pluginPath string) (version.PluginInfo, error) { +func (e *PluginExec) GetVersionInfo(pluginPath string) (version.PluginInfo, error) { args := &Args{ Command: "VERSION", // set fake values required by plugins built against an older version of skel - NetNS: "/tmp/not/a/container", - IfName: "not-an-interface", - Path: "/tmp/not/a/path", + NetNS: "dummy", + IfName: "dummy", + Path: "dummy", } stdoutBytes, err := e.RawExec.ExecPlugin(pluginPath, nil, args.AsEnv()) if err != nil { diff --git a/pkg/invoke/exec_integration_test.go b/pkg/invoke/exec_integration_test.go index c16090ad..f02374c0 100644 --- a/pkg/invoke/exec_integration_test.go +++ b/pkg/invoke/exec_integration_test.go @@ -47,7 +47,7 @@ var _ = Describe("GetVersion, integration tests", func() { DescribeTable("correctly reporting plugin versions", func(gitRef string, pluginSource string, expectedVersions version.PluginInfo) { Expect(testhelpers.BuildAt([]byte(pluginSource), gitRef, pluginPath)).To(Succeed()) - versionInfo, err := invoke.ExecPluginForVersion(pluginPath) + versionInfo, err := invoke.GetVersionInfo(pluginPath) Expect(err).NotTo(HaveOccurred()) Expect(versionInfo.SupportedVersions()).To(ConsistOf(expectedVersions.SupportedVersions())) diff --git a/pkg/invoke/exec_test.go b/pkg/invoke/exec_test.go index 7b591f17..94007d7c 100644 --- a/pkg/invoke/exec_test.go +++ b/pkg/invoke/exec_test.go @@ -103,14 +103,14 @@ var _ = Describe("Executing a plugin, unit tests", func() { }) It("execs the plugin with the command VERSION", func() { - pluginExec.GetVersion(pluginPath) + pluginExec.GetVersionInfo(pluginPath) Expect(rawExec.ExecPluginCall.Received.PluginPath).To(Equal(pluginPath)) Expect(rawExec.ExecPluginCall.Received.StdinData).To(BeNil()) Expect(rawExec.ExecPluginCall.Received.Environ).To(ContainElement("CNI_COMMAND=VERSION")) }) It("decodes and returns the version info", func() { - versionInfo, err := pluginExec.GetVersion(pluginPath) + versionInfo, err := pluginExec.GetVersionInfo(pluginPath) Expect(err).NotTo(HaveOccurred()) Expect(versionInfo.SupportedVersions()).To(Equal([]string{"0.42.0"})) Expect(versionDecoder.DecodeCall.Received.JSONBytes).To(MatchJSON(`{ "some": "version-info" }`)) @@ -121,9 +121,31 @@ var _ = Describe("Executing a plugin, unit tests", func() { rawExec.ExecPluginCall.Returns.Error = errors.New("banana") }) It("returns the error", func() { - _, err := pluginExec.GetVersion(pluginPath) + _, err := pluginExec.GetVersionInfo(pluginPath) Expect(err).To(MatchError("banana")) }) }) + + Context("when the plugin is too old to recognize the VERSION command", func() { + BeforeEach(func() { + rawExec.ExecPluginCall.Returns.Error = errors.New("unknown CNI_COMMAND: VERSION") + }) + + It("interprets the error as a 0.1.0 version", func() { + versionInfo, err := pluginExec.GetVersionInfo(pluginPath) + Expect(err).NotTo(HaveOccurred()) + Expect(versionInfo.SupportedVersions()).To(ConsistOf("0.1.0")) + }) + + It("sets dummy values for env vars required by very old plugins", func() { + pluginExec.GetVersionInfo(pluginPath) + + env := rawExec.ExecPluginCall.Received.Environ + Expect(env).To(ContainElement("CNI_NETNS=dummy")) + Expect(env).To(ContainElement("CNI_IFNAME=dummy")) + Expect(env).To(ContainElement("CNI_PATH=dummy")) + }) + }) + }) })