session_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. // +build !windows
  5. package test
  6. // Session functional tests.
  7. import (
  8. "bytes"
  9. "io"
  10. "testing"
  11. )
  12. func TestRunCommandSuccess(t *testing.T) {
  13. server := newServer(t)
  14. defer server.Shutdown()
  15. conn := server.Dial()
  16. defer conn.Close()
  17. session, err := conn.NewSession()
  18. if err != nil {
  19. t.Fatalf("session failed: %v", err)
  20. }
  21. defer session.Close()
  22. err = session.Run("true")
  23. if err != nil {
  24. t.Fatalf("session failed: %v", err)
  25. }
  26. }
  27. func TestRunCommandFailed(t *testing.T) {
  28. server := newServer(t)
  29. defer server.Shutdown()
  30. conn := server.Dial()
  31. defer conn.Close()
  32. session, err := conn.NewSession()
  33. if err != nil {
  34. t.Fatalf("session failed: %v", err)
  35. }
  36. defer session.Close()
  37. err = session.Run(`bash -c "kill -9 $$"`)
  38. if err == nil {
  39. t.Fatalf("session succeeded: %v", err)
  40. }
  41. }
  42. func TestRunCommandWeClosed(t *testing.T) {
  43. server := newServer(t)
  44. defer server.Shutdown()
  45. conn := server.Dial()
  46. defer conn.Close()
  47. session, err := conn.NewSession()
  48. if err != nil {
  49. t.Fatalf("session failed: %v", err)
  50. }
  51. err = session.Shell()
  52. if err != nil {
  53. t.Fatalf("shell failed: %v", err)
  54. }
  55. err = session.Close()
  56. if err != nil {
  57. t.Fatalf("shell failed: %v", err)
  58. }
  59. }
  60. func TestFuncLargeRead(t *testing.T) {
  61. server := newServer(t)
  62. defer server.Shutdown()
  63. conn := server.Dial()
  64. defer conn.Close()
  65. session, err := conn.NewSession()
  66. if err != nil {
  67. t.Fatalf("unable to create new session: %s", err)
  68. }
  69. stdout, err := session.StdoutPipe()
  70. if err != nil {
  71. t.Fatalf("unable to acquire stdout pipe: %s", err)
  72. }
  73. err = session.Start("dd if=/dev/urandom bs=2048 count=1")
  74. if err != nil {
  75. t.Fatalf("unable to execute remote command: %s", err)
  76. }
  77. buf := new(bytes.Buffer)
  78. n, err := io.Copy(buf, stdout)
  79. if err != nil {
  80. t.Fatalf("error reading from remote stdout: %s", err)
  81. }
  82. if n != 2048 {
  83. t.Fatalf("Expected %d bytes but read only %d from remote command", 2048, n)
  84. }
  85. }