github.com/grahambrereton-form3/tilt@v0.10.18/internal/k8s/logging_kubectl_runner_test.go (about)

     1  package k8s
     2  
     3  import (
     4  	"bytes"
     5  	"context"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  
    10  	"github.com/windmilleng/tilt/internal/testutils"
    11  )
    12  
    13  func TestLoggingKubectlRunnerNoStdin(t *testing.T) {
    14  	f := newLoggingKubectlRunnerFixture()
    15  
    16  	f.fakeRunner.stdout = "foo"
    17  	f.fakeRunner.stderr = "bar"
    18  	f.runner.kubectlLogLevel = 6
    19  	stdout, stderr, err := f.runner.exec(f.ctx, []string{"hello", "goodbye"})
    20  	if !assert.NoError(t, err) {
    21  		t.FailNow()
    22  	}
    23  
    24  	assert.Equal(t, []call{{argv: []string{"-v", "6", "hello", "goodbye"}}}, f.fakeRunner.calls)
    25  
    26  	assert.Equal(t, "foo", stdout)
    27  	assert.Equal(t, "bar", stderr)
    28  
    29  	l := f.log()
    30  	assert.Contains(t, l, `Running: ["tilt" "kubectl" "-v" "6" "hello" "goodbye"]`)
    31  	assert.Contains(t, l, `stdout: 'foo'`)
    32  	assert.Contains(t, l, `stderr: 'bar'`)
    33  }
    34  
    35  func TestLoggingKubectlRunnerStdin(t *testing.T) {
    36  	f := newLoggingKubectlRunnerFixture()
    37  
    38  	input := "some yaml"
    39  	f.fakeRunner.stdout = "foo"
    40  	f.fakeRunner.stderr = "bar"
    41  	f.runner.kubectlLogLevel = 6
    42  	stdout, stderr, err := f.runner.execWithStdin(f.ctx, []string{"hello", "goodbye"}, input)
    43  	if !assert.NoError(t, err) {
    44  		t.FailNow()
    45  	}
    46  
    47  	assert.Equal(t, []call{{
    48  		argv:  []string{"-v", "6", "hello", "goodbye"},
    49  		stdin: input,
    50  	}}, f.fakeRunner.calls)
    51  
    52  	assert.Equal(t, "foo", stdout)
    53  	assert.Equal(t, "bar", stderr)
    54  
    55  	l := f.log()
    56  	assert.Contains(t, l, `Running: ["tilt" "kubectl" "-v" "6" "hello" "goodbye"]`)
    57  	assert.Contains(t, l, `stdout: 'foo'`)
    58  	assert.Contains(t, l, `stderr: 'bar'`)
    59  	assert.Contains(t, l, `stdin: 'some yaml'`)
    60  }
    61  
    62  func TestLoggingKubectlRunnerStdinLogLevelNone(t *testing.T) {
    63  	f := newLoggingKubectlRunnerFixture()
    64  
    65  	input := "some yaml"
    66  	f.fakeRunner.stdout = "foo"
    67  	f.fakeRunner.stderr = "bar"
    68  	f.runner.kubectlLogLevel = 0
    69  	stdout, stderr, err := f.runner.execWithStdin(f.ctx, []string{"hello", "goodbye"}, input)
    70  	if !assert.NoError(t, err) {
    71  		t.FailNow()
    72  	}
    73  
    74  	assert.Equal(t, []call{{
    75  		// args are unmodified for log level 0
    76  		argv:  []string{"hello", "goodbye"},
    77  		stdin: input,
    78  	}}, f.fakeRunner.calls)
    79  
    80  	assert.Equal(t, "foo", stdout)
    81  	assert.Equal(t, "bar", stderr)
    82  
    83  	assert.Equal(t, "", f.log())
    84  }
    85  
    86  type loggingKubectlRunnerFixture struct {
    87  	runner     loggingKubectlRunner
    88  	fakeRunner *fakeKubectlRunner
    89  	ctx        context.Context
    90  	w          *bytes.Buffer
    91  }
    92  
    93  func newLoggingKubectlRunnerFixture() *loggingKubectlRunnerFixture {
    94  	fakeRunner := &fakeKubectlRunner{}
    95  	runner := loggingKubectlRunner{
    96  		runner: fakeRunner,
    97  	}
    98  
    99  	w := &bytes.Buffer{}
   100  	ctx, _, _ := testutils.ForkedCtxAndAnalyticsForTest(w)
   101  
   102  	return &loggingKubectlRunnerFixture{
   103  		runner,
   104  		fakeRunner,
   105  		ctx,
   106  		w,
   107  	}
   108  }
   109  
   110  func (f *loggingKubectlRunnerFixture) log() string {
   111  	return f.w.String()
   112  }