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 }