Co-authored-by: testA113 <aliharriss1995@gmail.com> Co-authored-by: Ali <83188384+testA113@users.noreply.github.com>
184 lines
4.2 KiB
Go
184 lines
4.2 KiB
Go
package sdk
|
|
|
|
import (
|
|
"testing"
|
|
|
|
libhelmrelease "github.com/portainer/portainer/pkg/libhelm/release"
|
|
"github.com/stretchr/testify/assert"
|
|
"helm.sh/helm/v3/pkg/chart"
|
|
sdkrelease "helm.sh/helm/v3/pkg/release"
|
|
)
|
|
|
|
func Test_Convert(t *testing.T) {
|
|
t.Run("successfully maps a sdk release to a release", func(t *testing.T) {
|
|
is := assert.New(t)
|
|
|
|
release := sdkrelease.Release{
|
|
Name: "releaseName",
|
|
Version: 1,
|
|
Info: &sdkrelease.Info{
|
|
Status: "deployed",
|
|
},
|
|
Chart: &chart.Chart{
|
|
Metadata: &chart.Metadata{
|
|
Name: "chartName",
|
|
Version: "chartVersion",
|
|
AppVersion: "chartAppVersion",
|
|
},
|
|
},
|
|
}
|
|
|
|
values := libhelmrelease.Values{
|
|
UserSuppliedValues: `{"key": "value"}`,
|
|
ComputedValues: `{"key": "value"}`,
|
|
}
|
|
|
|
result := convert(&release, values)
|
|
is.Equal(release.Name, result.Name)
|
|
})
|
|
|
|
t.Run("extracts stack ID from annotations", func(t *testing.T) {
|
|
is := assert.New(t)
|
|
|
|
release := sdkrelease.Release{
|
|
Name: "stack-release",
|
|
Namespace: "app-namespace",
|
|
Version: 2,
|
|
Info: &sdkrelease.Info{
|
|
Status: "deployed",
|
|
},
|
|
Chart: &chart.Chart{
|
|
Metadata: &chart.Metadata{
|
|
Name: "myapp",
|
|
Version: "2.1.0",
|
|
Annotations: map[string]string{
|
|
StackIDAnnotation: "123",
|
|
ChartPathAnnotation: "charts/myapp",
|
|
RepoURLAnnotation: "https://github.com/company/charts",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
result := convert(&release, libhelmrelease.Values{})
|
|
|
|
is.NotNil(result)
|
|
is.Equal(123, result.StackID)
|
|
is.Equal("charts/myapp", result.ChartReference.ChartPath)
|
|
is.Equal("https://github.com/company/charts", result.ChartReference.RepoURL)
|
|
})
|
|
|
|
t.Run("handles invalid stack ID gracefully", func(t *testing.T) {
|
|
is := assert.New(t)
|
|
|
|
release := sdkrelease.Release{
|
|
Name: "release",
|
|
Namespace: "default",
|
|
Version: 1,
|
|
Info: &sdkrelease.Info{
|
|
Status: "deployed",
|
|
},
|
|
Chart: &chart.Chart{
|
|
Metadata: &chart.Metadata{
|
|
Name: "chart",
|
|
Version: "1.0.0",
|
|
Annotations: map[string]string{
|
|
StackIDAnnotation: "not-a-number",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
result := convert(&release, libhelmrelease.Values{})
|
|
|
|
is.NotNil(result)
|
|
// Should default to 0 when parsing fails
|
|
is.Equal(0, result.StackID)
|
|
})
|
|
|
|
t.Run("handles empty stack ID annotation", func(t *testing.T) {
|
|
is := assert.New(t)
|
|
|
|
release := sdkrelease.Release{
|
|
Name: "release",
|
|
Namespace: "default",
|
|
Version: 1,
|
|
Info: &sdkrelease.Info{
|
|
Status: "deployed",
|
|
},
|
|
Chart: &chart.Chart{
|
|
Metadata: &chart.Metadata{
|
|
Name: "chart",
|
|
Version: "1.0.0",
|
|
Annotations: map[string]string{
|
|
StackIDAnnotation: "",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
result := convert(&release, libhelmrelease.Values{})
|
|
|
|
is.NotNil(result)
|
|
is.Equal(0, result.StackID)
|
|
})
|
|
|
|
t.Run("handles missing annotations", func(t *testing.T) {
|
|
is := assert.New(t)
|
|
|
|
release := sdkrelease.Release{
|
|
Name: "release",
|
|
Namespace: "default",
|
|
Version: 1,
|
|
Info: &sdkrelease.Info{
|
|
Status: "deployed",
|
|
},
|
|
Chart: &chart.Chart{
|
|
Metadata: &chart.Metadata{
|
|
Name: "chart",
|
|
Version: "1.0.0",
|
|
Annotations: nil,
|
|
},
|
|
},
|
|
}
|
|
|
|
result := convert(&release, libhelmrelease.Values{})
|
|
|
|
is.NotNil(result)
|
|
is.Equal(0, result.StackID)
|
|
})
|
|
|
|
// Note: We don't test nil chart metadata or nil chart cases because
|
|
// the Helm SDK never returns releases in those states. The convert function
|
|
// assumes valid Helm SDK releases, which is acceptable for internal use.
|
|
|
|
t.Run("extracts registry ID from annotations", func(t *testing.T) {
|
|
is := assert.New(t)
|
|
|
|
release := sdkrelease.Release{
|
|
Name: "release",
|
|
Namespace: "default",
|
|
Version: 1,
|
|
Info: &sdkrelease.Info{
|
|
Status: "deployed",
|
|
},
|
|
Chart: &chart.Chart{
|
|
Metadata: &chart.Metadata{
|
|
Name: "chart",
|
|
Version: "1.0.0",
|
|
Annotations: map[string]string{
|
|
RegistryIDAnnotation: "42",
|
|
ChartPathAnnotation: "oci://registry.example.com/charts/myapp",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
result := convert(&release, libhelmrelease.Values{})
|
|
|
|
is.NotNil(result)
|
|
is.Equal(int64(42), result.ChartReference.RegistryID)
|
|
is.Equal("oci://registry.example.com/charts/myapp", result.ChartReference.ChartPath)
|
|
})
|
|
}
|