mirror of
https://github.com/kubescape/kubescape.git
synced 2026-04-15 06:58:11 +00:00
182 lines
6.5 KiB
Go
182 lines
6.5 KiB
Go
package cautils
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/armosec/armoapi-go/armotypes"
|
|
"github.com/kubescape/opa-utils/reporthandling"
|
|
"github.com/stretchr/testify/assert"
|
|
"golang.org/x/mod/semver"
|
|
)
|
|
|
|
func TestGetKubernetesObjects(t *testing.T) {
|
|
}
|
|
|
|
var rule_v1_0_131 = &reporthandling.PolicyRule{PortalBase: armotypes.PortalBase{
|
|
Attributes: map[string]interface{}{"useUntilKubescapeVersion": "v1.0.132"}}}
|
|
var rule_v1_0_132 = &reporthandling.PolicyRule{PortalBase: armotypes.PortalBase{
|
|
Attributes: map[string]interface{}{"useFromKubescapeVersion": "v1.0.132", "useUntilKubescapeVersion": "v1.0.133"}}}
|
|
var rule_v1_0_133 = &reporthandling.PolicyRule{PortalBase: armotypes.PortalBase{
|
|
Attributes: map[string]interface{}{"useFromKubescapeVersion": "v1.0.133", "useUntilKubescapeVersion": "v1.0.134"}}}
|
|
var rule_v1_0_134 = &reporthandling.PolicyRule{PortalBase: armotypes.PortalBase{
|
|
Attributes: map[string]interface{}{"useFromKubescapeVersion": "v1.0.134"}}}
|
|
var rule_invalid_from = &reporthandling.PolicyRule{PortalBase: armotypes.PortalBase{
|
|
Attributes: map[string]interface{}{"useFromKubescapeVersion": 1.0135, "useUntilKubescapeVersion": "v1.0.135"}}}
|
|
var rule_invalid_until = &reporthandling.PolicyRule{PortalBase: armotypes.PortalBase{
|
|
Attributes: map[string]interface{}{"useFromKubescapeVersion": "v1.0.135", "useUntilKubescapeVersion": 1.0135}}}
|
|
|
|
func TestIsRuleKubescapeVersionCompatible(t *testing.T) {
|
|
// local build- no build number
|
|
|
|
// should not crash when the value of useUntilKubescapeVersion is not a string
|
|
buildNumberMock := "v1.0.135"
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_invalid_from.Attributes, buildNumberMock))
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_invalid_until.Attributes, buildNumberMock))
|
|
// should use only rules that don't have "until"
|
|
buildNumberMock = ""
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_v1_0_131.Attributes, buildNumberMock))
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_v1_0_132.Attributes, buildNumberMock))
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_v1_0_133.Attributes, buildNumberMock))
|
|
assert.True(t, isRuleKubescapeVersionCompatible(rule_v1_0_134.Attributes, buildNumberMock))
|
|
|
|
// should only use rules that version is in range of use
|
|
buildNumberMock = "v1.0.130"
|
|
assert.True(t, isRuleKubescapeVersionCompatible(rule_v1_0_131.Attributes, buildNumberMock))
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_v1_0_132.Attributes, buildNumberMock))
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_v1_0_133.Attributes, buildNumberMock))
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_v1_0_134.Attributes, buildNumberMock))
|
|
|
|
// should only use rules that version is in range of use
|
|
buildNumberMock = "v1.0.132"
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_v1_0_131.Attributes, buildNumberMock))
|
|
assert.True(t, isRuleKubescapeVersionCompatible(rule_v1_0_132.Attributes, buildNumberMock))
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_v1_0_133.Attributes, buildNumberMock))
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_v1_0_134.Attributes, buildNumberMock))
|
|
|
|
// should only use rules that version is in range of use
|
|
buildNumberMock = "v1.0.133"
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_v1_0_131.Attributes, buildNumberMock))
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_v1_0_132.Attributes, buildNumberMock))
|
|
assert.True(t, isRuleKubescapeVersionCompatible(rule_v1_0_133.Attributes, buildNumberMock))
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_v1_0_134.Attributes, buildNumberMock))
|
|
|
|
// should only use rules that version is in range of use
|
|
buildNumberMock = "v1.0.135"
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_v1_0_131.Attributes, buildNumberMock))
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_v1_0_132.Attributes, buildNumberMock))
|
|
assert.False(t, isRuleKubescapeVersionCompatible(rule_v1_0_133.Attributes, buildNumberMock))
|
|
assert.True(t, isRuleKubescapeVersionCompatible(rule_v1_0_134.Attributes, buildNumberMock))
|
|
}
|
|
|
|
func TestCheckLatestVersion_Semver_Compare(t *testing.T) {
|
|
assert.Equal(t, -1, semver.Compare("v2.0.150", "v2.0.151"))
|
|
assert.Equal(t, 0, semver.Compare("v2.0.150", "v2.0.150"))
|
|
assert.Equal(t, 1, semver.Compare("v2.0.150", "v2.0.149"))
|
|
assert.Equal(t, -1, semver.Compare("v2.0.150", "v3.0.150"))
|
|
|
|
}
|
|
|
|
func TestCheckLatestVersion(t *testing.T) {
|
|
type args struct {
|
|
ctx context.Context
|
|
versionData *VersionCheckRequest
|
|
versionURL string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
err error
|
|
}{
|
|
{
|
|
name: "Get latest version",
|
|
args: args{
|
|
ctx: context.Background(),
|
|
versionData: &VersionCheckRequest{},
|
|
versionURL: "https://us-central1-elated-pottery-310110.cloudfunctions.net/ksgf1v1",
|
|
},
|
|
err: nil,
|
|
},
|
|
{
|
|
name: "Failed to get latest version",
|
|
args: args{
|
|
ctx: context.Background(),
|
|
versionData: &VersionCheckRequest{},
|
|
versionURL: "https://example.com",
|
|
},
|
|
err: fmt.Errorf("failed to get latest version"),
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
v := &VersionCheckHandler{
|
|
versionURL: tt.args.versionURL,
|
|
}
|
|
err := v.CheckLatestVersion(tt.args.ctx, tt.args.versionData)
|
|
|
|
assert.Equal(t, tt.err, err)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestVersionCheckHandler_getLatestVersion(t *testing.T) {
|
|
type fields struct {
|
|
versionURL string
|
|
}
|
|
type args struct {
|
|
versionData *VersionCheckRequest
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
fields fields
|
|
args args
|
|
want *VersionCheckResponse
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "Get latest version",
|
|
fields: fields{
|
|
versionURL: "https://us-central1-elated-pottery-310110.cloudfunctions.net/ksgf1v1",
|
|
},
|
|
args: args{
|
|
versionData: &VersionCheckRequest{
|
|
Client: "kubescape",
|
|
},
|
|
},
|
|
want: &VersionCheckResponse{
|
|
Client: "kubescape",
|
|
ClientUpdate: "v3.0.0",
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "Failed to get latest version",
|
|
fields: fields{
|
|
versionURL: "https://example.com",
|
|
},
|
|
args: args{
|
|
versionData: &VersionCheckRequest{},
|
|
},
|
|
want: nil,
|
|
wantErr: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
v := &VersionCheckHandler{
|
|
versionURL: tt.fields.versionURL,
|
|
}
|
|
got, err := v.getLatestVersion(tt.args.versionData)
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("VersionCheckHandler.getLatestVersion() error = %v, wantErr %v", err, tt.wantErr)
|
|
return
|
|
}
|
|
if !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("VersionCheckHandler.getLatestVersion() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|