Skip to content

Commit

Permalink
Merge pull request #104 from kris-nova/more-tests
Browse files Browse the repository at this point in the history
Adding anchore, contour and YAML delimiter tests and newly uncovered bugs 🎉
  • Loading branch information
krisnova authored Nov 24, 2021
2 parents 0781d68 + b9f7b5a commit fbbd80a
Show file tree
Hide file tree
Showing 7 changed files with 7,164 additions and 10 deletions.
12 changes: 2 additions & 10 deletions codify.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,7 @@ const (
//
// Reference: https://yaml.org/spec/1.2/spec.html
//
// Furthermore let it be documented that at the 2018 KubeCon pub trivia
// Bryan Liles (https://twitter.com/bryanl) correctly had answered the
// trivia question with the correct delimiter of 3 characters "---" and
// was awarded no points for his correct answer, while an opposing team
// was awarded a single point for their incorrect answer of 2 characters "--".
//
// If the correct delimiter points would have been awarded to Brian's team
// they would technically should have been crowned KubeCon pub champions of 2018.
const YAMLDelimiter string = "---"
const YAMLDelimiter string = "\n---\n"

// We ARE in fact doing a lot of string handling here
// So we use strings as often as possible.
Expand Down Expand Up @@ -301,7 +293,7 @@ func toCodify(raw []byte) ([]CodifyObject, error) {
// Here we try CRDs
decoded, _, err = serializer.Decode([]byte(raw), nil, &apiextensionsv1.CustomResourceDefinition{})
if err != nil {
return nil, fmt.Errorf("trying CRD: unable to deserialize in codify: %v", err)
return nil, fmt.Errorf("trying CRD: unable to deserialize in codify: %v\n\nraw:\n\n%s", err, string(raw))
}
}

Expand Down
3 changes: 3 additions & 0 deletions codify/codify.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,10 @@ var (
}

CoreV1Types = []string{
"WeightedPodAffinityTerm",
"TCPSocketAction",
"Volume",
"SecretEnvSource",
"SecretKeySelector",
"SecretProjection",
"ConfigMapKeySelector",
Expand Down
252 changes: 252 additions & 0 deletions codify_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,252 @@
//
// Copyright © 2021 Kris Nóva <[email protected]>
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// ███╗ ██╗ █████╗ ███╗ ███╗██╗
// ████╗ ██║██╔══██╗████╗ ████║██║
// ██╔██╗ ██║███████║██╔████╔██║██║
// ██║╚██╗██║██╔══██║██║╚██╔╝██║██║
// ██║ ╚████║██║ ██║██║ ╚═╝ ██║███████╗
// ╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝
//

package naml

import (
"bytes"
"testing"
)

func TestYAMLDelimiterBottom(t *testing.T) {

testString := `apiVersion: v1
kind: Service
metadata:
labels:
app: example
bogus: ---
name: example
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: example
type: LoadBalancer
---
apiVersion: v1
kind: Service
metadata:
labels:
app: example
bogus: ---
name: example
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: example
type: LoadBalancer
---
`

buf := bytes.Buffer{}
buf.Write([]byte(testString))
objects, err := ReaderToCodifyObjects(&buf)
if err != nil {
t.Errorf("YAML delimiter check: %v", err)
}
if len(objects) != 2 {
t.Errorf("YAML delimiter split: %d", len(objects))
}
}

func TestYAMLDelimiterNoSpace(t *testing.T) {

testString := `
---
apiVersion: v1
kind: Service
metadata:
labels:
app: example
bogus: ---
name: example
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: example
type: LoadBalancer
---
apiVersion: v1
kind: Service
metadata:
labels:
app: example
bogus: ---
name: example
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: example
type: LoadBalancer
`

buf := bytes.Buffer{}
buf.Write([]byte(testString))
objects, err := ReaderToCodifyObjects(&buf)
if err != nil {
t.Errorf("YAML delimiter check: %v", err)
}
if len(objects) != 2 {
t.Errorf("YAML delimiter split: %d", len(objects))
}
}

func TestYAMLDelimiterTopLoad(t *testing.T) {

testString := `
---
apiVersion: v1
kind: Service
metadata:
labels:
app: example
bogus: ---
name: example
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: example
type: LoadBalancer
---
apiVersion: v1
kind: Service
metadata:
labels:
app: example
bogus: ---
name: example
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: example
type: LoadBalancer
`

buf := bytes.Buffer{}
buf.Write([]byte(testString))
objects, err := ReaderToCodifyObjects(&buf)
if err != nil {
t.Errorf("YAML delimiter check: %v", err)
}
if len(objects) != 2 {
t.Errorf("YAML delimiter split: %d", len(objects))
}
}

func TestYAMLDelimiterHappy(t *testing.T) {

testString := `apiVersion: v1
kind: Service
metadata:
labels:
app: example
bogus: ---
name: example
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: example
type: LoadBalancer
---
apiVersion: v1
kind: Service
metadata:
labels:
app: example
bogus: ---
name: example
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: example
type: LoadBalancer
`

buf := bytes.Buffer{}
buf.Write([]byte(testString))
objects, err := ReaderToCodifyObjects(&buf)
if err != nil {
t.Errorf("YAML delimiter check: %v", err)
}
if len(objects) != 2 {
t.Errorf("YAML delimiter split: %d", len(objects))
}
}

func TestYAMLDelimiterInline(t *testing.T) {

testString := `apiVersion: v1
kind: Service
metadata:
labels:
app: example
bogus: ---
name: example
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: example
type: LoadBalancer`

buf := bytes.Buffer{}
buf.Write([]byte(testString))
objects, err := ReaderToCodifyObjects(&buf)
if err != nil {
t.Errorf("inline YAML delimiter check: %v", err)
}
if len(objects) != 1 {
t.Errorf("inline YAML delimiter split: %d", len(objects))
}
}
Loading

0 comments on commit fbbd80a

Please sign in to comment.