From e47f5a5b3c3caf21631b899e122d8e228815b056 Mon Sep 17 00:00:00 2001 From: bryanl <bryanliles@gmail.com> Date: Tue, 27 Feb 2018 12:37:55 -0500 Subject: [PATCH] use new ksonnet-lib generator for creating lib Signed-off-by: bryanl <bryanliles@gmail.com> --- generator/ksonnet.go | 40 ++++++++++++++--------------- generator/ksonnet_test.go | 28 ++++++++++---------- metadata/lib/lib_test.go | 22 ++++++++-------- metadata/lib/testdata/k8s.libsonnet | 8 ++++++ 4 files changed, 54 insertions(+), 44 deletions(-) create mode 100644 metadata/lib/testdata/k8s.libsonnet diff --git a/generator/ksonnet.go b/generator/ksonnet.go index d19e3477..647fa781 100644 --- a/generator/ksonnet.go +++ b/generator/ksonnet.go @@ -1,17 +1,16 @@ package generator import ( - "encoding/json" + "io/ioutil" + "os" + "github.com/davecgh/go-spew/spew" "github.com/ksonnet/ksonnet-lib/ksonnet-gen/ksonnet" - "github.com/ksonnet/ksonnet-lib/ksonnet-gen/kubespec" - "github.com/ksonnet/ksonnet-lib/ksonnet-gen/kubeversion" - log "github.com/sirupsen/logrus" ) var ( // ksonnetEmitter is the function which emits the ksonnet standard library. - ksonnetEmitter = ksonnet.Emit + ksonnetEmitter = ksonnet.GenerateLib ) // KsonnetLib is the ksonnet standard library for a version of swagger. @@ -29,33 +28,34 @@ type KsonnetLib struct { // Ksonnet generates the ksonnet standard library or returns an error if there was // a problem. func Ksonnet(swaggerData []byte) (*KsonnetLib, error) { - // Deserialize the API object. - s := kubespec.APISpec{} - if err := json.Unmarshal(swaggerData, &s); err != nil { + f, err := ioutil.TempFile("", "") + if err != nil { return nil, err } - s.Text = swaggerData + defer os.Remove(f.Name()) - // Emit Jsonnet code. - extensionsLibData, k8sLibData, err := ksonnetEmitter(&s, nil, nil) + _, err = f.Write(swaggerData) if err != nil { return nil, err } - // Warn where the Kubernetes version is currently only supported as Beta. - if kubeversion.Beta(s.Info.Version) { - log.Warnf(`! -============================================================================================ -Kubernetes version %s is currently supported as Beta; you may encounter unexpected behavior -============================================================================================`, s.Info.Version) + if err = f.Close(); err != nil { + return nil, err + } + + spew.Dump("---", f.Name(), ksonnetEmitter) + + lib, err := ksonnetEmitter(f.Name()) + if err != nil { + return nil, err } kl := &KsonnetLib{ - K: extensionsLibData, - K8s: k8sLibData, + K: lib.Extensions, + K8s: lib.K8s, Swagger: swaggerData, - Version: s.Info.Version, + Version: lib.Version, } return kl, nil diff --git a/generator/ksonnet_test.go b/generator/ksonnet_test.go index 165dc12d..91b0dd80 100644 --- a/generator/ksonnet_test.go +++ b/generator/ksonnet_test.go @@ -4,7 +4,7 @@ import ( "errors" "testing" - "github.com/ksonnet/ksonnet-lib/ksonnet-gen/kubespec" + "github.com/ksonnet/ksonnet-lib/ksonnet-gen/ksonnet" ) func TestKsonnet(t *testing.T) { @@ -16,19 +16,22 @@ func TestKsonnet(t *testing.T) { var ( ext = []byte("k") lib = []byte("k8s") - successfulEmit = func(*kubespec.APISpec, *string, *string) ([]byte, []byte, error) { - return ext, lib, nil + successfulEmit = func(string) (*ksonnet.Lib, error) { + return &ksonnet.Lib{ + Version: "v1.7.0", + K8s: lib, + Extensions: ext, + }, nil } - failureEmit = func(*kubespec.APISpec, *string, *string) ([]byte, []byte, error) { - return nil, nil, errors.New("failure") + failureEmit = func(string) (*ksonnet.Lib, error) { + return nil, errors.New("failure") } v170swagger = []byte(`{"info":{"version":"v1.7.0"}}`) - v180swagger = []byte(`{"info":{"version":"v1.8.0"}}`) ) cases := []struct { name string - emitter func(*kubespec.APISpec, *string, *string) ([]byte, []byte, error) + emitter func(string) (*ksonnet.Lib, error) swaggerData []byte version string isErr bool @@ -41,6 +44,7 @@ func TestKsonnet(t *testing.T) { }, { name: "invalid swagger", + emitter: failureEmit, swaggerData: []byte(`{`), isErr: true, }, @@ -50,16 +54,12 @@ func TestKsonnet(t *testing.T) { swaggerData: v170swagger, isErr: true, }, - { - name: "valid beta swagger", - emitter: successfulEmit, - swaggerData: v180swagger, - version: "v1.8.0", - }, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { + ogKSEmitter := ksonnetEmitter + defer func() { ksonnetEmitter = ogKSEmitter }() ksonnetEmitter = tc.emitter kl, err := Ksonnet(tc.swaggerData) @@ -70,7 +70,7 @@ func TestKsonnet(t *testing.T) { } } else { if err != nil { - t.Fatal("Ksonnet() returned unexpected error") + t.Fatalf("Ksonnet() returned unexpected error: %#v", err) } if got, expected := string(kl.K), string(ext); got != expected { diff --git a/metadata/lib/lib_test.go b/metadata/lib/lib_test.go index b0792e9d..ac5777c7 100644 --- a/metadata/lib/lib_test.go +++ b/metadata/lib/lib_test.go @@ -16,6 +16,7 @@ package lib import ( "fmt" + "io/ioutil" "os" "testing" @@ -37,14 +38,6 @@ const ( "definitions": { } }` - blankK8sLib = `// AUTOGENERATED from the Kubernetes OpenAPI specification. DO NOT MODIFY. -// Kubernetes version: v1.7.0 - -{ - local hidden = { - }, -} -` ) var testFS = afero.NewMemMapFs() @@ -74,7 +67,9 @@ func TestGenerateLibData(t *testing.T) { bytes, err := afero.ReadFile(testFS, string(schemaPath)) if err != nil { t.Fatalf("Failed to read swagger file at '%s':\n%v", schemaPath, err) - } else if actualSwagger := string(bytes); actualSwagger != blankSwaggerData { + } + + if actualSwagger := string(bytes); actualSwagger != blankSwaggerData { t.Fatalf("Expected swagger file at '%s' to have value: '%s', got: '%s'", schemaPath, blankSwaggerData, actualSwagger) } @@ -82,7 +77,14 @@ func TestGenerateLibData(t *testing.T) { k8sLibBytes, err := afero.ReadFile(testFS, string(k8sLibPath)) if err != nil { t.Fatalf("Failed to read ksonnet-lib file at '%s':\n%v", k8sLibPath, err) - } else if actualK8sLib := string(k8sLibBytes); actualK8sLib != blankK8sLib { + } + + blankK8sLib, err := ioutil.ReadFile("testdata/k8s.libsonnet") + if err != nil { + t.Fatalf("Failed to read testdata/k8s.libsonnet: %#v", err) + } + + if actualK8sLib := string(k8sLibBytes); actualK8sLib != string(blankK8sLib) { t.Fatalf("Expected swagger file at '%s' to have value: '%s', got: '%s'", k8sLibPath, blankK8sLib, actualK8sLib) } } diff --git a/metadata/lib/testdata/k8s.libsonnet b/metadata/lib/testdata/k8s.libsonnet new file mode 100644 index 00000000..6d4307b8 --- /dev/null +++ b/metadata/lib/testdata/k8s.libsonnet @@ -0,0 +1,8 @@ +{ + "__ksonnet": { + checksum: "f942f2f2b70d842504ffa21b502ad044be92110af159342a352bf1ed4c6221e2", + kubernetesVersion: "1.7.0", + }, + local hidden = { + }, +} \ No newline at end of file -- GitLab