...

Source file src/github.com/linkerd/linkerd2/cli/cmd/uninject_test.go

Documentation: github.com/linkerd/linkerd2/cli/cmd

     1  package cmd
     2  
     3  import (
     4  	"bufio"
     5  	"bytes"
     6  	"fmt"
     7  	"io"
     8  	"os"
     9  	"testing"
    10  
    11  	charts "github.com/linkerd/linkerd2/pkg/charts/linkerd2"
    12  )
    13  
    14  // TestUninjectYAML does the reverse of TestInjectYAML.
    15  // We use as input the same "golden" file and as expected output the same "input" file as in the inject tests.
    16  func TestUninjectYAML(t *testing.T) {
    17  
    18  	testCases := []struct {
    19  		inputFileName  string
    20  		goldenFileName string
    21  		reportFileName string
    22  	}{
    23  		{
    24  			inputFileName:  "inject_emojivoto_deployment.golden.yml",
    25  			goldenFileName: "inject_emojivoto_deployment.input.yml",
    26  			reportFileName: "inject_emojivoto_deployment_uninject.report",
    27  		},
    28  		{
    29  			// remove all the linkerd.io/* annotations
    30  			inputFileName:  "inject_emojivoto_deployment_overridden_noinject.golden.yml",
    31  			goldenFileName: "inject_emojivoto_deployment_uninjected.input.yml",
    32  			reportFileName: "inject_emojivoto_deployment_uninject.report",
    33  		},
    34  		{
    35  			inputFileName:  "inject_emojivoto_list.golden.yml",
    36  			goldenFileName: "inject_emojivoto_list.input.yml",
    37  			reportFileName: "inject_emojivoto_list_uninject.report",
    38  		},
    39  		{
    40  			inputFileName:  "inject_emojivoto_deployment_hostNetwork_true.input.yml",
    41  			goldenFileName: "inject_emojivoto_deployment_hostNetwork_true.input.yml",
    42  			reportFileName: "inject_emojivoto_deployment_hostNetwork_true_uninject.report",
    43  		},
    44  		{
    45  			inputFileName:  "inject_emojivoto_deployment_injectDisabled.input.yml",
    46  			goldenFileName: "inject_emojivoto_deployment_injectDisabled.input.yml",
    47  			reportFileName: "inject_emojivoto_deployment_injectDisabled_uninject.report",
    48  		},
    49  		{
    50  			inputFileName:  "inject_emojivoto_deployment_controller_name.golden.yml",
    51  			goldenFileName: "inject_emojivoto_deployment_controller_name.input.yml",
    52  			reportFileName: "inject_emojivoto_deployment_controller_name_uninject.report",
    53  		},
    54  		{
    55  			inputFileName:  "inject_emojivoto_statefulset.golden.yml",
    56  			goldenFileName: "inject_emojivoto_statefulset.input.yml",
    57  			reportFileName: "inject_emojivoto_statefulset_uninject.report",
    58  		},
    59  		{
    60  			inputFileName:  "inject_emojivoto_pod.golden.yml",
    61  			goldenFileName: "inject_emojivoto_pod.input.yml",
    62  			reportFileName: "inject_emojivoto_pod_uninject.report",
    63  		},
    64  		{
    65  			inputFileName:  "inject_emojivoto_pod_nativesidecar.golden.yml",
    66  			goldenFileName: "inject_emojivoto_pod.input.yml",
    67  			reportFileName: "inject_emojivoto_pod_uninject.report",
    68  		},
    69  		{
    70  			inputFileName:  "inject_emojivoto_deployment_udp.golden.yml",
    71  			goldenFileName: "inject_emojivoto_deployment_udp.input.yml",
    72  			reportFileName: "inject_emojivoto_deployment_udp_uninject.report",
    73  		},
    74  		{
    75  			inputFileName:  "inject_emojivoto_istio.input.yml",
    76  			goldenFileName: "inject_emojivoto_istio.input.yml",
    77  			reportFileName: "inject_emojivoto_istio_uninject.report",
    78  		},
    79  		{
    80  			inputFileName:  "inject_contour.golden.yml",
    81  			goldenFileName: "inject_contour.input.yml",
    82  			reportFileName: "inject_contour_uninject.report",
    83  		},
    84  		{
    85  			inputFileName:  "inject_emojivoto_deployment_config_overrides.golden.yml",
    86  			goldenFileName: "inject_emojivoto_deployment_config_overrides.input.yml",
    87  			reportFileName: "inject_emojivoto_deployment_uninject.report",
    88  		},
    89  		{
    90  			inputFileName:  "inject_emojivoto_namespace_good.golden.yml",
    91  			goldenFileName: "inject_emojivoto_namespace_uninjected_good.golden.yml",
    92  			reportFileName: "inject_emojivoto_namespace_uninjected_good.golden.report",
    93  		},
    94  		{
    95  			inputFileName:  "inject_emojivoto_namespace_overidden_good.golden.yml",
    96  			goldenFileName: "inject_emojivoto_namespace_uninjected_good.golden.yml",
    97  			reportFileName: "inject_emojivoto_namespace_uninjected_good.golden.report",
    98  		},
    99  	}
   100  
   101  	values, err := charts.NewValues()
   102  	if err != nil {
   103  		t.Fatal(err)
   104  	}
   105  
   106  	for i, tc := range testCases {
   107  		tc := tc // pin
   108  		t.Run(fmt.Sprintf("%d: %s", i, tc.inputFileName), func(t *testing.T) {
   109  			file, err := os.Open("testdata/" + tc.inputFileName)
   110  			if err != nil {
   111  				t.Errorf("error opening test input file: %v\n", err)
   112  			}
   113  
   114  			read := []io.Reader{bufio.NewReader(file)}
   115  
   116  			output := new(bytes.Buffer)
   117  			report := new(bytes.Buffer)
   118  
   119  			exitCode := runUninjectCmd(read, report, output, values, "yaml")
   120  			if exitCode != 0 {
   121  				t.Errorf("Failed to uninject %s", tc.inputFileName)
   122  			}
   123  
   124  			if err := testDataDiffer.DiffTestYAML(tc.goldenFileName, output.String()); err != nil {
   125  				t.Error(err)
   126  			}
   127  			testDataDiffer.DiffTestdata(t, tc.reportFileName, report.String())
   128  		})
   129  	}
   130  }
   131  

View as plain text