mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			197 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			197 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
Copyright 2017 The Kubernetes Authors.
 | 
						|
 | 
						|
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 cmd
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"io/ioutil"
 | 
						|
	"os"
 | 
						|
	"path"
 | 
						|
	"path/filepath"
 | 
						|
	"strings"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
						|
	"k8s.io/apimachinery/pkg/runtime"
 | 
						|
	"k8s.io/cli-runtime/pkg/genericclioptions"
 | 
						|
	"k8s.io/utils/exec"
 | 
						|
)
 | 
						|
 | 
						|
type FakeObject struct {
 | 
						|
	name   string
 | 
						|
	merged map[string]interface{}
 | 
						|
	live   map[string]interface{}
 | 
						|
}
 | 
						|
 | 
						|
var _ Object = &FakeObject{}
 | 
						|
 | 
						|
func (f *FakeObject) Name() string {
 | 
						|
	return f.name
 | 
						|
}
 | 
						|
 | 
						|
func (f *FakeObject) Merged() (runtime.Object, error) {
 | 
						|
	return &unstructured.Unstructured{Object: f.merged}, nil
 | 
						|
}
 | 
						|
 | 
						|
func (f *FakeObject) Live() runtime.Object {
 | 
						|
	return &unstructured.Unstructured{Object: f.live}
 | 
						|
}
 | 
						|
 | 
						|
func TestDiffProgram(t *testing.T) {
 | 
						|
	os.Setenv("KUBERNETES_EXTERNAL_DIFF", "echo")
 | 
						|
	streams, _, stdout, _ := genericclioptions.NewTestIOStreams()
 | 
						|
	diff := DiffProgram{
 | 
						|
		IOStreams: streams,
 | 
						|
		Exec:      exec.New(),
 | 
						|
	}
 | 
						|
	err := diff.Run("one", "two")
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if output := stdout.String(); output != "one two\n" {
 | 
						|
		t.Fatalf(`stdout = %q, expected "one two\n"`, output)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestPrinter(t *testing.T) {
 | 
						|
	printer := Printer{}
 | 
						|
 | 
						|
	obj := &unstructured.Unstructured{Object: map[string]interface{}{
 | 
						|
		"string": "string",
 | 
						|
		"list":   []int{1, 2, 3},
 | 
						|
		"int":    12,
 | 
						|
	}}
 | 
						|
	buf := bytes.Buffer{}
 | 
						|
	printer.Print(obj, &buf)
 | 
						|
	want := `int: 12
 | 
						|
list:
 | 
						|
- 1
 | 
						|
- 2
 | 
						|
- 3
 | 
						|
string: string
 | 
						|
`
 | 
						|
	if buf.String() != want {
 | 
						|
		t.Errorf("Print() = %q, want %q", buf.String(), want)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestDiffVersion(t *testing.T) {
 | 
						|
	diff, err := NewDiffVersion("MERGED")
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	defer diff.Dir.Delete()
 | 
						|
 | 
						|
	obj := FakeObject{
 | 
						|
		name:   "bla",
 | 
						|
		live:   map[string]interface{}{"live": true},
 | 
						|
		merged: map[string]interface{}{"merged": true},
 | 
						|
	}
 | 
						|
	err = diff.Print(&obj, Printer{})
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	fcontent, err := ioutil.ReadFile(path.Join(diff.Dir.Name, obj.Name()))
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	econtent := "merged: true\n"
 | 
						|
	if string(fcontent) != econtent {
 | 
						|
		t.Fatalf("File has %q, expected %q", string(fcontent), econtent)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestDirectory(t *testing.T) {
 | 
						|
	dir, err := CreateDirectory("prefix")
 | 
						|
	defer dir.Delete()
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	_, err = os.Stat(dir.Name)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if !strings.HasPrefix(filepath.Base(dir.Name), "prefix") {
 | 
						|
		t.Fatalf(`Directory doesn't start with "prefix": %q`, dir.Name)
 | 
						|
	}
 | 
						|
	entries, err := ioutil.ReadDir(dir.Name)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if len(entries) != 0 {
 | 
						|
		t.Fatalf("Directory should be empty, has %d elements", len(entries))
 | 
						|
	}
 | 
						|
	_, err = dir.NewFile("ONE")
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	_, err = dir.NewFile("TWO")
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	entries, err = ioutil.ReadDir(dir.Name)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if len(entries) != 2 {
 | 
						|
		t.Fatalf("ReadDir should have two elements, has %d elements", len(entries))
 | 
						|
	}
 | 
						|
	err = dir.Delete()
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	_, err = os.Stat(dir.Name)
 | 
						|
	if err == nil {
 | 
						|
		t.Fatal("Directory should be gone, still present.")
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestDiffer(t *testing.T) {
 | 
						|
	diff, err := NewDiffer("LIVE", "MERGED")
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	defer diff.TearDown()
 | 
						|
 | 
						|
	obj := FakeObject{
 | 
						|
		name:   "bla",
 | 
						|
		live:   map[string]interface{}{"live": true},
 | 
						|
		merged: map[string]interface{}{"merged": true},
 | 
						|
	}
 | 
						|
	err = diff.Diff(&obj, Printer{})
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	fcontent, err := ioutil.ReadFile(path.Join(diff.From.Dir.Name, obj.Name()))
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	econtent := "live: true\n"
 | 
						|
	if string(fcontent) != econtent {
 | 
						|
		t.Fatalf("File has %q, expected %q", string(fcontent), econtent)
 | 
						|
	}
 | 
						|
 | 
						|
	fcontent, err = ioutil.ReadFile(path.Join(diff.To.Dir.Name, obj.Name()))
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	econtent = "merged: true\n"
 | 
						|
	if string(fcontent) != econtent {
 | 
						|
		t.Fatalf("File has %q, expected %q", string(fcontent), econtent)
 | 
						|
	}
 | 
						|
}
 |