func (sess *session) handleSubsystemRequest(request *ssh.Request) { logger := sess.logger.Session("handle-subsystem-request") logger.Info("starting") defer logger.Info("finished") type subsysMsg struct { Subsystem string } var subsystemMessage subsysMsg err := ssh.Unmarshal(request.Payload, &subsystemMessage) if err != nil { logger.Error("unmarshal-failed", err) if request.WantReply { request.Reply(false, nil) } return } if subsystemMessage.Subsystem != "sftp" { logger.Info("unsupported-subsystem", lager.Data{"subsystem": subsystemMessage.Subsystem}) if request.WantReply { request.Reply(false, nil) } return } lagerWriter := helpers.NewLagerWriter(logger.Session("sftp-server")) sftpServer, err := sftp.NewServer(sess.channel, sess.channel, sftp.WithDebug(lagerWriter)) if err != nil { logger.Error("sftp-new-server-failed", err) if request.WantReply { request.Reply(false, nil) } return } if request.WantReply { request.Reply(true, nil) } logger.Info("starting-server") go func() { defer sess.destroy() err = sftpServer.Serve() if err != nil { logger.Error("sftp-serve-error", err) } }() }
"github.com/cloudfoundry-incubator/diego-ssh/helpers" "github.com/pivotal-golang/lager" "github.com/pivotal-golang/lager/lagertest" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("LagerWriter", func() { var logger *lagertest.TestLogger var lagerWriter io.Writer BeforeEach(func() { logger = lagertest.NewTestLogger("test") lagerWriter = helpers.NewLagerWriter(logger) }) It("writes the payload as lager.Data", func() { payload := []byte("Hello, world!\n") n, err := lagerWriter.Write(payload) Expect(err).NotTo(HaveOccurred()) Expect(n).To(Equal(len(payload))) Expect(logger.Logs()).To(HaveLen(1)) log := logger.Logs()[0] Expect(log.Source).To(Equal("test")) Expect(log.Message).To(Equal("test.write")) Expect(log.LogLevel).To(Equal(lager.INFO))