Skip to content

Commit

Permalink
PANDARIA: Add hull unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
jianghang8421 authored and STARRY-S committed Aug 16, 2023
1 parent d488457 commit dc5d70d
Show file tree
Hide file tree
Showing 8 changed files with 725 additions and 0 deletions.
98 changes: 98 additions & 0 deletions tests/rancher-gpu-monitoring/rancher_gpu_monitoring.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package rancher_gpu_monitoring

import (
"github.com/rancher/hull/pkg/chart"
"github.com/rancher/hull/pkg/checker"
"github.com/rancher/hull/pkg/test"
"github.com/rancher/hull/pkg/utils"
"github.com/stretchr/testify/assert"

corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

var ChartPath = utils.MustGetPathFromModuleRoot("/charts/rancher-gpu-monitoring/0.0.1")

var (
DefaultReleaseName = "rancher-monitoring-test-1"
DefaultNamespace = "default"
)

var suite = test.Suite{
ChartPath: ChartPath,

Cases: []test.Case{
{
Name: "Default",

TemplateOptions: chart.NewTemplateOptions(DefaultReleaseName, DefaultNamespace),
},
{
Name: "systemdefaultregistry",

TemplateOptions: chart.NewTemplateOptions(DefaultReleaseName, DefaultNamespace).
Set("global.systemDefaultRegistry", "testrancher.io"),
},
{
Name: "Use runtime class",

TemplateOptions: chart.NewTemplateOptions(DefaultReleaseName, DefaultNamespace).
Set("runtimeClassName", "nvidia"),
},
},

NamedChecks: []test.NamedCheck{
{
Name: "Check image repository and tag",
Covers: []string{
".Values.image.repository",
".Values.image.tag",
},

Checks: test.Checks{
checker.PerWorkload(func(tc *checker.TestContext, obj metav1.Object, podTemplateSpec corev1.PodTemplateSpec) {
systemDefaultRegistry, _ := checker.RenderValue[string](tc, ".Values.global.systemDefaultRegistry")
imageRepository, _ := checker.RenderValue[string](tc, ".Values.image.repository")
imageTag, _ := checker.RenderValue[string](tc, ".Values.image.tag")
expectedImage := imageRepository + ":" + imageTag

if systemDefaultRegistry != "" {
expectedImage = systemDefaultRegistry + "/" + expectedImage
}

for _, container := range podTemplateSpec.Spec.Containers {
assert.Equal(tc.T, expectedImage, container.Image,
"workload %s (type: %T) in workload %s/%s does not have correct image",
container.Name, obj, obj.GetNamespace(), obj.GetName(),
)
}
}),
},
},

{
Name: "Check runtime class",
Covers: []string{
".Values.runtimeClassName",
},

Checks: test.Checks{
checker.PerWorkload(func(tc *checker.TestContext, obj metav1.Object, podTemplateSpec corev1.PodTemplateSpec) {
runtimeClassName, _ := checker.RenderValue[string](tc, ".Values.runtimeClassName")
if podTemplateSpec.Spec.RuntimeClassName == nil {
assert.Equal(tc.T, runtimeClassName, "",
"workload %s (type: %T) in Deployment %s/%s does not have correct runtimeclass",
podTemplateSpec.Name, obj, obj.GetNamespace(), obj.GetName(),
)
} else {
assert.Equal(tc.T, runtimeClassName, *podTemplateSpec.Spec.RuntimeClassName,
"workload %s (type: %T) in Deployment %s/%s does not have correct runtimeclass",
podTemplateSpec.Name, obj, obj.GetNamespace(), obj.GetName(),
)
}

}),
},
},
},
}
16 changes: 16 additions & 0 deletions tests/rancher-gpu-monitoring/rancher_gpu_monitoring_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package rancher_gpu_monitoring

import (
"testing"

"github.com/rancher/hull/pkg/test"
)

func TestChart(t *testing.T) {
opts := test.GetRancherOptions()
opts.HelmLint.Rancher.Enabled = false
opts.Coverage.Disabled = true
// opts.Coverage.IncludeSubcharts = false
// opts.YAMLLint.Enabled = false
suite.Run(t, opts)
}
191 changes: 191 additions & 0 deletions tests/rancher-gpu-sharing/rancher_gpu_sharing.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
package rancher_gpu_sharing

import (
"github.com/rancher/hull/pkg/chart"
"github.com/rancher/hull/pkg/checker"
"github.com/rancher/hull/pkg/test"
"github.com/rancher/hull/pkg/utils"
"github.com/stretchr/testify/assert"

corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

var ChartPath = utils.MustGetPathFromModuleRoot("/charts/rancher-gpu-sharing/0.0.1")

var (
DefaultReleaseName = "rancher-sharing-test-1"
DefaultNamespace = "default"
)

var suite = test.Suite{
ChartPath: ChartPath,

Cases: []test.Case{
{
Name: "1.23",

TemplateOptions: chart.NewTemplateOptions(DefaultReleaseName, DefaultNamespace).
Set("defaultScheduler.version", "v1.23"),
},
{
Name: "1.24",

TemplateOptions: chart.NewTemplateOptions(DefaultReleaseName, DefaultNamespace).
Set("defaultScheduler.version", "v1.24"),
},
{
Name: "1.25",

TemplateOptions: chart.NewTemplateOptions(DefaultReleaseName, DefaultNamespace).
Set("defaultScheduler.version", "v1.25"),
},
{
Name: "systemdefaultregistry",

TemplateOptions: chart.NewTemplateOptions(DefaultReleaseName, DefaultNamespace).
Set("global.systemDefaultRegistry", "testrancher.io"),
},
{
Name: "Use runtime class",

TemplateOptions: chart.NewTemplateOptions(DefaultReleaseName, DefaultNamespace).
Set("runtimeClassName", "nvidia"),
},
},

NamedChecks: []test.NamedCheck{
{
Name: "Check shared device plugin repository and tag",
Covers: []string{
".Values.sharedeviceplugin.image.repository",
".Values.sharedeviceplugin.image.tag",
},

Checks: test.Checks{
checker.PerWorkload(func(tc *checker.TestContext, obj metav1.Object, podTemplateSpec corev1.PodTemplateSpec) {
if obj.GetName() != "gpushare-device-plugin" {
return
}
systemDefaultRegistry, _ := checker.RenderValue[string](tc, ".Values.global.systemDefaultRegistry")
sdRepository, _ := checker.RenderValue[string](tc, ".Values.sharedeviceplugin.image.repository")
sdTag, _ := checker.RenderValue[string](tc, ".Values.sharedeviceplugin.image.tag")
expectedSDImage := sdRepository + ":" + sdTag

if systemDefaultRegistry != "" {
expectedSDImage = systemDefaultRegistry + "/" + expectedSDImage
}

for _, container := range podTemplateSpec.Spec.Containers {
assert.Equal(tc.T, expectedSDImage, container.Image,
"workload %s (type: %T) in Deployment %s/%s does not have correct image",
container.Name, obj, obj.GetNamespace(), obj.GetName(),
)
}
}),
},
},

{
Name: "Check defaultScheduler repository and tag",
Covers: []string{
".Values.defaultScheduler",
},

Checks: test.Checks{
checker.PerWorkload(func(tc *checker.TestContext, obj metav1.Object, podTemplateSpec corev1.PodTemplateSpec) {
if obj.GetName() != "gpushare-schd-extender" {
return
}
systemDefaultRegistry, _ := checker.RenderValue[string](tc, ".Values.global.systemDefaultRegistry")

defaultSchedulerVersion, _ := checker.RenderValue[string](tc, ".Values.defaultScheduler.version")

supportedVersions, _ := checker.RenderValue[map[string]interface{}](tc,
".Values.defaultScheduler.supportedVersions")

image123 := supportedVersions["v1.23"].(map[string]interface{})
defaultSchedulerRepository123 := image123["repository"].(string)
defaultSchedulerTag123 := image123["tag"].(string)
expectedImage123 := defaultSchedulerRepository123 + ":" + defaultSchedulerTag123

image124 := supportedVersions["v1.24"].(map[string]interface{})
defaultSchedulerRepository124 := image124["repository"].(string)
defaultSchedulerTag124 := image124["tag"].(string)
expectedImage124 := defaultSchedulerRepository124 + ":" + defaultSchedulerTag124

image125 := supportedVersions["v1.25"].(map[string]interface{})
defaultSchedulerRepository125 := image125["repository"].(string)
defaultSchedulerTag125 := image125["tag"].(string)
expectedImage125 := defaultSchedulerRepository125 + ":" + defaultSchedulerTag125

schedulerExtenderRepo, _ := checker.RenderValue[string](tc, ".Values.schedulerextender.image.repository")
schedulerExtenderTag, _ := checker.RenderValue[string](tc, ".Values.schedulerextender.image.tag")
expectedSchedulerExtenderImage := schedulerExtenderRepo + ":" + schedulerExtenderTag

if systemDefaultRegistry != "" {
expectedImage123 = systemDefaultRegistry + "/" + expectedImage123
expectedImage124 = systemDefaultRegistry + "/" + expectedImage124
expectedImage125 = systemDefaultRegistry + "/" + expectedImage125
expectedSchedulerExtenderImage = systemDefaultRegistry + "/" + expectedSchedulerExtenderImage
}

for _, container := range podTemplateSpec.Spec.Containers {
if container.Name == "gpushare-default-scheduler" {
if defaultSchedulerVersion == "v1.23" {
assert.Equal(tc.T, expectedImage123, container.Image,
"workload %s (type: %T) in Deployment %s/%s does not have correct image",
container.Name, obj, obj.GetNamespace(), obj.GetName(),
)
} else if defaultSchedulerVersion == "v1.24" {
assert.Equal(tc.T, expectedImage124, container.Image,
"workload %s (type: %T) in Deployment %s/%s does not have correct image",
container.Name, obj, obj.GetNamespace(), obj.GetName(),
)
} else if defaultSchedulerVersion == "v1.25" {
assert.Equal(tc.T, expectedImage125, container.Image,
"workload %s (type: %T) in Deployment %s/%s does not have correct image",
container.Name, obj, obj.GetNamespace(), obj.GetName(),
)
}
} else if container.Name == "gpushare-scheduler-extender" {
assert.Equal(tc.T, expectedSchedulerExtenderImage, container.Image,
"workload %s (type: %T) in Deployment %s/%s does not have correct image",
container.Name, obj, obj.GetNamespace(), obj.GetName(),
)
}
}
}),
},
},

{
Name: "Check runtime class",
Covers: []string{
".Values.defaultScheduler",
},

Checks: test.Checks{
checker.PerWorkload(func(tc *checker.TestContext, obj metav1.Object, podTemplateSpec corev1.PodTemplateSpec) {
if obj.GetName() != "gpushare-device-plugin" {
return
}

runtimeClassName, _ := checker.RenderValue[string](tc, ".Values.runtimeClassName")
if podTemplateSpec.Spec.RuntimeClassName == nil {
assert.Equal(tc.T, runtimeClassName, "",
"workload %s (type: %T) in Deployment %s/%s does not have correct image",
podTemplateSpec.Name, obj, obj.GetNamespace(), obj.GetName(),
)
} else {
assert.Equal(tc.T, runtimeClassName, *podTemplateSpec.Spec.RuntimeClassName,
"workload %s (type: %T) in Deployment %s/%s does not have correct image",
podTemplateSpec.Name, obj, obj.GetNamespace(), obj.GetName(),
)
}

}),
},
},
},
}
16 changes: 16 additions & 0 deletions tests/rancher-gpu-sharing/rancher_gpu_sharing_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package rancher_gpu_sharing

import (
"testing"

"github.com/rancher/hull/pkg/test"
)

func TestChart(t *testing.T) {
opts := test.GetRancherOptions()
opts.HelmLint.Rancher.Enabled = false
opts.Coverage.Disabled = true
// opts.Coverage.IncludeSubcharts = false
// opts.YAMLLint.Enabled = false
suite.Run(t, opts)
}
Loading

0 comments on commit dc5d70d

Please sign in to comment.