server_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. // Copyright 2012 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package agent
  5. import (
  6. "testing"
  7. "golang.org/x/crypto/ssh"
  8. )
  9. func TestServer(t *testing.T) {
  10. c1, c2, err := netPipe()
  11. if err != nil {
  12. t.Fatalf("netPipe: %v", err)
  13. }
  14. defer c1.Close()
  15. defer c2.Close()
  16. client := NewClient(c1)
  17. go ServeAgent(NewKeyring(), c2)
  18. testAgentInterface(t, client, testPrivateKeys["rsa"], nil, 0)
  19. }
  20. func TestLockServer(t *testing.T) {
  21. testLockAgent(NewKeyring(), t)
  22. }
  23. func TestSetupForwardAgent(t *testing.T) {
  24. a, b, err := netPipe()
  25. if err != nil {
  26. t.Fatalf("netPipe: %v", err)
  27. }
  28. defer a.Close()
  29. defer b.Close()
  30. _, socket, cleanup := startAgent(t)
  31. defer cleanup()
  32. serverConf := ssh.ServerConfig{
  33. NoClientAuth: true,
  34. }
  35. serverConf.AddHostKey(testSigners["rsa"])
  36. incoming := make(chan *ssh.ServerConn, 1)
  37. go func() {
  38. conn, _, _, err := ssh.NewServerConn(a, &serverConf)
  39. if err != nil {
  40. t.Fatalf("Server: %v", err)
  41. }
  42. incoming <- conn
  43. }()
  44. conf := ssh.ClientConfig{}
  45. conn, chans, reqs, err := ssh.NewClientConn(b, "", &conf)
  46. if err != nil {
  47. t.Fatalf("NewClientConn: %v", err)
  48. }
  49. client := ssh.NewClient(conn, chans, reqs)
  50. if err := ForwardToRemote(client, socket); err != nil {
  51. t.Fatalf("SetupForwardAgent: %v", err)
  52. }
  53. server := <-incoming
  54. ch, reqs, err := server.OpenChannel(channelType, nil)
  55. if err != nil {
  56. t.Fatalf("OpenChannel(%q): %v", channelType, err)
  57. }
  58. go ssh.DiscardRequests(reqs)
  59. agentClient := NewClient(ch)
  60. testAgentInterface(t, agentClient, testPrivateKeys["rsa"], nil, 0)
  61. conn.Close()
  62. }
  63. func TestV1ProtocolMessages(t *testing.T) {
  64. c1, c2, err := netPipe()
  65. if err != nil {
  66. t.Fatalf("netPipe: %v", err)
  67. }
  68. defer c1.Close()
  69. defer c2.Close()
  70. c := NewClient(c1)
  71. go ServeAgent(NewKeyring(), c2)
  72. testV1ProtocolMessages(t, c.(*client))
  73. }
  74. func testV1ProtocolMessages(t *testing.T, c *client) {
  75. reply, err := c.call([]byte{agentRequestV1Identities})
  76. if err != nil {
  77. t.Fatalf("v1 request all failed: %v", err)
  78. }
  79. if msg, ok := reply.(*agentV1IdentityMsg); !ok || msg.Numkeys != 0 {
  80. t.Fatalf("invalid request all response: %#v", reply)
  81. }
  82. reply, err = c.call([]byte{agentRemoveAllV1Identities})
  83. if err != nil {
  84. t.Fatalf("v1 remove all failed: %v", err)
  85. }
  86. if _, ok := reply.(*successAgentMsg); !ok {
  87. t.Fatalf("invalid remove all response: %#v", reply)
  88. }
  89. }