From 6ef6e67010838bd6cb2ed6e501c5c6b40e6d5976 Mon Sep 17 00:00:00 2001 From: Tyler Yahn Date: Wed, 24 Jan 2024 13:31:17 -0800 Subject: [PATCH] Replace FileFormat with FileFormatRange --- schema/parser.go | 4 ++-- schema/schema.go | 11 ++++++++--- schema/schema_test.go | 18 +++++++++--------- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/schema/parser.go b/schema/parser.go index 49eea253713..427bb04945c 100644 --- a/schema/parser.go +++ b/schema/parser.go @@ -36,8 +36,8 @@ func ParseFile(path string) (*Schema, error) { // Parse parses a Schema read from r. // -// If r contains a Schema with a file format version higher than FileFormat, an -// error will be returned. +// If r contains a Schema with a file format version outside FileFormatRange, +// an error will be returned. // // If r contains an invalid schema URL an error will be returned. func Parse(r io.Reader) (*Schema, error) { diff --git a/schema/schema.go b/schema/schema.go index 2429f839279..3ebf96600ab 100644 --- a/schema/schema.go +++ b/schema/schema.go @@ -23,9 +23,14 @@ import ( "github.com/Masterminds/semver/v3" ) -// FileFormat is the highest schema file format version this package is +// FileFormatRange defines the file format version range this package is // compatible with. -var FileFormat = semver.New(1, 1, 0, "", "") +var FileFormatRange = struct { + Min, Max *semver.Version +}{ + Min: semver.New(1, 0, 0, "", ""), + Max: semver.New(1, 1, 0, "", ""), +} // Schema represents an OpenTelemetry [Schema file]. // @@ -66,7 +71,7 @@ func (s *Schema) validate() error { return fmt.Errorf("invalid file format version: %q: %w", s.FileFormat, err) } - if FileFormat.LessThan(ffVer) { + if FileFormatRange.Max.LessThan(ffVer) || FileFormatRange.Min.GreaterThan(ffVer) { return fmt.Errorf("%w: %q", errUnsupportVer, ffVer) } diff --git a/schema/schema_test.go b/schema/schema_test.go index 89167ea18b9..45babd00ee6 100644 --- a/schema/schema_test.go +++ b/schema/schema_test.go @@ -19,9 +19,10 @@ import ( "github.com/Masterminds/semver/v3" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) +var fileFormat = "1.1.0" + func TestSchemaInvalidFileFormat(t *testing.T) { s := &Schema{ FileFormat: "not a semver", @@ -32,25 +33,24 @@ func TestSchemaInvalidFileFormat(t *testing.T) { func TestSchemaUnsupportedFileFormat(t *testing.T) { versions := []*semver.Version{ - semver.New(FileFormat.Major()+1, 0, 0, "", ""), - semver.New(FileFormat.Major(), FileFormat.Minor()+1, 0, "", ""), - semver.New(FileFormat.Major(), FileFormat.Minor(), FileFormat.Patch()+1, "", ""), + semver.New(FileFormatRange.Min.Major()-1, 0, 0, "", ""), + semver.New(FileFormatRange.Max.Major()+1, 0, 0, "", ""), + semver.New(FileFormatRange.Max.Major(), FileFormatRange.Max.Minor()+1, 0, "", ""), + semver.New(FileFormatRange.Max.Major(), FileFormatRange.Max.Minor(), FileFormatRange.Max.Patch()+1, "", ""), } for _, v := range versions { - // Sanity check. - require.Truef(t, FileFormat.LessThan(v), "sanity check failed: %s >= %s", FileFormat, v) s := &Schema{FileFormat: v.String(), SchemaURL: "http://localhost"} - assert.ErrorIsf(t, s.validate(), errUnsupportVer, "unsupported version: %s", v) + assert.Error(t, s.validate(), "unsupported version: %s", v) } } func TestSchemaMissingSchemaURL(t *testing.T) { - s := &Schema{FileFormat: FileFormat.String(), SchemaURL: " "} + s := &Schema{FileFormat: fileFormat, SchemaURL: " "} assert.ErrorIs(t, s.validate(), errMissingURL) } func TestSchemaInvalidSchemaURL(t *testing.T) { u := "\no\t \a valid URL" - s := &Schema{FileFormat: FileFormat.String(), SchemaURL: u} + s := &Schema{FileFormat: fileFormat, SchemaURL: u} assert.ErrorContains(t, s.validate(), "invalid schema URL", u) }