这是indexloc提供的服务,不要输入任何密码
Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
304 changes: 142 additions & 162 deletions internal/controller/humiocluster_version_test.go
Original file line number Diff line number Diff line change
@@ -1,177 +1,157 @@
package controller

import (
"fmt"
"testing"

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)

func Test_HumioVersionFromString(t *testing.T) {
type fields struct {
userDefinedImageVersion string
expectedImageVersion string
expectedAssumeLatest bool
}
tests := []struct {
name string
fields fields
}{
{
"image with container image SHA",
fields{
userDefinedImageVersion: "humio/humio-core-dev:1.70.0--build-1023123--uaihdasiuhdiuahd23792f@sha256:4d545bbd0dc3a22d40188947f569566737657c42e4bd14327598299db2b5a38a",
expectedImageVersion: "1.70.0",
expectedAssumeLatest: false,
},
func TestVersions(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Version suite")
}

// versionParsingTestCase defines test cases for HumioVersionFromString function
type versionParsingTestCase struct {
userDefinedImageVersion string // Input Docker image string to parse
expectedImageVersion string // Expected semantic version output
expectedAssumeLatest bool // Expected IsLatest() result
}

var _ = DescribeTable("HumioVersionFromString",
func(testCase versionParsingTestCase) {
gotVersion := HumioVersionFromString(testCase.userDefinedImageVersion)

Expect(testCase.expectedAssumeLatest).To(Equal(gotVersion.IsLatest()),
fmt.Sprintf("HumioVersionFromString(%s) = got %s %v, expected %s %v", testCase.userDefinedImageVersion, "IsLatest", gotVersion.IsLatest(), "IsLatest", testCase.expectedAssumeLatest))

if !testCase.expectedAssumeLatest {
Expect(testCase.expectedImageVersion).To(Equal(gotVersion.String()),
fmt.Sprintf("HumioVersionFromString(%s) = got %s %v, expected %s %v", testCase.userDefinedImageVersion, "image", gotVersion.String(), "image", testCase.expectedImageVersion))
}
},
Entry("image with container image SHA",
versionParsingTestCase{
userDefinedImageVersion: "humio/humio-core-dev:1.70.0--build-1023123--uaihdasiuhdiuahd23792f@sha256:4d545bbd0dc3a22d40188947f569566737657c42e4bd14327598299db2b5a38a",
expectedImageVersion: "1.70.0",
expectedAssumeLatest: false,
},
{
"image without container image SHA",
fields{
userDefinedImageVersion: "humio/humio-core-dev:1.70.0--build-1023123--uaihdasiuhdiuahd23792f",
expectedImageVersion: "1.70.0",
expectedAssumeLatest: false,
},
),
Entry("image without container image SHA",
versionParsingTestCase{
userDefinedImageVersion: "humio/humio-core-dev:1.70.0--build-1023123--uaihdasiuhdiuahd23792f",
expectedImageVersion: "1.70.0",
expectedAssumeLatest: false,
},
{
"image from github issue https://github.com/humio/humio-operator/issues/615",
fields{
userDefinedImageVersion: "humio/humio-core:1.34.0@sha256:38c78710107dc76f4f809b457328ff1c6764ae4244952a5fa7d76f6e67ea2390",
expectedImageVersion: "1.34.0",
expectedAssumeLatest: false,
},
),
Entry("image from github issue https://github.com/humio/humio-operator/issues/615",
versionParsingTestCase{
userDefinedImageVersion: "humio/humio-core:1.34.0@sha256:38c78710107dc76f4f809b457328ff1c6764ae4244952a5fa7d76f6e67ea2390",
expectedImageVersion: "1.34.0",
expectedAssumeLatest: false,
},
{
"short image version",
fields{
userDefinedImageVersion: "humio/humio-core:1.34.0",
expectedImageVersion: "1.34.0",
expectedAssumeLatest: false,
},
),
Entry("short image version",
versionParsingTestCase{
userDefinedImageVersion: "humio/humio-core:1.34.0",
expectedImageVersion: "1.34.0",
expectedAssumeLatest: false,
},
{
"master image tag",
fields{
userDefinedImageVersion: "humio/humio-core:master",
expectedImageVersion: "",
expectedAssumeLatest: true,
},
),
Entry("master image tag",
versionParsingTestCase{
userDefinedImageVersion: "humio/humio-core:master",
expectedImageVersion: "",
expectedAssumeLatest: true,
},
{
"preview image tag",
fields{
userDefinedImageVersion: "humio/humio-core:preview",
expectedImageVersion: "",
expectedAssumeLatest: true,
},
),
Entry("preview image tag",
versionParsingTestCase{
userDefinedImageVersion: "humio/humio-core:preview",
expectedImageVersion: "",
expectedAssumeLatest: true,
},
{
"latest image tag",
fields{
userDefinedImageVersion: "humio/humio-core:latest",
expectedImageVersion: "",
expectedAssumeLatest: true,
},
),
Entry("latest image tag",
versionParsingTestCase{
userDefinedImageVersion: "humio/humio-core:latest",
expectedImageVersion: "",
expectedAssumeLatest: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotVersion := HumioVersionFromString(tt.fields.userDefinedImageVersion)

if gotVersion.IsLatest() != tt.fields.expectedAssumeLatest {
t.Errorf("HumioVersionFromString(%s) = got IsLatest %t, expected IsLatest %t", tt.fields.userDefinedImageVersion, gotVersion.IsLatest(), tt.fields.expectedAssumeLatest)
}

if !tt.fields.expectedAssumeLatest && gotVersion.String() != tt.fields.expectedImageVersion {
t.Errorf("HumioVersionFromString(%s) = got image %s, expected image %s", tt.fields.userDefinedImageVersion, gotVersion.String(), tt.fields.expectedImageVersion)
}
})
}
}
))

func Test_humioVersion_AtLeast(t *testing.T) {
type fields struct {
userDefinedImageVersion string
imageVersionOlder string
imageVersionExact string
imageVersionNewer string
expectedErr bool
}
tests := []struct {
name string
fields fields
}{
{
"image with container image SHA",
fields{
userDefinedImageVersion: "humio/humio-core-dev:1.70.0--build-1023123--uaihdasiuhdiuahd23792f@sha256:4d545bbd0dc3a22d40188947f569566737657c42e4bd14327598299db2b5a38a",
imageVersionOlder: "1.69.0",
imageVersionExact: "1.70.0",
imageVersionNewer: "1.70.1",
expectedErr: false,
},
},
{
"image without container image SHA",
fields{
userDefinedImageVersion: "humio/humio-core-dev:1.70.0--build-1023123--uaihdasiuhdiuahd23792f",
imageVersionOlder: "1.50.5",
imageVersionExact: "1.70.0",
imageVersionNewer: "1.71.0",
expectedErr: false,
},
},
{
"image from github issue https://github.com/humio/humio-operator/issues/615",
fields{
userDefinedImageVersion: "humio/humio-core:1.34.0@sha256:38c78710107dc76f4f809b457328ff1c6764ae4244952a5fa7d76f6e67ea2390",
imageVersionOlder: "1.33.0",
imageVersionExact: "1.34.0",
imageVersionNewer: "1.35.0",
expectedErr: false,
},
},
{
"short image version",
fields{
userDefinedImageVersion: "humio/humio-core:1.34.0",
imageVersionOlder: "1.1.5",
imageVersionExact: "1.34.0",
imageVersionNewer: "1.100.0",
expectedErr: false,
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
humioVersion := HumioVersionFromString(tt.fields.userDefinedImageVersion)
if humioVersion.String() != tt.fields.imageVersionExact {
t.Errorf("HumioVersion.AtLeast(%s) = got %s, expected %s", tt.fields.userDefinedImageVersion, humioVersion.String(), tt.fields.userDefinedImageVersion)
}

// Verify current version is newer than older image
atLeast, err := humioVersion.AtLeast(tt.fields.imageVersionOlder)
if (err != nil) != tt.fields.expectedErr {
t.Errorf("HumioVersion(%s).AtLeast(%s) = got err %v, expected err %v", tt.fields.userDefinedImageVersion, tt.fields.imageVersionOlder, err, tt.fields.expectedErr)
}
if !atLeast {
t.Errorf("HumioVersion(%s).AtLeast(%s) = got %t, expected true", tt.fields.userDefinedImageVersion, tt.fields.imageVersionOlder, atLeast)
}

// Verify version exactly the same as the specified image is reported as at least the exact
atLeast, err = humioVersion.AtLeast(tt.fields.imageVersionExact)
if (err != nil) != tt.fields.expectedErr {
t.Errorf("HumioVersion(%s).AtLeast(%s) = got err %v, expected err %v", tt.fields.userDefinedImageVersion, tt.fields.imageVersionExact, err, tt.fields.expectedErr)
}
if !atLeast {
t.Errorf("HumioVersion(%s).AtLeast(%s) = got %t, expected true", tt.fields.userDefinedImageVersion, tt.fields.imageVersionExact, atLeast)
}

// Verify current version reports false to be AtLeast for images newer
atLeast, err = humioVersion.AtLeast(tt.fields.imageVersionNewer)
if (err != nil) != tt.fields.expectedErr {
t.Errorf("HumioVersion(%s).AtLeast(%s) = got err %v, expected err %v", tt.fields.userDefinedImageVersion, tt.fields.imageVersionNewer, err, tt.fields.expectedErr)
}
if atLeast {
t.Errorf("HumioVersion(%s).AtLeast(%s) = got %t, expected false", tt.fields.userDefinedImageVersion, tt.fields.imageVersionNewer, atLeast)
}
})
}
// versionComparisonTestCase defines test cases for HumioVersion.AtLeast function
type versionComparisonTestCase struct {
userDefinedImageVersion string // Input Docker image string to parse
imageVersionOlder string // Version that should be older than parsed version
imageVersionExact string // Version that should be exactly equal to parsed version
imageVersionNewer string // Version that should be newer than parsed version
expectedErr bool // Expected error result
}

var _ = DescribeTable("HumioVersionAtLeast",
func(testCase versionComparisonTestCase) {
humioVersion := HumioVersionFromString(testCase.userDefinedImageVersion)

Expect(testCase.imageVersionExact).To(Equal(humioVersion.String()),
fmt.Sprintf("HumioVersion.AtLeast(%s) = got %s, expected %s", testCase.userDefinedImageVersion, humioVersion.String(), testCase.userDefinedImageVersion))

// Verify current version is newer than older image
atLeast, err := humioVersion.AtLeast(testCase.imageVersionOlder)
Expect(testCase.expectedErr).To(Equal(err != nil),
fmt.Sprintf("HumioVersion(%s).AtLeast(%s) = got err %v, expected err %v", testCase.userDefinedImageVersion, testCase.imageVersionOlder, err, testCase.expectedErr))

Expect(atLeast).To(BeTrue(),
fmt.Sprintf("HumioVersion(%s).AtLeast(%s) = got %t, expected %t", testCase.userDefinedImageVersion, testCase.imageVersionOlder, atLeast, true))

// Verify version exactly the same as the specified image is reported as at least the exact
atLeast, err = humioVersion.AtLeast(testCase.imageVersionExact)
Expect(testCase.expectedErr).To(Equal(err != nil),
fmt.Sprintf("HumioVersion(%s).AtLeast(%s) = got err %v, expected err %v", testCase.userDefinedImageVersion, testCase.imageVersionExact, err, testCase.expectedErr))

Expect(atLeast).To(BeTrue(),
fmt.Sprintf("HumioVersion(%s).AtLeast(%s) = got %t, expected %t", testCase.userDefinedImageVersion, testCase.imageVersionExact, atLeast, true))

// Verify current version reports false to be AtLeast for images newer
atLeast, err = humioVersion.AtLeast(testCase.imageVersionNewer)
Expect(testCase.expectedErr).To(Equal(err != nil),
fmt.Sprintf("HumioVersion(%s).AtLeast(%s) = got err %v, expected err %v", testCase.userDefinedImageVersion, testCase.imageVersionNewer, err, testCase.expectedErr))

Expect(atLeast).To(BeFalse(),
fmt.Sprintf("HumioVersion(%s).AtLeast(%s) = got %t, expected %t", testCase.userDefinedImageVersion, testCase.imageVersionNewer, atLeast, false))
},
Entry("image with container image SHA",
versionComparisonTestCase{
userDefinedImageVersion: "humio/humio-core-dev:1.70.0--build-1023123--uaihdasiuhdiuahd23792f@sha256:4d545bbd0dc3a22d40188947f569566737657c42e4bd14327598299db2b5a38a",
imageVersionOlder: "1.69.0",
imageVersionExact: "1.70.0",
imageVersionNewer: "1.70.1",
expectedErr: false,
}),
Entry("image without container image SHA",
versionComparisonTestCase{
userDefinedImageVersion: "humio/humio-core-dev:1.70.0--build-1023123--uaihdasiuhdiuahd23792f",
imageVersionOlder: "1.50.5",
imageVersionExact: "1.70.0",
imageVersionNewer: "1.71.0",
expectedErr: false,
}),
Entry("image from github issue https://github.com/humio/humio-operator/issues/615",
versionComparisonTestCase{
userDefinedImageVersion: "humio/humio-core:1.34.0@sha256:38c78710107dc76f4f809b457328ff1c6764ae4244952a5fa7d76f6e67ea2390",
imageVersionOlder: "1.33.0",
imageVersionExact: "1.34.0",
imageVersionNewer: "1.35.0",
expectedErr: false,
}),
Entry("short image version",
versionComparisonTestCase{
userDefinedImageVersion: "humio/humio-core:1.34.0",
imageVersionOlder: "1.1.5",
imageVersionExact: "1.34.0",
imageVersionNewer: "1.100.0",
expectedErr: false,
}),
)
Loading