github.com/jlmeeker/kismatic@v1.10.1-0.20180612190640-57f9005a1f1a/pkg/install/plan_test.go (about)

     1  package install
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"io/ioutil"
     7  	"os"
     8  	"os/exec"
     9  	"path/filepath"
    10  	"testing"
    11  )
    12  
    13  func TestWritePlanTemplate(t *testing.T) {
    14  	tests := []struct {
    15  		golden   string
    16  		template PlanTemplateOptions
    17  	}{
    18  		{
    19  			golden: "./test/plan-template.golden.yaml",
    20  			template: PlanTemplateOptions{
    21  				EtcdNodes:       3,
    22  				MasterNodes:     2,
    23  				WorkerNodes:     3,
    24  				IngressNodes:    2,
    25  				StorageNodes:    0,
    26  				AdditionalFiles: 1,
    27  			},
    28  		},
    29  		{
    30  			golden: "./test/plan-template-with-storage.golden.yaml",
    31  			template: PlanTemplateOptions{
    32  				EtcdNodes:       3,
    33  				MasterNodes:     2,
    34  				WorkerNodes:     3,
    35  				IngressNodes:    2,
    36  				StorageNodes:    2,
    37  				AdditionalFiles: 1,
    38  			},
    39  		},
    40  	}
    41  	for _, test := range tests {
    42  		expected, err := ioutil.ReadFile(test.golden)
    43  		if err != nil {
    44  			t.Fatalf("error reading golden file: %v", err)
    45  		}
    46  		tmp, err := ioutil.TempDir("", "ket-test-write-plan-template")
    47  		if err != nil {
    48  			t.Fatalf("error creating temp dir: %v", err)
    49  		}
    50  		file := filepath.Join(tmp, "kismatic-cluster.yaml")
    51  		fp := &FilePlanner{file}
    52  		if err = WritePlanTemplate(test.template, fp); err != nil {
    53  			t.Fatalf("error writing plan template: %v", err)
    54  		}
    55  		wrote, err := ioutil.ReadFile(file)
    56  		if err != nil {
    57  			t.Fatalf("error reading plan file template: %v", err)
    58  		}
    59  		if !bytes.Equal(wrote, expected) {
    60  			t.Errorf("the resulting plan file did not equal the expected plan file (%s)", test.golden)
    61  			if _, err := exec.LookPath("diff"); err == nil {
    62  				cmd := exec.Command("diff", test.golden, file)
    63  				fmt.Println(file)
    64  				cmd.Stdout = os.Stdout
    65  				cmd.Run()
    66  			}
    67  		}
    68  	}
    69  }
    70  
    71  func TestReadWithDeprecated(t *testing.T) {
    72  	pm := &DeprecatedPackageManager{
    73  		Enabled: true,
    74  	}
    75  	p := &Plan{}
    76  	p.Features = &Features{
    77  		PackageManager: pm,
    78  	}
    79  	b := false
    80  	p.Cluster.AllowPackageInstallation = &b
    81  	readDeprecatedFields(p)
    82  
    83  	// features.package_manager should be set to add_ons.package_manager
    84  	if p.AddOns.PackageManager.Disable || p.AddOns.PackageManager.Provider != "helm" {
    85  		t.Errorf("Expected add_ons.package_manager to be read from features.package_manager")
    86  	}
    87  	// cluster.disable_package_installation shoule be set to cluster.allow_package_installation
    88  	if p.Cluster.DisablePackageInstallation != true {
    89  		t.Errorf("Expected cluster.allow_package_installation to be read from cluster.disable_package_installation")
    90  	}
    91  }
    92  
    93  func TestReadWithNil(t *testing.T) {
    94  	p := &Plan{}
    95  	setDefaults(p)
    96  
    97  	if p.AddOns.CNI.Provider != "calico" {
    98  		t.Errorf("Expected add_ons.cni.provider to equal 'calico', instead got %s", p.AddOns.CNI.Provider)
    99  	}
   100  	if p.AddOns.CNI.Options.Calico.Mode != "overlay" {
   101  		t.Errorf("Expected add_ons.cni.options.calico.mode to equal 'overlay', instead got %s", p.AddOns.CNI.Options.Calico.Mode)
   102  	}
   103  
   104  	if p.AddOns.HeapsterMonitoring.Options.Heapster.Replicas != 2 {
   105  		t.Errorf("Expected add_ons.heapster.options.heapster.replicas to equal 2, instead got %d", p.AddOns.HeapsterMonitoring.Options.Heapster.Replicas)
   106  	}
   107  
   108  	if p.AddOns.HeapsterMonitoring.Options.Heapster.ServiceType != "ClusterIP" {
   109  		t.Errorf("Expected add_ons.heapster.options.heapster.service_type to equal ClusterIP, instead got %s", p.AddOns.HeapsterMonitoring.Options.Heapster.ServiceType)
   110  	}
   111  
   112  	if p.AddOns.HeapsterMonitoring.Options.Heapster.Sink != "influxdb:http://heapster-influxdb.kube-system.svc:8086" {
   113  		t.Errorf("Expected add_ons.heapster.options.heapster.service_type to equal 'influxdb:http://heapster-influxdb.kube-system.svc:8086', instead got %s", p.AddOns.HeapsterMonitoring.Options.Heapster.Sink)
   114  	}
   115  
   116  	if p.Cluster.Certificates.CAExpiry != defaultCAExpiry {
   117  		t.Errorf("expected ca cert expiry to be %s, but got %s", defaultCAExpiry, p.Cluster.Certificates.CAExpiry)
   118  	}
   119  
   120  	if p.Cluster.Version != kubernetesVersionString {
   121  		t.Errorf("expected cluster version to be %s, but got %s", kubernetesVersionString, p.Cluster.Version)
   122  	}
   123  }