Adding dependencies, binary autostart
This commit is contained in:
		
							
								
								
									
										220
									
								
								opencloud/charts/loki/test/config_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										220
									
								
								opencloud/charts/loki/test/config_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,220 @@
 | 
			
		||||
package test
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"os"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/stretchr/testify/require"
 | 
			
		||||
	"gopkg.in/yaml.v2"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type replicas struct {
 | 
			
		||||
	Replicas int `yaml:"replicas"`
 | 
			
		||||
}
 | 
			
		||||
type loki struct {
 | 
			
		||||
	Storage struct {
 | 
			
		||||
		Type string `yaml:"type"`
 | 
			
		||||
	} `yaml:"storage"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type values struct {
 | 
			
		||||
	DeploymentMode string   `yaml:"deploymentMode"`
 | 
			
		||||
	Backend        replicas `yaml:"backend"`
 | 
			
		||||
	Compactor      replicas `yaml:"compactor"`
 | 
			
		||||
	Distributor    replicas `yaml:"distributor"`
 | 
			
		||||
	IndexGateway   replicas `yaml:"indexGateway"`
 | 
			
		||||
	Ingester       replicas `yaml:"ingester"`
 | 
			
		||||
	Querier        replicas `yaml:"querier"`
 | 
			
		||||
	QueryFrontend  replicas `yaml:"queryFrontend"`
 | 
			
		||||
	QueryScheduler replicas `yaml:"queryScheduler"`
 | 
			
		||||
	Read           replicas `yaml:"read"`
 | 
			
		||||
	Ruler          replicas `yaml:"ruler"`
 | 
			
		||||
	SingleBinary   replicas `yaml:"singleBinary"`
 | 
			
		||||
	Write          replicas `yaml:"write"`
 | 
			
		||||
 | 
			
		||||
	Loki loki `yaml:"loki"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func templateConfig(t *testing.T, vals values) error {
 | 
			
		||||
	y, err := yaml.Marshal(&vals)
 | 
			
		||||
	require.NoError(t, err)
 | 
			
		||||
	require.Greater(t, len(y), 0)
 | 
			
		||||
 | 
			
		||||
	f, err := os.CreateTemp("", "values.yaml")
 | 
			
		||||
	require.NoError(t, err)
 | 
			
		||||
 | 
			
		||||
	_, err = f.Write(y)
 | 
			
		||||
	require.NoError(t, err)
 | 
			
		||||
 | 
			
		||||
	cmd := exec.Command("helm", "dependency", "build")
 | 
			
		||||
	// Dependency build needs to be run from the parent directory where the chart is located.
 | 
			
		||||
	cmd.Dir = "../"
 | 
			
		||||
	var cmdOutput []byte
 | 
			
		||||
	if cmdOutput, err = cmd.CombinedOutput(); err != nil {
 | 
			
		||||
		t.Log("dependency build failed", "err", string(cmdOutput))
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cmd = exec.Command("helm", "template", "../", "--values", f.Name())
 | 
			
		||||
	if cmdOutput, err := cmd.CombinedOutput(); err != nil {
 | 
			
		||||
		t.Log("template failed", "err", string(cmdOutput))
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// E.Welch these tests fail because the templateConfig function above can't resolve the chart dependencies and I'm not sure how to fix this....
 | 
			
		||||
 | 
			
		||||
//func Test_InvalidConfigs(t *testing.T) {
 | 
			
		||||
//	t.Run("running both single binary and scalable targets", func(t *testing.T) {
 | 
			
		||||
//		vals := values{
 | 
			
		||||
//			SingleBinary: replicas{Replicas: 1},
 | 
			
		||||
//			Write:        replicas{Replicas: 1},
 | 
			
		||||
//			Loki: loki{
 | 
			
		||||
//				Storage: struct {
 | 
			
		||||
//					Type string `yaml:"type"`
 | 
			
		||||
//				}{Type: "gcs"},
 | 
			
		||||
//			},
 | 
			
		||||
//		}
 | 
			
		||||
//		require.Error(t, templateConfig(t, vals))
 | 
			
		||||
//	})
 | 
			
		||||
//
 | 
			
		||||
//	t.Run("running both single binary and distributed targets", func(t *testing.T) {
 | 
			
		||||
//		vals := values{
 | 
			
		||||
//			SingleBinary: replicas{Replicas: 1},
 | 
			
		||||
//			Distributor:  replicas{Replicas: 1},
 | 
			
		||||
//			Loki: loki{
 | 
			
		||||
//				Storage: struct {
 | 
			
		||||
//					Type string `yaml:"type"`
 | 
			
		||||
//				}{Type: "gcs"},
 | 
			
		||||
//			},
 | 
			
		||||
//		}
 | 
			
		||||
//		require.Error(t, templateConfig(t, vals))
 | 
			
		||||
//	})
 | 
			
		||||
//
 | 
			
		||||
//	t.Run("running both scalable and distributed targets", func(t *testing.T) {
 | 
			
		||||
//		vals := values{
 | 
			
		||||
//			Read:        replicas{Replicas: 1},
 | 
			
		||||
//			Distributor: replicas{Replicas: 1},
 | 
			
		||||
//			Loki: loki{
 | 
			
		||||
//				Storage: struct {
 | 
			
		||||
//					Type string `yaml:"type"`
 | 
			
		||||
//				}{Type: "gcs"},
 | 
			
		||||
//			},
 | 
			
		||||
//		}
 | 
			
		||||
//		require.Error(t, templateConfig(t, vals))
 | 
			
		||||
//	})
 | 
			
		||||
//
 | 
			
		||||
//	t.Run("running scalable with filesystem storage", func(t *testing.T) {
 | 
			
		||||
//		vals := values{
 | 
			
		||||
//			Read: replicas{Replicas: 1},
 | 
			
		||||
//			Loki: loki{
 | 
			
		||||
//				Storage: struct {
 | 
			
		||||
//					Type string `yaml:"type"`
 | 
			
		||||
//				}{Type: "filesystem"},
 | 
			
		||||
//			},
 | 
			
		||||
//		}
 | 
			
		||||
//
 | 
			
		||||
//		require.Error(t, templateConfig(t, vals))
 | 
			
		||||
//	})
 | 
			
		||||
//
 | 
			
		||||
//	t.Run("running distributed with filesystem storage", func(t *testing.T) {
 | 
			
		||||
//		vals := values{
 | 
			
		||||
//			Distributor: replicas{Replicas: 1},
 | 
			
		||||
//			Loki: loki{
 | 
			
		||||
//				Storage: struct {
 | 
			
		||||
//					Type string `yaml:"type"`
 | 
			
		||||
//				}{Type: "filesystem"},
 | 
			
		||||
//			},
 | 
			
		||||
//		}
 | 
			
		||||
//
 | 
			
		||||
//		require.Error(t, templateConfig(t, vals))
 | 
			
		||||
//	})
 | 
			
		||||
//}
 | 
			
		||||
//
 | 
			
		||||
//func Test_ValidConfigs(t *testing.T) {
 | 
			
		||||
//	t.Run("single binary", func(t *testing.T) {
 | 
			
		||||
//		vals := values{
 | 
			
		||||
//
 | 
			
		||||
//			DeploymentMode: "SingleBinary",
 | 
			
		||||
//
 | 
			
		||||
//			SingleBinary: replicas{Replicas: 1},
 | 
			
		||||
//
 | 
			
		||||
//			Backend:        replicas{Replicas: 0},
 | 
			
		||||
//			Compactor:      replicas{Replicas: 0},
 | 
			
		||||
//			Distributor:    replicas{Replicas: 0},
 | 
			
		||||
//			IndexGateway:   replicas{Replicas: 0},
 | 
			
		||||
//			Ingester:       replicas{Replicas: 0},
 | 
			
		||||
//			Querier:        replicas{Replicas: 0},
 | 
			
		||||
//			QueryFrontend:  replicas{Replicas: 0},
 | 
			
		||||
//			QueryScheduler: replicas{Replicas: 0},
 | 
			
		||||
//			Read:           replicas{Replicas: 0},
 | 
			
		||||
//			Ruler:          replicas{Replicas: 0},
 | 
			
		||||
//			Write:          replicas{Replicas: 0},
 | 
			
		||||
//
 | 
			
		||||
//			Loki: loki{
 | 
			
		||||
//				Storage: struct {
 | 
			
		||||
//					Type string `yaml:"type"`
 | 
			
		||||
//				}{Type: "filesystem"},
 | 
			
		||||
//			},
 | 
			
		||||
//		}
 | 
			
		||||
//		require.NoError(t, templateConfig(t, vals))
 | 
			
		||||
//	})
 | 
			
		||||
//
 | 
			
		||||
//	t.Run("scalable", func(t *testing.T) {
 | 
			
		||||
//		vals := values{
 | 
			
		||||
//
 | 
			
		||||
//			DeploymentMode: "SimpleScalable",
 | 
			
		||||
//
 | 
			
		||||
//			Backend: replicas{Replicas: 1},
 | 
			
		||||
//			Read:    replicas{Replicas: 1},
 | 
			
		||||
//			Write:   replicas{Replicas: 1},
 | 
			
		||||
//
 | 
			
		||||
//			Compactor:      replicas{Replicas: 0},
 | 
			
		||||
//			Distributor:    replicas{Replicas: 0},
 | 
			
		||||
//			IndexGateway:   replicas{Replicas: 0},
 | 
			
		||||
//			Ingester:       replicas{Replicas: 0},
 | 
			
		||||
//			Querier:        replicas{Replicas: 0},
 | 
			
		||||
//			QueryFrontend:  replicas{Replicas: 0},
 | 
			
		||||
//			QueryScheduler: replicas{Replicas: 0},
 | 
			
		||||
//			Ruler:          replicas{Replicas: 0},
 | 
			
		||||
//			SingleBinary:   replicas{Replicas: 0},
 | 
			
		||||
//
 | 
			
		||||
//			Loki: loki{
 | 
			
		||||
//				Storage: struct {
 | 
			
		||||
//					Type string `yaml:"type"`
 | 
			
		||||
//				}{Type: "gcs"},
 | 
			
		||||
//			},
 | 
			
		||||
//		}
 | 
			
		||||
//		require.NoError(t, templateConfig(t, vals))
 | 
			
		||||
//	})
 | 
			
		||||
//
 | 
			
		||||
//	t.Run("distributed", func(t *testing.T) {
 | 
			
		||||
//		vals := values{
 | 
			
		||||
//			DeploymentMode: "Distributed",
 | 
			
		||||
//
 | 
			
		||||
//			Compactor:      replicas{Replicas: 1},
 | 
			
		||||
//			Distributor:    replicas{Replicas: 1},
 | 
			
		||||
//			IndexGateway:   replicas{Replicas: 1},
 | 
			
		||||
//			Ingester:       replicas{Replicas: 1},
 | 
			
		||||
//			Querier:        replicas{Replicas: 1},
 | 
			
		||||
//			QueryFrontend:  replicas{Replicas: 1},
 | 
			
		||||
//			QueryScheduler: replicas{Replicas: 1},
 | 
			
		||||
//			Ruler:          replicas{Replicas: 1},
 | 
			
		||||
//
 | 
			
		||||
//			Backend:      replicas{Replicas: 0},
 | 
			
		||||
//			Read:         replicas{Replicas: 0},
 | 
			
		||||
//			SingleBinary: replicas{Replicas: 0},
 | 
			
		||||
//			Write:        replicas{Replicas: 0},
 | 
			
		||||
//
 | 
			
		||||
//			Loki: loki{
 | 
			
		||||
//				Storage: struct {
 | 
			
		||||
//					Type string `yaml:"type"`
 | 
			
		||||
//				}{Type: "gcs"},
 | 
			
		||||
//			},
 | 
			
		||||
//		}
 | 
			
		||||
//		require.NoError(t, templateConfig(t, vals))
 | 
			
		||||
//	})
 | 
			
		||||
//}
 | 
			
		||||
		Reference in New Issue
	
	Block a user