Jonathan Turner 8 лет назад
Родитель
Сommit
bc57e56615
1 измененных файлов с 42 добавлено и 16 удалено
  1. 42 16
      credentials/ccache_integration_test.go

+ 42 - 16
credentials/ccache_integration_test.go

@@ -4,13 +4,14 @@
 package credentials
 
 import (
+	"bufio"
 	"bytes"
 	"fmt"
 	"io"
-	"io/ioutil"
 	"os"
 	"os/exec"
 	"os/user"
+	"sync"
 	"testing"
 
 	"github.com/stretchr/testify/assert"
@@ -26,6 +27,36 @@ const (
 	spn      = "HTTP/host.test.gokrb5"
 )
 
+type output struct {
+	buf   *bytes.Buffer
+	lines []string
+	*sync.Mutex
+}
+
+func newOutput() *output {
+	return &output{
+		buf:   &bytes.Buffer{},
+		lines: []string{},
+		Mutex: &sync.Mutex{},
+	}
+}
+
+func (rw *output) Write(p []byte) (int, error) {
+	rw.Lock()
+	defer rw.Unlock()
+	return rw.buf.Write(p)
+}
+
+func (rw *output) Lines() []string {
+	rw.Lock()
+	defer rw.Unlock()
+	s := bufio.NewScanner(rw.buf)
+	for s.Scan() {
+		rw.lines = append(rw.lines, s.Text())
+	}
+	return rw.lines
+}
+
 func login() error {
 	file, err := os.Create("/etc/krb5.conf")
 	if err != nil {
@@ -76,31 +107,23 @@ func getServiceTkt() error {
 	return nil
 }
 
-func klist() (string, error) {
+func klist() ([]string, error) {
 	cmd := exec.Command(klistCmd, "-Aef")
 
-	stdoutR, stdoutW := io.Pipe()
-	cmd.Stdout = stdoutW
+	stdout := newOutput()
+	cmd.Stdout = stdout
 
 	err := cmd.Start()
 	if err != nil {
-		return "", fmt.Errorf("could not start %s command: %v", klistCmd, err)
+		return []string{}, fmt.Errorf("could not start %s command: %v", klistCmd, err)
 	}
-	outBuf := new(bytes.Buffer)
-	go func() {
-		io.Copy(outBuf, stdoutR)
-	}()
 
 	err = cmd.Wait()
 	if err != nil {
-		return "", fmt.Errorf("%s did not run successfully: %v", klistCmd, err)
-	}
-	sb, err := ioutil.ReadAll(outBuf)
-	if err != nil {
-		return "", fmt.Errorf("error reading stdout buffer: %v", err)
+		return []string{}, fmt.Errorf("%s did not run successfully: %v", klistCmd, err)
 	}
 
-	return string(sb), nil
+	return stdout.Lines(), nil
 }
 
 func loadCCache() (CCache, error) {
@@ -133,7 +156,10 @@ func TestCCacheEntries(t *testing.T) {
 		t.Fatalf("error getting service ticket: %v", err)
 	}
 	clist, _ := klist()
-	t.Logf("OS Creds Cache contents:\n%s", clist)
+	t.Log("OS Creds Cache contents:")
+	for _, l := range clist {
+		t.Log(l)
+	}
 	c, err := loadCCache()
 	if err != nil {
 		t.Errorf("error loading CCache: %v", err)