github.com/grailbio/base@v0.0.11/cmdutil/logging_test.go (about)

     1  // Copyright 2018 GRAIL, Inc. All rights reserved.
     2  // Use of this source code is governed by the Apache-2.0
     3  // license that can be found in the LICENSE file.
     4  
     5  //+build !unit
     6  
     7  package cmdutil_test
     8  
     9  import (
    10  	"io/ioutil"
    11  	"path/filepath"
    12  	"strings"
    13  	"testing"
    14  
    15  	"github.com/grailbio/testutil"
    16  	"github.com/stretchr/testify/require"
    17  	"v.io/x/lib/gosh"
    18  )
    19  
    20  func TestLogging(t *testing.T) {
    21  	sh := gosh.NewShell(t)
    22  	if testing.Verbose() {
    23  		sh.PropagateChildOutput = true
    24  	}
    25  	tempdir := sh.MakeTempDir()
    26  	defer testutil.NoCleanupOnError(t, sh.Cleanup, tempdir)
    27  	logger := testutil.GoExecutable(t, "//go/src/github.com/grailbio/base/cmdutil/cmdline-test/cmdline-test")
    28  	naked := testutil.GoExecutable(t, "//go/src/github.com/grailbio/base/cmdutil/naked-test/naked-test")
    29  	testLogging(t, sh, tempdir, logger, naked)
    30  	testHelp(t, sh, tempdir, logger, naked)
    31  }
    32  
    33  func testLogging(t *testing.T, sh *gosh.Shell, tempdir, logger, naked string) {
    34  	for _, tc := range []struct {
    35  		cmd    string
    36  		args   []string
    37  		prefix string
    38  	}{
    39  		{logger, []string{"logging"}, "T"},
    40  		{logger, []string{"access"}, "T"},
    41  		{naked, nil, "T"},
    42  	} {
    43  		args := append(tc.args, "--log_dir="+tempdir, "a", "b")
    44  		cmd := sh.Cmd(tc.cmd, args...)
    45  		out := cmd.CombinedOutput()
    46  		if got, want := strings.TrimSpace(out), tempdir; got != want {
    47  			t.Errorf("%v: got %v, want %v", tc.cmd, got, want)
    48  		}
    49  		data, err := ioutil.ReadFile(filepath.Join(tempdir, filepath.Base(tc.cmd)+".INFO"))
    50  		require.NoError(t, err)
    51  		if got, want := string(data), tc.prefix+": 0: a\n"; !strings.Contains(got, want) {
    52  			t.Errorf("%v: got %v, does not contain %v", tc.cmd, got, want)
    53  		}
    54  		args = append(tc.args, "--log_dir="+tempdir, "--alsologtostderr", "a", "b")
    55  		cmd = sh.Cmd(tc.cmd, args...)
    56  		out = cmd.CombinedOutput()
    57  		if got, want := out, tc.prefix+": 1: b\n"; !strings.Contains(got, want) {
    58  			t.Errorf("%v: got %v, does not contain %v", tc.cmd, got, want)
    59  		}
    60  	}
    61  }
    62  
    63  func testHelp(t *testing.T, sh *gosh.Shell, tempdir, logger, naked string) {
    64  	sh.ContinueOnError = true
    65  	for _, test := range []struct {
    66  		cmd      string
    67  		contains []string
    68  	}{
    69  		{logger, []string{"cmdline-test [flags] <command>", "The global flags are:", "-alsologtostderr=false"}},
    70  		{naked, []string{"Usage of ", "-alsologtostderr\n"}},
    71  	} {
    72  		cmd := sh.Cmd(test.cmd, "-help")
    73  		got := cmd.CombinedOutput()
    74  		for _, want := range test.contains {
    75  			if !strings.Contains(got, want) {
    76  				t.Errorf("%v: got %v, does not contain %v", test.cmd, got, want)
    77  			}
    78  		}
    79  		sh.Err = nil
    80  	}
    81  	sh.ContinueOnError = false
    82  }