internal/helm: test load funcs for max size cases
This includes a change of the defaults to more acceptible (higher) values. Signed-off-by: Sunny <darkowlzz@protonmail.com>
This commit is contained in:
parent
2b8134ce20
commit
37ac5a9679
|
@ -17,11 +17,16 @@ limitations under the License.
|
||||||
package chart
|
package chart
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
|
"github.com/otiai10/copy"
|
||||||
helmchart "helm.sh/helm/v3/pkg/chart"
|
helmchart "helm.sh/helm/v3/pkg/chart"
|
||||||
"helm.sh/helm/v3/pkg/chartutil"
|
"helm.sh/helm/v3/pkg/chartutil"
|
||||||
|
|
||||||
|
"github.com/fluxcd/source-controller/internal/helm"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -126,6 +131,17 @@ func TestOverwriteChartDefaultValues(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLoadChartMetadataFromDir(t *testing.T) {
|
func TestLoadChartMetadataFromDir(t *testing.T) {
|
||||||
|
g := NewWithT(t)
|
||||||
|
|
||||||
|
// Create a chart file that exceeds the max chart file size.
|
||||||
|
tmpDir, err := os.MkdirTemp("", "load-chart-")
|
||||||
|
g.Expect(err).ToNot(HaveOccurred())
|
||||||
|
defer os.RemoveAll(tmpDir)
|
||||||
|
copy.Copy("../testdata/charts/helmchart", tmpDir)
|
||||||
|
bigRequirementsFile := filepath.Join(tmpDir, "requirements.yaml")
|
||||||
|
data := make([]byte, helm.MaxChartFileSize+10)
|
||||||
|
g.Expect(os.WriteFile(bigRequirementsFile, data, 0644)).ToNot(HaveOccurred())
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
dir string
|
dir string
|
||||||
|
@ -152,6 +168,11 @@ func TestLoadChartMetadataFromDir(t *testing.T) {
|
||||||
dir: "../testdata/charts/",
|
dir: "../testdata/charts/",
|
||||||
wantErr: "../testdata/charts/Chart.yaml: no such file or directory",
|
wantErr: "../testdata/charts/Chart.yaml: no such file or directory",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Error if file size exceeds max size",
|
||||||
|
dir: tmpDir,
|
||||||
|
wantErr: "size of 'requirements.yaml' exceeds",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
@ -176,6 +197,16 @@ func TestLoadChartMetadataFromDir(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLoadChartMetadataFromArchive(t *testing.T) {
|
func TestLoadChartMetadataFromArchive(t *testing.T) {
|
||||||
|
g := NewWithT(t)
|
||||||
|
|
||||||
|
// Create a chart archive that exceeds the max chart size.
|
||||||
|
tmpDir, err := os.MkdirTemp("", "load-chart-")
|
||||||
|
g.Expect(err).ToNot(HaveOccurred())
|
||||||
|
defer os.RemoveAll(tmpDir)
|
||||||
|
bigArchiveFile := filepath.Join(tmpDir, "chart.tgz")
|
||||||
|
data := make([]byte, helm.MaxChartSize+10)
|
||||||
|
g.Expect(os.WriteFile(bigArchiveFile, data, 0644)).ToNot(HaveOccurred())
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
archive string
|
archive string
|
||||||
|
@ -207,6 +238,11 @@ func TestLoadChartMetadataFromArchive(t *testing.T) {
|
||||||
archive: "../testdata/charts/empty.tgz",
|
archive: "../testdata/charts/empty.tgz",
|
||||||
wantErr: "no 'Chart.yaml' found",
|
wantErr: "no 'Chart.yaml' found",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Error if archive size exceeds max size",
|
||||||
|
archive: bigArchiveFile,
|
||||||
|
wantErr: "size of chart 'chart.tgz' exceeds",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
|
|
@ -22,8 +22,8 @@ var (
|
||||||
// MaxIndexSize is the max allowed file size in bytes of a ChartRepository.
|
// MaxIndexSize is the max allowed file size in bytes of a ChartRepository.
|
||||||
MaxIndexSize int64 = 50 << 20
|
MaxIndexSize int64 = 50 << 20
|
||||||
// MaxChartSize is the max allowed file size in bytes of a Helm Chart.
|
// MaxChartSize is the max allowed file size in bytes of a Helm Chart.
|
||||||
MaxChartSize int64 = 2 << 20
|
MaxChartSize int64 = 10 << 20
|
||||||
// MaxChartFileSize is the max allowed file size in bytes of any arbitrary
|
// MaxChartFileSize is the max allowed file size in bytes of any arbitrary
|
||||||
// file originating from a chart.
|
// file originating from a chart.
|
||||||
MaxChartFileSize int64 = 2 << 10
|
MaxChartFileSize int64 = 5 << 20
|
||||||
)
|
)
|
||||||
|
|
|
@ -22,9 +22,11 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/fluxcd/source-controller/internal/helm"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
"helm.sh/helm/v3/pkg/chart"
|
"helm.sh/helm/v3/pkg/chart"
|
||||||
helmgetter "helm.sh/helm/v3/pkg/getter"
|
helmgetter "helm.sh/helm/v3/pkg/getter"
|
||||||
|
@ -353,9 +355,20 @@ func TestChartRepository_LoadIndexFromBytes_Unordered(t *testing.T) {
|
||||||
// Index load tests are derived from https://github.com/helm/helm/blob/v3.3.4/pkg/repo/index_test.go#L108
|
// Index load tests are derived from https://github.com/helm/helm/blob/v3.3.4/pkg/repo/index_test.go#L108
|
||||||
// to ensure parity with Helm behaviour.
|
// to ensure parity with Helm behaviour.
|
||||||
func TestChartRepository_LoadIndexFromFile(t *testing.T) {
|
func TestChartRepository_LoadIndexFromFile(t *testing.T) {
|
||||||
|
g := NewWithT(t)
|
||||||
|
|
||||||
|
// Create an index file that exceeds the max index size.
|
||||||
|
tmpDir, err := os.MkdirTemp("", "load-index-")
|
||||||
|
g.Expect(err).ToNot(HaveOccurred())
|
||||||
|
defer os.RemoveAll(tmpDir)
|
||||||
|
bigIndexFile := filepath.Join(tmpDir, "index.yaml")
|
||||||
|
data := make([]byte, helm.MaxIndexSize+10)
|
||||||
|
g.Expect(os.WriteFile(bigIndexFile, data, 0644)).ToNot(HaveOccurred())
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
filename string
|
filename string
|
||||||
|
wantErr string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "regular index file",
|
name: "regular index file",
|
||||||
|
@ -365,16 +378,26 @@ func TestChartRepository_LoadIndexFromFile(t *testing.T) {
|
||||||
name: "chartmuseum index file",
|
name: "chartmuseum index file",
|
||||||
filename: chartmuseumTestFile,
|
filename: chartmuseumTestFile,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "error if index size exceeds max size",
|
||||||
|
filename: bigIndexFile,
|
||||||
|
wantErr: "size of index 'index.yaml' exceeds",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
tt := tt
|
tt := tt
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
g := NewWithT(t)
|
g := NewWithT(t)
|
||||||
t.Parallel()
|
|
||||||
|
|
||||||
r := newChartRepository()
|
r := newChartRepository()
|
||||||
err := r.LoadFromFile(testFile)
|
err := r.LoadFromFile(tt.filename)
|
||||||
|
if tt.wantErr != "" {
|
||||||
|
g.Expect(err).To(HaveOccurred())
|
||||||
|
g.Expect(err.Error()).To(ContainSubstring(tt.wantErr))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
g.Expect(err).ToNot(HaveOccurred())
|
g.Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
verifyLocalIndex(t, r.Index)
|
verifyLocalIndex(t, r.Index)
|
||||||
|
|
Loading…
Reference in New Issue