Skip to content

Commit

Permalink
Allow test file to be local or a http url (#19)
Browse files Browse the repository at this point in the history
Signed-off-by: Tamal Saha <[email protected]>
  • Loading branch information
tamalsaha authored Jun 6, 2022
1 parent 083ba15 commit 699277f
Showing 1 changed file with 54 additions and 11 deletions.
65 changes: 54 additions & 11 deletions lib.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@ limitations under the License.
package schemachecker

import (
"bytes"
"encoding/json"
"io"
"io/fs"
"net/http"
"path/filepath"
"reflect"
"strings"
Expand Down Expand Up @@ -58,11 +61,21 @@ func (d DefaultTypeMapper) ToChartName(k string) string {
return stringy.New(d.ToKind(k)).KebabCase().ToLower()
}

type TestCase struct {
Obj interface{}
File string
}

type TestData struct {
typ reflect.Type
file string
}

type SchemaChecker struct {
// project root directory
fsys fs.FS
mapper TypeMapper
registry map[string]reflect.Type
registry map[string]TestData
}

func kind(v interface{}) string {
Expand All @@ -71,10 +84,13 @@ func kind(v interface{}) string {

// https://stackoverflow.com/a/23031445

func New(fsys fs.FS, objs ...interface{}) *SchemaChecker {
reg := map[string]reflect.Type{}
for _, v := range objs {
reg[kind(v)] = reflect.TypeOf(v)
func New(fsys fs.FS, cases ...TestCase) *SchemaChecker {
reg := map[string]TestData{}
for _, c := range cases {
reg[kind(c.Obj)] = TestData{
typ: reflect.TypeOf(c.Obj),
file: c.File,
}
}
return &SchemaChecker{
fsys: fsys,
Expand All @@ -86,6 +102,9 @@ func New(fsys fs.FS, objs ...interface{}) *SchemaChecker {
func (checker *SchemaChecker) CheckChart(chartName string) (string, error) {
schemaKind := checker.mapper.ChartNameToSchemaKind(chartName)
file := filepath.Join("charts", chartName, "values.yaml")
if td, ok := checker.registry[schemaKind]; ok && td.file != "" {
file = td.file
}
return checker.Check(schemaKind, file)
}

Expand All @@ -97,6 +116,9 @@ func (checker *SchemaChecker) TestChart(t *testing.T, chartName string) {
func (checker *SchemaChecker) CheckKind(kind string) (string, error) {
schemaKind := checker.mapper.KindToSchemaKind(kind)
file := filepath.Join("charts", checker.mapper.ToChartName(kind), "values.yaml")
if td, ok := checker.registry[schemaKind]; ok && td.file != "" {
file = td.file
}
return checker.Check(schemaKind, file)
}

Expand All @@ -106,12 +128,18 @@ func (checker *SchemaChecker) TestKind(t *testing.T, kind string) {
}

func (checker *SchemaChecker) CheckObject(v interface{}, file string) (string, error) {
checker.registry[kind(v)] = reflect.TypeOf(v)
checker.registry[kind(v)] = TestData{
typ: reflect.TypeOf(v),
file: file,
}
return checker.Check(kind(v), file)
}

func (checker *SchemaChecker) TestObject(t *testing.T, v interface{}, file string) {
checker.registry[kind(v)] = reflect.TypeOf(v)
checker.registry[kind(v)] = TestData{
typ: reflect.TypeOf(v),
file: file,
}
checker.Test(t, kind(v), file)
}

Expand All @@ -121,9 +149,24 @@ func (checker *SchemaChecker) Test(t *testing.T, schemaKind string, file string)
}

func (checker *SchemaChecker) Check(schemaKind string, file string) (string, error) {
data, err := fs.ReadFile(checker.fsys, file)
if err != nil {
return "", errors.Wrap(err, file)
var data []byte
var err error
if strings.HasPrefix(file, "http://") || strings.HasPrefix(file, "https://") {
resp, err := http.Get(file)
if err != nil {
return "", errors.Wrap(err, file)
}
var buf bytes.Buffer
_, err = io.Copy(&buf, resp.Body)
if err != nil {
return "", errors.Wrap(err, file)
}
data = buf.Bytes()
} else {
data, err = fs.ReadFile(checker.fsys, file)
if err != nil {
return "", errors.Wrap(err, file)
}
}

var original map[string]interface{}
Expand All @@ -136,7 +179,7 @@ func (checker *SchemaChecker) Check(schemaKind string, file string) (string, err
return "", errors.Wrap(err, file)
}

newObj := reflect.New(checker.registry[schemaKind])
newObj := reflect.New(checker.registry[schemaKind].typ)
err = yaml.Unmarshal(data, newObj.Interface())
if err != nil {
return "", errors.Wrap(err, file)
Expand Down

0 comments on commit 699277f

Please sign in to comment.