github.com/keybase/client/go@v0.0.0-20241007131713-f10651d043c8/kbnm/main_test.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "io" 7 "os/exec" 8 "strings" 9 "testing" 10 ) 11 12 func TestProcess(t *testing.T) { 13 h := newHandler() 14 15 var ranCmd string 16 h.Run = func(cmd *exec.Cmd) error { 17 ranCmd = strings.Join(cmd.Args, " ") 18 _ = ranCmd 19 return nil 20 } 21 h.FindKeybaseBinary = func() (string, error) { 22 return "/mocked/test/path/keybase", nil 23 } 24 25 var inBuf, outBuf bytes.Buffer 26 in := json.NewDecoder(&inBuf) 27 out := json.NewEncoder(&outBuf) 28 29 // Check invalid JSON: 30 _, err := io.WriteString(&inBuf, "invalid json, hi\n") 31 if err != nil { 32 t.Fatalf("Error writing string: %+v", err) 33 } 34 err = process(h, in, out) 35 if _, ok := err.(*json.SyntaxError); !ok { 36 t.Errorf("incorrect error on invalid JSON: %T", err) 37 } 38 // Reset the decoder 39 inBuf.Reset() 40 in = json.NewDecoder(&inBuf) 41 42 testCases := []struct { 43 In string 44 ExpectOut string 45 }{ 46 { 47 `{"method": "foo"}` + "\n", 48 `{"client":0,"status":"error","message":"invalid method"}` + "\n", 49 }, 50 { 51 `{"method": "chat", "to": "shazow", "body": "Hello, world."}` + "\n", 52 `{"client":0,"status":"ok","message":""}` + "\n", 53 }, 54 } 55 56 for i, test := range testCases { 57 outBuf.Reset() 58 59 _, err = io.WriteString(&inBuf, test.In) 60 if err != nil { 61 t.Fatalf("Error writing string: %+v", err) 62 } 63 if err := process(h, in, out); err != nil { 64 t.Fatalf("[case #%d] processing failed early: %s", i, err) 65 } 66 67 if want, got := test.ExpectOut, outBuf.String(); want != got { 68 t.Errorf("[case #%d] want:\n%s\ngot:\n%s", i, want, got) 69 } 70 } 71 }