From 7958b9f0ccbbc1be2028d7cf7ed8971c4832f259 Mon Sep 17 00:00:00 2001 From: Gabe Rosenhouse Date: Tue, 6 Sep 2016 15:24:12 -0400 Subject: [PATCH] versioning: revert spec version to 0.2.0 --- SPEC.md | 14 +++--- libcni/api_test.go | 2 +- pkg/invoke/get_version_integration_test.go | 40 ++++++++++++----- pkg/skel/skel_test.go | 2 +- pkg/version/plugin_test.go | 51 ++++++++++++---------- pkg/version/version.go | 6 +-- plugins/test/noop/main.go | 2 +- plugins/test/noop/noop_test.go | 4 +- 8 files changed, 73 insertions(+), 48 deletions(-) diff --git a/SPEC.md b/SPEC.md index 91c85d30..82966add 100644 --- a/SPEC.md +++ b/SPEC.md @@ -68,8 +68,8 @@ The operations that the CNI plugin needs to support are: ``` { - "cniVersion": "0.3.0", // the version of the CNI spec in use for this output - "supportedVersions": [ "0.1.0", "0.2.0", "0.3.0" ] // the list of CNI spec versions that this plugin supports + "cniVersion": "0.2.0", // the version of the CNI spec in use for this output + "supportedVersions": [ "0.1.0", "0.2.0" ] // the list of CNI spec versions that this plugin supports } ``` @@ -91,7 +91,7 @@ Success is indicated by a return code of zero and the following JSON printed to ``` { - "cniVersion": "0.3.0", + "cniVersion": "0.2.0", "ip4": { "ip": , "gateway": , (optional) @@ -120,7 +120,7 @@ Examples include generating an `/etc/resolv.conf` file to be injected into the c Errors are indicated by a non-zero return code and the following JSON being printed to stdout: ``` { - "cniVersion": "0.3.0", + "cniVersion": "0.2.0", "code": , "msg": , "details": (optional) @@ -157,7 +157,7 @@ Plugins may define additional fields that they accept and may generate an error ```json { - "cniVersion": "0.3.0", + "cniVersion": "0.2.0", "name": "dbnet", "type": "bridge", // type (plugin) specific @@ -176,7 +176,7 @@ Plugins may define additional fields that they accept and may generate an error ```json { - "cniVersion": "0.3.0", + "cniVersion": "0.2.0", "name": "pci", "type": "ovs", // type (plugin) specific @@ -226,7 +226,7 @@ Success is indicated by a zero return code and the following JSON being printed ``` { - "cniVersion": "0.3.0", + "cniVersion": "0.2.0", "ip4": { "ip": , "gateway": , (optional) diff --git a/libcni/api_test.go b/libcni/api_test.go index 5e0dd0fe..6ac88e89 100644 --- a/libcni/api_test.go +++ b/libcni/api_test.go @@ -163,7 +163,7 @@ var _ = Describe("Invoking the plugin", func() { Expect(versionInfo).NotTo(BeNil()) Expect(versionInfo.SupportedVersions()).To(Equal([]string{ - "0.-42.0", "0.1.0", "0.2.0", "0.3.0", + "0.-42.0", "0.1.0", "0.2.0", })) }) diff --git a/pkg/invoke/get_version_integration_test.go b/pkg/invoke/get_version_integration_test.go index d10826dd..7e58a9be 100644 --- a/pkg/invoke/get_version_integration_test.go +++ b/pkg/invoke/get_version_integration_test.go @@ -52,15 +52,33 @@ var _ = Describe("GetVersion, integration tests", func() { Expect(versionInfo.SupportedVersions()).To(ConsistOf(expectedVersions.SupportedVersions())) }, - Entry("old plugin, before VERSION was introduced", git_ref_v010, plugin_source_v010, version.PluginSupports("0.1.0")), - Entry("when VERSION was introduced", git_ref_v020, plugin_source_v010, version.PluginSupports("0.1.0", "0.2.0")), - Entry("when plugins report their own version support", git_ref_v030, plugin_source_v030, version.PluginSupports("0.3.0", "0.999.0")), - Entry("HEAD", "HEAD", plugin_source_v030, version.PluginSupports("0.3.0", "0.999.0")), + + Entry("historical: before VERSION was introduced", + git_ref_v010, plugin_source_no_custom_versions, + version.PluginSupports("0.1.0"), + ), + + Entry("historical: when VERSION was introduced but plugins couldn't customize it", + git_ref_v020_no_custom_versions, plugin_source_no_custom_versions, + version.PluginSupports("0.1.0", "0.2.0"), + ), + + Entry("historical: when plugins started reporting their own version list", + git_ref_v020_custom_versions, plugin_source_v020_custom_versions, + version.PluginSupports("0.2.0", "0.999.0"), + ), + + // this entry tracks the current behavior. Before you change it, ensure + // that its previous behavior is captured in the most recent "historical" entry + Entry("current", + "HEAD", plugin_source_v020_custom_versions, + version.PluginSupports("0.2.0", "0.999.0"), + ), ) }) -// a 0.3.0 plugin that can report its own versions -const plugin_source_v030 = `package main +// a 0.2.0 plugin that can report its own versions +const plugin_source_v020_custom_versions = `package main import ( "github.com/containernetworking/cni/pkg/skel" @@ -70,12 +88,12 @@ import ( func c(_ *skel.CmdArgs) error { fmt.Println("{}"); return nil } -func main() { skel.PluginMain(c, c, version.PluginSupports("0.3.0", "0.999.0")) } +func main() { skel.PluginMain(c, c, version.PluginSupports("0.2.0", "0.999.0")) } ` -const git_ref_v030 = "bf31ed15" +const git_ref_v020_custom_versions = "bf31ed15" -// a minimal 0.1.0 / 0.2.0 plugin -const plugin_source_v010 = `package main +// a minimal 0.1.0 / 0.2.0 plugin that cannot report it's own version support +const plugin_source_no_custom_versions = `package main import "github.com/containernetworking/cni/pkg/skel" import "fmt" @@ -86,4 +104,4 @@ func main() { skel.PluginMain(c, c) } ` const git_ref_v010 = "2c482f4" -const git_ref_v020 = "349d66d" +const git_ref_v020_no_custom_versions = "349d66d" diff --git a/pkg/skel/skel_test.go b/pkg/skel/skel_test.go index 0431abbb..1cc533bd 100644 --- a/pkg/skel/skel_test.go +++ b/pkg/skel/skel_test.go @@ -186,7 +186,7 @@ var _ = Describe("dispatching to the correct callback", func() { Expect(err).NotTo(HaveOccurred()) Expect(stdout).To(MatchJSON(`{ - "cniVersion": "0.3.0", + "cniVersion": "0.2.0", "supportedVersions": ["9.8.7"] }`)) }) diff --git a/pkg/version/plugin_test.go b/pkg/version/plugin_test.go index a58bd35a..124288fd 100644 --- a/pkg/version/plugin_test.go +++ b/pkg/version/plugin_test.go @@ -21,17 +21,21 @@ import ( ) var _ = Describe("Decoding versions reported by a plugin", func() { - var decoder *version.PluginDecoder + var ( + decoder *version.PluginDecoder + versionStdout []byte + ) BeforeEach(func() { decoder = &version.PluginDecoder{} + versionStdout = []byte(`{ + "cniVersion": "some-library-version", + "supportedVersions": [ "some-version", "some-other-version" ] + }`) }) It("returns a PluginInfo that represents the given json bytes", func() { - pluginInfo, err := decoder.Decode([]byte(`{ - "cniVersion": "some-library-version", - "supportedVersions": [ "some-version", "some-other-version" ] - }`)) + pluginInfo, err := decoder.Decode(versionStdout) Expect(err).NotTo(HaveOccurred()) Expect(pluginInfo).NotTo(BeNil()) Expect(pluginInfo.SupportedVersions()).To(Equal([]string{ @@ -41,37 +45,40 @@ var _ = Describe("Decoding versions reported by a plugin", func() { }) Context("when the bytes cannot be decoded as json", func() { + BeforeEach(func() { + versionStdout = []byte(`{{{`) + }) + It("returns a meaningful error", func() { - _, err := decoder.Decode([]byte(`{{{`)) + _, err := decoder.Decode(versionStdout) Expect(err).To(MatchError("decoding version info: invalid character '{' looking for beginning of object key string")) }) }) Context("when the json bytes are missing the required CNIVersion field", func() { + BeforeEach(func() { + versionStdout = []byte(`{ "supportedVersions": [ "foo" ] }`) + }) + It("returns a meaningful error", func() { - _, err := decoder.Decode([]byte(`{ "supportedVersions": [ "foo" ] }`)) + _, err := decoder.Decode(versionStdout) Expect(err).To(MatchError("decoding version info: missing field cniVersion")) }) }) Context("when there are no supported versions", func() { - Context("when the cniVersion is 0.2.0", func() { - It("infers the supported versions are 0.1.0 and 0.2.0", func() { - pluginInfo, err := decoder.Decode([]byte(`{ "cniVersion": "0.2.0" }`)) - Expect(err).NotTo(HaveOccurred()) - Expect(pluginInfo).NotTo(BeNil()) - Expect(pluginInfo.SupportedVersions()).To(Equal([]string{ - "0.1.0", - "0.2.0", - })) - }) + BeforeEach(func() { + versionStdout = []byte(`{ "cniVersion": "0.2.0" }`) }) - Context("when the cniVersion is >= 0.3.0", func() { - It("returns a meaningful error", func() { - _, err := decoder.Decode([]byte(`{ "cniVersion": "0.3.0" }`)) - Expect(err).To(MatchError("decoding version info: missing field supportedVersions")) - }) + It("assumes that the supported versions are 0.1.0 and 0.2.0", func() { + pluginInfo, err := decoder.Decode(versionStdout) + Expect(err).NotTo(HaveOccurred()) + Expect(pluginInfo).NotTo(BeNil()) + Expect(pluginInfo.SupportedVersions()).To(Equal([]string{ + "0.1.0", + "0.2.0", + })) }) }) diff --git a/pkg/version/version.go b/pkg/version/version.go index 5f937f7e..e39c3b55 100644 --- a/pkg/version/version.go +++ b/pkg/version/version.go @@ -16,7 +16,7 @@ package version // Current reports the version of the CNI spec implemented by this library func Current() string { - return "0.3.0" + return "0.2.0" } // Legacy PluginInfo describes a plugin that is backwards compatible with the @@ -24,6 +24,6 @@ func Current() string { // library ought to work correctly with a plugin that reports support for // Legacy versions. // -// Any future CNI spec versions which meet this definition will be added to +// Any future CNI spec versions which meet this definition should be added to // this list. -var Legacy = PluginSupports("0.1.0", "0.2.0", "0.3.0") +var Legacy = PluginSupports("0.1.0", "0.2.0") diff --git a/plugins/test/noop/main.go b/plugins/test/noop/main.go index 6d6237df..d3c5698f 100644 --- a/plugins/test/noop/main.go +++ b/plugins/test/noop/main.go @@ -64,7 +64,7 @@ func debugBehavior(args *skel.CmdArgs, command string) error { } func debugGetSupportedVersions() []string { - vers := []string{"0.-42.0", "0.1.0", "0.2.0", "0.3.0"} + vers := []string{"0.-42.0", "0.1.0", "0.2.0"} cniArgs := os.Getenv("CNI_ARGS") if cniArgs == "" { return vers diff --git a/plugins/test/noop/noop_test.go b/plugins/test/noop/noop_test.go index 968cc838..cb44817f 100644 --- a/plugins/test/noop/noop_test.go +++ b/plugins/test/noop/noop_test.go @@ -131,7 +131,7 @@ var _ = Describe("No-op plugin", func() { Context("when the CNI_COMMAND is VERSION", func() { BeforeEach(func() { cmd.Env[0] = "CNI_COMMAND=VERSION" - debug.ReportVersionSupport = []string{"0.123.0", "0.3.0"} + debug.ReportVersionSupport = []string{"0.123.0", "0.2.0"} Expect(debug.WriteDebug(debugFileName)).To(Succeed()) }) @@ -144,7 +144,7 @@ var _ = Describe("No-op plugin", func() { pluginInfo, err := decoder.Decode(session.Out.Contents()) Expect(err).NotTo(HaveOccurred()) Expect(pluginInfo.SupportedVersions()).To(ConsistOf( - "0.123.0", "0.3.0")) + "0.123.0", "0.2.0")) }) }) })