func NewVerifier(config *config_package.Config) Verifier { switch config.ActiveBlobStore() { case config_package.DAVBlobStore: return dav_blob_store.Verifier{} case config_package.S3BlobStore: return &s3_blob_store.Verifier{} } return dav_blob_store.Verifier{} }
func (v BlobStoreVerifier) Verify(config *config_package.Config) (authorized bool, err error) { switch config.ActiveBlobStore() { case config_package.DAVBlobStore: return v.DAVBlobStoreVerifier.Verify(config) case config_package.S3BlobStore: return v.S3BlobStoreVerifier.Verify(config) } panic("unknown blob store type") }
func MakeCliApp( diegoVersion string, latticeVersion string, ltcConfigRoot string, exitHandler exit_handler.ExitHandler, config *config.Config, logger lager.Logger, receptorClientCreator receptor_client.Creator, targetVerifier target_verifier.TargetVerifier, cliStdout io.Writer, ) *cli.App { config.Load() app := cli.NewApp() app.Name = AppName app.Author = latticeCliAuthor app.Version = defaultVersion(diegoVersion, latticeVersion) app.Usage = LtcUsage app.Email = "*****@*****.**" ui := terminal.NewUI(os.Stdin, cliStdout, password_reader.NewPasswordReader(exitHandler)) app.Writer = ui app.Before = func(context *cli.Context) error { args := context.Args() command := app.Command(args.First()) if command == nil { return nil } if _, ok := nonTargetVerifiedCommandNames[command.Name]; ok || len(args) == 0 { return nil } if receptorUp, authorized, err := targetVerifier.VerifyTarget(config.Receptor()); !receptorUp { ui.SayLine(fmt.Sprintf("Error connecting to the receptor. Make sure your lattice target is set, and that lattice is up and running.\n\tUnderlying error: %s", err.Error())) return err } else if !authorized { ui.SayLine("Could not authenticate with the receptor. Please run ltc target with the correct credentials.") return errors.New("Could not authenticate with the receptor.") } return nil } app.Action = defaultAction app.CommandNotFound = func(c *cli.Context, command string) { ui.SayLine(fmt.Sprintf(unknownCommand, command)) exitHandler.Exit(1) } app.Commands = cliCommands(ltcConfigRoot, exitHandler, config, logger, receptorClientCreator, targetVerifier, ui) return app }
func New(config *config_package.Config) BlobStore { switch config.ActiveBlobStore() { case config_package.DAVBlobStore: return dav_blob_store.New(config.BlobStore()) case config_package.S3BlobStore: return s3_blob_store.New(config.S3BlobStore()) } return dav_blob_store.New(config.BlobStore()) }
func (Verifier) Verify(config *config_package.Config) (authorized bool, err error) { blobStoreURL := url.URL{ Scheme: "http", Host: fmt.Sprintf("%s:%s", config.BlobStore().Host, config.BlobStore().Port), User: url.UserPassword(config.BlobStore().Username, config.BlobStore().Password), } baseURL := &url.URL{ Scheme: blobStoreURL.Scheme, Host: blobStoreURL.Host, User: blobStoreURL.User, Path: "/blobs/", } req, err := http.NewRequest("PROPFIND", baseURL.String(), nil) if err != nil { return false, err } req.Header.Add("Depth", "1") resp, err := http.DefaultClient.Do(req) if err != nil { return false, err } defer resp.Body.Close() return resp.StatusCode == 207, err }
func (v Verifier) Verify(config *config_package.Config) (authorized bool, err error) { blobStoreConfig := config.S3BlobStore() client := s3.New(&aws.Config{ Credentials: credentials.NewStaticCredentials(blobStoreConfig.AccessKey, blobStoreConfig.SecretKey, ""), Region: aws.String(blobStoreConfig.Region), S3ForcePathStyle: aws.Bool(true), }) if v.Endpoint != "" { client.Endpoint = v.Endpoint } _, err = client.ListObjects(&s3.ListObjectsInput{ Bucket: aws.String(blobStoreConfig.BucketName), }) if err != nil { if awsErr, ok := err.(awserr.RequestFailure); ok && awsErr.StatusCode() == 403 { return false, nil } return false, err } return true, nil }
func (*AppDialer) Dial(appName string, instanceIndex int, config *config_package.Config) (Client, error) { diegoSSHUser := fmt.Sprintf("diego:%s/%d", appName, instanceIndex) address := fmt.Sprintf("%s:2222", config.Target()) client, err := sshapi.New(diegoSSHUser, config.Username(), config.Password(), address) if err != nil { return nil, err } return client, nil }
"github.com/cloudfoundry-incubator/lattice/ltc/test_helpers/matchers" "github.com/cloudfoundry-incubator/receptor" "github.com/cloudfoundry-incubator/runtime-schema/models" "github.com/goamz/goamz/s3" "github.com/cloudfoundry-incubator/lattice/ltc/app_examiner" "github.com/cloudfoundry-incubator/lattice/ltc/app_examiner/fake_app_examiner" config_package "github.com/cloudfoundry-incubator/lattice/ltc/config" ) var _ = Describe("DropletRunner", func() { var ( fakeAppRunner *fake_app_runner.FakeAppRunner fakeTaskRunner *fake_task_runner.FakeTaskRunner config *config_package.Config fakeBlobStore *fake_blob_store.FakeBlobStore fakeBlobBucket *fake_blob_bucket.FakeBlobBucket fakeTargetVerifier *fake_target_verifier.FakeTargetVerifier fakeAppExaminer *fake_app_examiner.FakeAppExaminer dropletRunner droplet_runner.DropletRunner ) BeforeEach(func() { fakeAppRunner = &fake_app_runner.FakeAppRunner{} fakeTaskRunner = &fake_task_runner.FakeTaskRunner{} config = config_package.New(persister.NewMemPersister()) fakeBlobStore = &fake_blob_store.FakeBlobStore{} fakeBlobBucket = &fake_blob_bucket.FakeBlobBucket{} fakeTargetVerifier = &fake_target_verifier.FakeTargetVerifier{} fakeAppExaminer = &fake_app_examiner.FakeAppExaminer{} dropletRunner = droplet_runner.New(fakeAppRunner, fakeTaskRunner, config, fakeBlobStore, fakeBlobBucket, fakeTargetVerifier, fakeAppExaminer) })
"github.com/cloudfoundry-incubator/lattice/ltc/exit_handler/exit_codes" "github.com/cloudfoundry-incubator/lattice/ltc/exit_handler/fake_exit_handler" "github.com/cloudfoundry-incubator/lattice/ltc/terminal" "github.com/cloudfoundry-incubator/lattice/ltc/terminal/password_reader/fake_password_reader" "github.com/cloudfoundry-incubator/lattice/ltc/test_helpers" "github.com/codegangsta/cli" config_package "github.com/cloudfoundry-incubator/lattice/ltc/config" ) var _ = Describe("CommandFactory", func() { var ( stdinReader *io.PipeReader stdinWriter *io.PipeWriter outputBuffer *gbytes.Buffer terminalUI terminal.UI config *config_package.Config fakeTargetVerifier *fake_target_verifier.FakeTargetVerifier fakeExitHandler *fake_exit_handler.FakeExitHandler fakePasswordReader *fake_password_reader.FakePasswordReader ) BeforeEach(func() { stdinReader, stdinWriter = io.Pipe() outputBuffer = gbytes.NewBuffer() fakeExitHandler = &fake_exit_handler.FakeExitHandler{} fakePasswordReader = &fake_password_reader.FakePasswordReader{} terminalUI = terminal.NewUI(stdinReader, outputBuffer, fakePasswordReader) fakeTargetVerifier = &fake_target_verifier.FakeTargetVerifier{} config = config_package.New(persister.NewMemPersister()) })
"errors" "reflect" config_package "github.com/cloudfoundry-incubator/lattice/ltc/config" sshp "github.com/cloudfoundry-incubator/lattice/ltc/ssh" "github.com/cloudfoundry-incubator/lattice/ltc/ssh/sshapi" "golang.org/x/crypto/ssh" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("AppDialer", func() { Describe("#Dial", func() { var ( origDial func(network, addr string, config *ssh.ClientConfig) (*ssh.Client, error) config *config_package.Config ) BeforeEach(func() { config = config_package.New(nil) config.SetTarget("some-host") config.SetLogin("some-user", "some-password") origDial = sshapi.DialFunc }) AfterEach(func() { sshapi.DialFunc = origDial }) It("should create a client", func() { dialCalled := false
"github.com/cloudfoundry-incubator/lattice/ltc/exit_handler/fake_exit_handler" "github.com/cloudfoundry-incubator/lattice/ltc/terminal" "github.com/cloudfoundry-incubator/lattice/ltc/test_helpers" "github.com/codegangsta/cli" "github.com/pivotal-golang/lager" config_command_factory "github.com/cloudfoundry-incubator/lattice/ltc/config/command_factory" ) var _ = Describe("CliAppFactory", func() { var ( fakeTargetVerifier *fake_target_verifier.FakeTargetVerifier fakeExitHandler *fake_exit_handler.FakeExitHandler outputBuffer *gbytes.Buffer terminalUI terminal.UI cliApp *cli.App cliConfig *config.Config latticeVersion string ) BeforeEach(func() { fakeTargetVerifier = &fake_target_verifier.FakeTargetVerifier{} fakeExitHandler = new(fake_exit_handler.FakeExitHandler) memPersister := persister.NewMemPersister() outputBuffer = gbytes.NewBuffer() terminalUI = terminal.NewUI(nil, outputBuffer, nil) cliConfig = config.New(memPersister) latticeVersion = "v0.2.Test" })
. "github.com/onsi/gomega" "github.com/onsi/gomega/gbytes" "github.com/onsi/gomega/ghttp" config_package "github.com/cloudfoundry-incubator/lattice/ltc/config" "github.com/cloudfoundry-incubator/lattice/ltc/config/blob_store" "github.com/cloudfoundry-incubator/lattice/ltc/config/persister" "github.com/goamz/goamz/aws" "github.com/goamz/goamz/s3" ) var _ = Describe("BlobStore", func() { var ( config *config_package.Config httpClient *http.Client blobStore blob_store.BlobStore fakeServer *ghttp.Server awsRegion = aws.Region{Name: "riak-region-1", S3Endpoint: "http://s3.amazonaws.com"} ) BeforeEach(func() { fakeServer = ghttp.NewServer() config = config_package.New(persister.NewMemPersister()) fakeServerURL, err := url.Parse(fakeServer.URL()) Expect(err).NotTo(HaveOccurred()) proxyHostArr := strings.Split(fakeServerURL.Host, ":") Expect(proxyHostArr).To(HaveLen(2)) proxyHostPort, err := strconv.Atoi(proxyHostArr[1]) Expect(err).NotTo(HaveOccurred()) config.SetBlobTarget(proxyHostArr[0], uint16(proxyHostPort), "V8GDQFR_VDOGM55IV8OH", "Wv_kltnl98hNWNdNwyQPYnFhK4gVPTxVS3NNMg==", "buck")
package config_test import ( "errors" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/cloudfoundry-incubator/lattice/ltc/config" "github.com/cloudfoundry-incubator/lattice/ltc/config/dav_blob_store" ) var _ = Describe("Config", func() { var ( testPersister *fakePersister testConfig *config.Config ) BeforeEach(func() { testPersister = &fakePersister{} testConfig = config.New(testPersister) }) Describe("Target", func() { It("sets the target", func() { testConfig.SetTarget("mynewapi.com") Expect(testConfig.Target()).To(Equal("mynewapi.com")) }) })
config_package "github.com/cloudfoundry-incubator/lattice/ltc/config" "github.com/cloudfoundry-incubator/lattice/ltc/secure_shell" "github.com/cloudfoundry-incubator/lattice/ltc/secure_shell/fake_dialer" "github.com/cloudfoundry-incubator/lattice/ltc/secure_shell/fake_secure_session" "github.com/cloudfoundry-incubator/lattice/ltc/secure_shell/fake_term" "github.com/pivotal-golang/clock/fakeclock" ) var _ = Describe("SecureShell", func() { var ( fakeDialer *fake_dialer.FakeDialer fakeSession *fake_secure_session.FakeSecureSession fakeTerm *fake_term.FakeTerm fakeStdin *gbytes.Buffer fakeStdout *gbytes.Buffer fakeStderr *gbytes.Buffer fakeClock *fakeclock.FakeClock config *config_package.Config secureShell *secure_shell.SecureShell oldTerm string ) BeforeEach(func() { fakeDialer = &fake_dialer.FakeDialer{} fakeSession = &fake_secure_session.FakeSecureSession{} fakeTerm = &fake_term.FakeTerm{} fakeStdin = gbytes.NewBuffer() fakeStdout = gbytes.NewBuffer() fakeStderr = gbytes.NewBuffer() fakeClock = fakeclock.NewFakeClock(time.Now())
"github.com/cloudfoundry-incubator/lattice/ltc/exit_handler/fake_exit_handler" "github.com/cloudfoundry-incubator/lattice/ltc/terminal" "github.com/cloudfoundry-incubator/lattice/ltc/terminal/password_reader/fake_password_reader" "github.com/cloudfoundry-incubator/lattice/ltc/test_helpers" "github.com/codegangsta/cli" config_package "github.com/cloudfoundry-incubator/lattice/ltc/config" ) var _ = Describe("CommandFactory", func() { var ( stdinReader *io.PipeReader stdinWriter *io.PipeWriter outputBuffer *gbytes.Buffer terminalUI terminal.UI config *config_package.Config configPersister persister.Persister fakeTargetVerifier *fake_target_verifier.FakeTargetVerifier fakeBlobStoreVerifier *fake_blob_store_verifier.FakeBlobStoreVerifier fakeExitHandler *fake_exit_handler.FakeExitHandler fakePasswordReader *fake_password_reader.FakePasswordReader ) BeforeEach(func() { stdinReader, stdinWriter = io.Pipe() outputBuffer = gbytes.NewBuffer() fakeExitHandler = &fake_exit_handler.FakeExitHandler{} fakePasswordReader = &fake_password_reader.FakePasswordReader{} terminalUI = terminal.NewUI(stdinReader, outputBuffer, fakePasswordReader) fakeTargetVerifier = &fake_target_verifier.FakeTargetVerifier{} fakeBlobStoreVerifier = &fake_blob_store_verifier.FakeBlobStoreVerifier{} configPersister = persister.NewMemPersister()
package config_test import ( "errors" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/cloudfoundry-incubator/lattice/ltc/config" ) var _ = Describe("Config", func() { var ( testPersister *fakePersister testConfig *config.Config ) BeforeEach(func() { testPersister = &fakePersister{} testConfig = config.New(testPersister) }) Describe("Target", func() { It("sets the target", func() { testConfig.SetTarget("mynewapi.com") Expect(testConfig.Target()).To(Equal("mynewapi.com")) }) }) Describe("Username", func() {
package config_test import ( "errors" "net/http" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/cloudfoundry-incubator/lattice/ltc/config" ) var _ = Describe("Config", func() { var testConfig *config.Config BeforeEach(func() { testConfig = config.New(&fakePersister{}) }) Describe("Target", func() { It("sets the target", func() { testConfig.SetTarget("mynewapi.com") Expect(testConfig.Target()).To(Equal("mynewapi.com")) }) }) Describe("Username", func() { It("sets the target", func() { testConfig.SetLogin("ausername", "apassword")
verifier blob_store.BlobStoreVerifier fakeDAVVerifier *fake_blob_store_verifier.FakeVerifier fakeS3Verifier *fake_blob_store_verifier.FakeVerifier ) BeforeEach(func() { fakeDAVVerifier = &fake_blob_store_verifier.FakeVerifier{} fakeS3Verifier = &fake_blob_store_verifier.FakeVerifier{} verifier = blob_store.BlobStoreVerifier{ DAVBlobStoreVerifier: fakeDAVVerifier, S3BlobStoreVerifier: fakeS3Verifier, } }) Context("when a dav blob store is targeted", func() { var config *config_package.Config BeforeEach(func() { config = config_package.New(nil) config.SetBlobStore("some-host", "some-port", "some-user", "some-password") }) It("returns a new DavBlobStore Verifier", func() { verifier.Verify(config) Expect(fakeDAVVerifier.VerifyCallCount()).To(Equal(1)) Expect(fakeS3Verifier.VerifyCallCount()).To(Equal(0)) }) }) Context("when an s3 blob store is targeted", func() { var config *config_package.Config
. "github.com/onsi/gomega" "github.com/onsi/gomega/ghttp" config_package "github.com/cloudfoundry-incubator/lattice/ltc/config" "github.com/cloudfoundry-incubator/lattice/ltc/config/persister" "github.com/cloudfoundry-incubator/lattice/ltc/config/target_verifier" "github.com/cloudfoundry-incubator/receptor" "github.com/cloudfoundry-incubator/receptor/fake_receptor" ) var _ = Describe("TargetVerifier", func() { Describe("VerifyBlobTarget", func() { var ( config *config_package.Config fakeServer *ghttp.Server targetVerifier target_verifier.TargetVerifier statusCode int responseBody string ) BeforeEach(func() { targetVerifier = target_verifier.New(func(string) receptor.Client { return &fake_receptor.FakeClient{} }) fakeServer = ghttp.NewServer() config = config_package.New(persister.NewMemPersister()) proxyURL, err := url.Parse(fakeServer.URL()) Expect(err).NotTo(HaveOccurred()) proxyHostArr := strings.Split(proxyURL.Host, ":") Expect(proxyHostArr).To(HaveLen(2))
func cliCommands(ltcConfigRoot string, exitHandler exit_handler.ExitHandler, config *config.Config, logger lager.Logger, targetVerifier target_verifier.TargetVerifier, ui terminal.UI) []cli.Command { receptorClient := receptor.NewClient(config.Receptor()) noaaConsumer := noaa.NewConsumer(LoggregatorUrl(config.Loggregator()), nil, nil) appRunner := app_runner.New(receptorClient, config.Target()) clock := clock.NewClock() logReader := logs.NewLogReader(noaaConsumer) tailedLogsOutputter := console_tailed_logs_outputter.NewConsoleTailedLogsOutputter(ui, logReader) taskExaminer := task_examiner.New(receptorClient) taskExaminerCommandFactory := task_examiner_command_factory.NewTaskExaminerCommandFactory(taskExaminer, ui, exitHandler) taskRunner := task_runner.New(receptorClient, taskExaminer) taskRunnerCommandFactory := task_runner_command_factory.NewTaskRunnerCommandFactory(taskRunner, ui, exitHandler) appExaminer := app_examiner.New(receptorClient, app_examiner.NewNoaaConsumer(noaaConsumer)) graphicalVisualizer := graphical.NewGraphicalVisualizer(appExaminer) appExaminerCommandFactory := app_examiner_command_factory.NewAppExaminerCommandFactory(appExaminer, ui, clock, exitHandler, graphicalVisualizer, taskExaminer) appRunnerCommandFactoryConfig := app_runner_command_factory.AppRunnerCommandFactoryConfig{ AppRunner: appRunner, AppExaminer: appExaminer, UI: ui, Domain: config.Target(), Env: os.Environ(), Clock: clock, Logger: logger, TailedLogsOutputter: tailedLogsOutputter, ExitHandler: exitHandler, } appRunnerCommandFactory := app_runner_command_factory.NewAppRunnerCommandFactory(appRunnerCommandFactoryConfig) dockerRunnerCommandFactoryConfig := docker_runner_command_factory.DockerRunnerCommandFactoryConfig{ AppRunner: appRunner, AppExaminer: appExaminer, UI: ui, Domain: config.Target(), Env: os.Environ(), Clock: clock, Logger: logger, ExitHandler: exitHandler, TailedLogsOutputter: tailedLogsOutputter, DockerMetadataFetcher: docker_metadata_fetcher.New(docker_metadata_fetcher.NewDockerSessionFactory()), } dockerRunnerCommandFactory := docker_runner_command_factory.NewDockerRunnerCommandFactory(dockerRunnerCommandFactoryConfig) logsCommandFactory := logs_command_factory.NewLogsCommandFactory(appExaminer, ui, tailedLogsOutputter, exitHandler) configCommandFactory := config_command_factory.NewConfigCommandFactory(config, ui, targetVerifier, exitHandler) testRunner := integration_test.NewIntegrationTestRunner(config, ltcConfigRoot) integrationTestCommandFactory := integration_test_command_factory.NewIntegrationTestCommandFactory(testRunner) s3Auth := aws.Auth{ AccessKey: config.BlobTarget().AccessKey, SecretKey: config.BlobTarget().SecretKey, } s3S3 := s3.New(s3Auth, awsRegion, &http.Client{ Transport: &http.Transport{ Proxy: config.BlobTarget().Proxy(), Dial: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, }).Dial, TLSHandshakeTimeout: 10 * time.Second, }, }) blobStore := blob_store.NewBlobStore(config, s3S3) blobBucket := blobStore.Bucket(config.BlobTarget().BucketName) dropletRunner := droplet_runner.New(appRunner, taskRunner, config, blobStore, blobBucket, targetVerifier, appExaminer) cfIgnore := cf_ignore.New() dropletRunnerCommandFactory := droplet_runner_command_factory.NewDropletRunnerCommandFactory(*appRunnerCommandFactory, taskExaminer, dropletRunner, cfIgnore) helpCommand := cli.Command{ Name: "help", Aliases: []string{"h"}, Usage: "Shows a list of commands or help for one command", Description: "ltc help", Action: defaultAction, } return []cli.Command{ appExaminerCommandFactory.MakeCellsCommand(), dockerRunnerCommandFactory.MakeCreateAppCommand(), appRunnerCommandFactory.MakeSubmitLrpCommand(), logsCommandFactory.MakeDebugLogsCommand(), appExaminerCommandFactory.MakeListAppCommand(), logsCommandFactory.MakeLogsCommand(), appRunnerCommandFactory.MakeRemoveAppCommand(), appRunnerCommandFactory.MakeScaleAppCommand(), appExaminerCommandFactory.MakeStatusCommand(), taskRunnerCommandFactory.MakeSubmitTaskCommand(), configCommandFactory.MakeTargetCommand(), configCommandFactory.MakeTargetBlobCommand(), taskExaminerCommandFactory.MakeTaskCommand(), taskRunnerCommandFactory.MakeDeleteTaskCommand(), taskRunnerCommandFactory.MakeCancelTaskCommand(), integrationTestCommandFactory.MakeIntegrationTestCommand(), appRunnerCommandFactory.MakeUpdateRoutesCommand(), appExaminerCommandFactory.MakeVisualizeCommand(), dropletRunnerCommandFactory.MakeBuildDropletCommand(), dropletRunnerCommandFactory.MakeListDropletsCommand(), dropletRunnerCommandFactory.MakeLaunchDropletCommand(), dropletRunnerCommandFactory.MakeRemoveDropletCommand(), helpCommand, } }
func cliCommands(ltcConfigRoot string, exitHandler exit_handler.ExitHandler, config *config.Config, logger lager.Logger, receptorClientCreator receptor_client.Creator, targetVerifier target_verifier.TargetVerifier, ui terminal.UI) []cli.Command { receptorClient := receptorClientCreator.CreateReceptorClient(config.Receptor()) noaaConsumer := noaa.NewConsumer(LoggregatorUrl(config.Loggregator()), nil, nil) appRunner := app_runner.New(receptorClient, config.Target(), &keygen_package.KeyGenerator{RandReader: rand.Reader}) clock := clock.NewClock() logReader := logs.NewLogReader(noaaConsumer) tailedLogsOutputter := console_tailed_logs_outputter.NewConsoleTailedLogsOutputter(ui, logReader) taskExaminer := task_examiner.New(receptorClient) taskExaminerCommandFactory := task_examiner_command_factory.NewTaskExaminerCommandFactory(taskExaminer, ui, exitHandler) taskRunner := task_runner.New(receptorClient, taskExaminer) taskRunnerCommandFactory := task_runner_command_factory.NewTaskRunnerCommandFactory(taskRunner, ui, exitHandler) appExaminer := app_examiner.New(receptorClient, app_examiner.NewNoaaConsumer(noaaConsumer)) graphicalVisualizer := graphical.NewGraphicalVisualizer(appExaminer) dockerTerminal := &app_examiner_command_factory.DockerTerminal{} appExaminerCommandFactory := app_examiner_command_factory.NewAppExaminerCommandFactory(appExaminer, ui, dockerTerminal, clock, exitHandler, graphicalVisualizer, taskExaminer, config.Target()) appRunnerCommandFactoryConfig := app_runner_command_factory.AppRunnerCommandFactoryConfig{ AppRunner: appRunner, AppExaminer: appExaminer, UI: ui, Domain: config.Target(), Env: os.Environ(), Clock: clock, Logger: logger, TailedLogsOutputter: tailedLogsOutputter, ExitHandler: exitHandler, } appRunnerCommandFactory := app_runner_command_factory.NewAppRunnerCommandFactory(appRunnerCommandFactoryConfig) dockerRunnerCommandFactoryConfig := docker_runner_command_factory.DockerRunnerCommandFactoryConfig{ AppRunner: appRunner, AppExaminer: appExaminer, UI: ui, Domain: config.Target(), Env: os.Environ(), Clock: clock, Logger: logger, ExitHandler: exitHandler, TailedLogsOutputter: tailedLogsOutputter, DockerMetadataFetcher: docker_metadata_fetcher.New(docker_metadata_fetcher.NewDockerSessionFactory()), } dockerRunnerCommandFactory := docker_runner_command_factory.NewDockerRunnerCommandFactory(dockerRunnerCommandFactoryConfig) logsCommandFactory := logs_command_factory.NewLogsCommandFactory(appExaminer, taskExaminer, ui, tailedLogsOutputter, exitHandler) clusterTestRunner := cluster_test.NewClusterTestRunner(config, ltcConfigRoot) clusterTestCommandFactory := cluster_test_command_factory.NewClusterTestCommandFactory(clusterTestRunner) blobStore := blob_store.New(config) blobStoreVerifier := blob_store.BlobStoreVerifier{ DAVBlobStoreVerifier: dav_blob_store.Verifier{}, S3BlobStoreVerifier: s3_blob_store.Verifier{}, } httpProxyConfReader := &droplet_runner.HTTPProxyConfReader{ URL: fmt.Sprintf("http://%s:8444/proxyconf.json", config.Target()), } dropletRunner := droplet_runner.New(appRunner, taskRunner, config, blobStore, appExaminer, httpProxyConfReader) cfIgnore := cf_ignore.New() zipper := &zipper_package.DropletArtifactZipper{} dropletRunnerCommandFactory := droplet_runner_command_factory.NewDropletRunnerCommandFactory(*appRunnerCommandFactory, blobStoreVerifier, taskExaminer, dropletRunner, cfIgnore, zipper, config) configCommandFactory := config_command_factory.NewConfigCommandFactory(config, ui, targetVerifier, blobStoreVerifier, exitHandler) secureDialer := &secure_shell.SecureDialer{DialFunc: ssh.Dial} secureTerm := &secure_shell.SecureTerm{} keepaliveInterval := 30 * time.Second secureShell := &secure_shell.SecureShell{ Dialer: secureDialer, Term: secureTerm, Clock: clock, Ticker: clock.NewTicker(keepaliveInterval), } sshCommandFactory := ssh_command_factory.NewSSHCommandFactory(config, ui, exitHandler, appExaminer, secureShell) helpCommand := cli.Command{ Name: "help", Aliases: []string{"h"}, Usage: "Shows a list of commands or help for one command", Description: "ltc help", Action: defaultAction, } return []cli.Command{ appExaminerCommandFactory.MakeCellsCommand(), dockerRunnerCommandFactory.MakeCreateAppCommand(), appRunnerCommandFactory.MakeSubmitLrpCommand(), logsCommandFactory.MakeDebugLogsCommand(), appExaminerCommandFactory.MakeListAppCommand(), logsCommandFactory.MakeLogsCommand(), appRunnerCommandFactory.MakeRemoveAppCommand(), appRunnerCommandFactory.MakeScaleAppCommand(), appExaminerCommandFactory.MakeStatusCommand(), taskRunnerCommandFactory.MakeSubmitTaskCommand(), configCommandFactory.MakeTargetCommand(), taskExaminerCommandFactory.MakeTaskCommand(), taskRunnerCommandFactory.MakeDeleteTaskCommand(), taskRunnerCommandFactory.MakeCancelTaskCommand(), clusterTestCommandFactory.MakeClusterTestCommand(), appRunnerCommandFactory.MakeUpdateRoutesCommand(), appRunnerCommandFactory.MakeUpdateCommand(), appExaminerCommandFactory.MakeVisualizeCommand(), dropletRunnerCommandFactory.MakeBuildDropletCommand(), dropletRunnerCommandFactory.MakeListDropletsCommand(), dropletRunnerCommandFactory.MakeLaunchDropletCommand(), dropletRunnerCommandFactory.MakeRemoveDropletCommand(), dropletRunnerCommandFactory.MakeImportDropletCommand(), dropletRunnerCommandFactory.MakeExportDropletCommand(), sshCommandFactory.MakeSSHCommand(), helpCommand, } }
"github.com/cloudfoundry-incubator/lattice/ltc/droplet_runner/fake_blob_store" "github.com/cloudfoundry-incubator/lattice/ltc/droplet_runner/fake_proxyconf_reader" "github.com/cloudfoundry-incubator/lattice/ltc/task_runner/fake_task_runner" "github.com/cloudfoundry-incubator/lattice/ltc/test_helpers/matchers" "github.com/cloudfoundry-incubator/receptor" "github.com/cloudfoundry-incubator/runtime-schema/models" config_package "github.com/cloudfoundry-incubator/lattice/ltc/config" ) var _ = Describe("DropletRunner", func() { var ( fakeAppRunner *fake_app_runner.FakeAppRunner fakeTaskRunner *fake_task_runner.FakeTaskRunner config *config_package.Config fakeBlobStore *fake_blob_store.FakeBlobStore fakeAppExaminer *fake_app_examiner.FakeAppExaminer fakeProxyConfReader *fake_proxyconf_reader.FakeProxyConfReader dropletRunner droplet_runner.DropletRunner ) BeforeEach(func() { fakeAppRunner = &fake_app_runner.FakeAppRunner{} fakeTaskRunner = &fake_task_runner.FakeTaskRunner{} config = config_package.New(persister.NewMemPersister()) fakeBlobStore = &fake_blob_store.FakeBlobStore{} fakeAppExaminer = &fake_app_examiner.FakeAppExaminer{} fakeProxyConfReader = &fake_proxyconf_reader.FakeProxyConfReader{} dropletRunner = droplet_runner.New(fakeAppRunner, fakeTaskRunner, config, fakeBlobStore, fakeAppExaminer, fakeProxyConfReader) })
config_package "github.com/cloudfoundry-incubator/lattice/ltc/config" "github.com/cloudfoundry-incubator/lattice/ltc/exit_handler/exit_codes" "github.com/cloudfoundry-incubator/lattice/ltc/exit_handler/fake_exit_handler" "github.com/cloudfoundry-incubator/lattice/ltc/secure_shell/command_factory" "github.com/cloudfoundry-incubator/lattice/ltc/secure_shell/command_factory/fake_secure_shell" "github.com/cloudfoundry-incubator/lattice/ltc/terminal" "github.com/cloudfoundry-incubator/lattice/ltc/test_helpers" "github.com/codegangsta/cli" ) var _ = Describe("SSH CommandFactory", func() { var ( config *config_package.Config outputBuffer *gbytes.Buffer terminalUI terminal.UI fakeExitHandler *fake_exit_handler.FakeExitHandler fakeSecureShell *fake_secure_shell.FakeSecureShell ) BeforeEach(func() { config = config_package.New(nil) config.SetTarget("lattice.xip.io") outputBuffer = gbytes.NewBuffer() terminalUI = terminal.NewUI(nil, outputBuffer, nil) fakeExitHandler = &fake_exit_handler.FakeExitHandler{} fakeSecureShell = &fake_secure_shell.FakeSecureShell{} }) Describe("SSHCommand", func() {
func cliCommands(ltcConfigRoot string, exitHandler exit_handler.ExitHandler, config *config.Config, logger lager.Logger, targetVerifier target_verifier.TargetVerifier, ui terminal.UI) []cli.Command { receptorClient := receptor.NewClient(config.Receptor()) noaaConsumer := noaa.NewConsumer(LoggregatorUrl(config.Loggregator()), nil, nil) appRunner := app_runner.New(receptorClient, config.Target()) clock := clock.NewClock() logReader := logs.NewLogReader(noaaConsumer) tailedLogsOutputter := console_tailed_logs_outputter.NewConsoleTailedLogsOutputter(ui, logReader) taskExaminer := task_examiner.New(receptorClient) taskExaminerCommandFactory := task_examiner_command_factory.NewTaskExaminerCommandFactory(taskExaminer, ui, exitHandler) taskRunner := task_runner.New(receptorClient, taskExaminer) taskRunnerCommandFactory := task_runner_command_factory.NewTaskRunnerCommandFactory(taskRunner, ui, exitHandler) appExaminer := app_examiner.New(receptorClient, app_examiner.NewNoaaConsumer(noaaConsumer)) graphicalVisualizer := graphical.NewGraphicalVisualizer(appExaminer) appExaminerCommandFactory := app_examiner_command_factory.NewAppExaminerCommandFactory(appExaminer, ui, clock, exitHandler, graphicalVisualizer, taskExaminer, config.Target()) appRunnerCommandFactoryConfig := app_runner_command_factory.AppRunnerCommandFactoryConfig{ AppRunner: appRunner, AppExaminer: appExaminer, UI: ui, Domain: config.Target(), Env: os.Environ(), Clock: clock, Logger: logger, TailedLogsOutputter: tailedLogsOutputter, ExitHandler: exitHandler, } appRunnerCommandFactory := app_runner_command_factory.NewAppRunnerCommandFactory(appRunnerCommandFactoryConfig) dockerRunnerCommandFactoryConfig := docker_runner_command_factory.DockerRunnerCommandFactoryConfig{ AppRunner: appRunner, AppExaminer: appExaminer, UI: ui, Domain: config.Target(), Env: os.Environ(), Clock: clock, Logger: logger, ExitHandler: exitHandler, TailedLogsOutputter: tailedLogsOutputter, DockerMetadataFetcher: docker_metadata_fetcher.New(docker_metadata_fetcher.NewDockerSessionFactory()), } dockerRunnerCommandFactory := docker_runner_command_factory.NewDockerRunnerCommandFactory(dockerRunnerCommandFactoryConfig) logsCommandFactory := logs_command_factory.NewLogsCommandFactory(appExaminer, taskExaminer, ui, tailedLogsOutputter, exitHandler) clusterTestRunner := cluster_test.NewClusterTestRunner(config, ltcConfigRoot) clusterTestCommandFactory := cluster_test_command_factory.NewClusterTestCommandFactory(clusterTestRunner) blobStore := blob_store.New(config) blobStoreVerifier := blob_store.NewVerifier(config) dropletRunner := droplet_runner.New(appRunner, taskRunner, config, blobStore, appExaminer) cfIgnore := cf_ignore.New() zipper := &zipper_package.DropletArtifactZipper{} dropletRunnerCommandFactory := droplet_runner_command_factory.NewDropletRunnerCommandFactory(*appRunnerCommandFactory, blobStoreVerifier, taskExaminer, dropletRunner, cfIgnore, zipper, config) configCommandFactory := config_command_factory.NewConfigCommandFactory(config, ui, targetVerifier, blobStoreVerifier, exitHandler) helpCommand := cli.Command{ Name: "help", Aliases: []string{"h"}, Usage: "Shows a list of commands or help for one command", Description: "ltc help", Action: defaultAction, } return []cli.Command{ appExaminerCommandFactory.MakeCellsCommand(), dockerRunnerCommandFactory.MakeCreateAppCommand(), appRunnerCommandFactory.MakeSubmitLrpCommand(), logsCommandFactory.MakeDebugLogsCommand(), appExaminerCommandFactory.MakeListAppCommand(), logsCommandFactory.MakeLogsCommand(), appRunnerCommandFactory.MakeRemoveAppCommand(), appRunnerCommandFactory.MakeScaleAppCommand(), appExaminerCommandFactory.MakeStatusCommand(), taskRunnerCommandFactory.MakeSubmitTaskCommand(), configCommandFactory.MakeTargetCommand(), taskExaminerCommandFactory.MakeTaskCommand(), taskRunnerCommandFactory.MakeDeleteTaskCommand(), taskRunnerCommandFactory.MakeCancelTaskCommand(), clusterTestCommandFactory.MakeClusterTestCommand(), appRunnerCommandFactory.MakeUpdateRoutesCommand(), appRunnerCommandFactory.MakeUpdateCommand(), appExaminerCommandFactory.MakeVisualizeCommand(), dropletRunnerCommandFactory.MakeBuildDropletCommand(), dropletRunnerCommandFactory.MakeListDropletsCommand(), dropletRunnerCommandFactory.MakeLaunchDropletCommand(), dropletRunnerCommandFactory.MakeRemoveDropletCommand(), dropletRunnerCommandFactory.MakeImportDropletCommand(), dropletRunnerCommandFactory.MakeExportDropletCommand(), helpCommand, } }
config_package "github.com/cloudfoundry-incubator/lattice/ltc/config" ) var _ = Describe("TargetVerifier", func() { Describe("VerifyBlobTarget", func() { const ( accessKey = "V8GDQFR_VDOGM55IV8OH" secretKey = "Wv_kltnl98hNWNdNwyQPYnFhK4gVPTxVS3NNMg==" bucketName = "BuCKeTHeaD" ) var ( config *config_package.Config fakeServer *ghttp.Server targetVerifier target_verifier.TargetVerifier statusCode int responseBody string ) verifyBlobTarget := func() (bool, error) { return targetVerifier.VerifyBlobTarget( config.BlobTarget().TargetHost, config.BlobTarget().TargetPort, config.BlobTarget().AccessKey, config.BlobTarget().SecretKey, bucketName, ) } BeforeEach(func() {
"github.com/cloudfoundry-incubator/lattice/ltc/config/persister" "github.com/cloudfoundry-incubator/lattice/ltc/config/target_verifier/fake_target_verifier" "github.com/cloudfoundry-incubator/lattice/ltc/exit_handler/fake_exit_handler" "github.com/cloudfoundry-incubator/lattice/ltc/terminal" "github.com/cloudfoundry-incubator/lattice/ltc/test_helpers" "github.com/codegangsta/cli" "github.com/pivotal-golang/lager" ) var _ = Describe("CliAppFactory", func() { var ( fakeTargetVerifier *fake_target_verifier.FakeTargetVerifier fakeExitHandler *fake_exit_handler.FakeExitHandler outputBuffer *gbytes.Buffer terminalUI terminal.UI cliApp *cli.App cliConfig *config.Config latticeVersion, diegoVersion string ) BeforeEach(func() { fakeTargetVerifier = &fake_target_verifier.FakeTargetVerifier{} fakeExitHandler = new(fake_exit_handler.FakeExitHandler) memPersister := persister.NewMemPersister() outputBuffer = gbytes.NewBuffer() terminalUI = terminal.NewUI(nil, outputBuffer, nil) cliConfig = config.New(memPersister) latticeVersion, diegoVersion = "v0.2.Test", "0.12345.0" })
func (ss *SecureShell) ConnectToShell(appName string, instanceIndex int, command string, config *config_package.Config) error { diegoSSHUser := fmt.Sprintf("diego:%s/%d", appName, instanceIndex) address := fmt.Sprintf("%s:2222", config.Target()) session, err := ss.Dialer.Dial(diegoSSHUser, config.Username(), config.Password(), address) if err != nil { return err } defer session.Close() sessionIn, err := session.StdinPipe() if err != nil { return err } sessionOut, err := session.StdoutPipe() if err != nil { return err } sessionErr, err := session.StderrPipe() if err != nil { return err } modes := ssh.TerminalModes{ ssh.ECHO: 1, ssh.TTY_OP_ISPEED: 115200, ssh.TTY_OP_OSPEED: 115200, } width, height := ss.Term.GetWinsize(os.Stdout.Fd()) terminalType := os.Getenv("TERM") if terminalType == "" { terminalType = "xterm" } if err := session.RequestPty(terminalType, height, width, modes); err != nil { return err } if state, err := ss.Term.SetRawTerminal(os.Stdin.Fd()); err == nil { defer ss.Term.RestoreTerminal(os.Stdin.Fd(), state) } go copyAndClose(nil, sessionIn, os.Stdin) go io.Copy(os.Stdout, sessionOut) go io.Copy(os.Stderr, sessionErr) resized := make(chan os.Signal, 16) signal.Notify(resized, syscall.SIGWINCH) defer func() { signal.Stop(resized) close(resized) }() go ss.resize(resized, session, os.Stdout.Fd(), width, height) keepaliveStopCh := make(chan struct{}) defer close(keepaliveStopCh) go ss.keepalive(session, keepaliveStopCh) if command == "" { session.Shell() session.Wait() } else { session.Run(command) } return nil }
"github.com/cloudfoundry-incubator/lattice/ltc/config/target_verifier/fake_target_verifier" "github.com/cloudfoundry-incubator/lattice/ltc/exit_handler/exit_codes" "github.com/cloudfoundry-incubator/lattice/ltc/exit_handler/fake_exit_handler" "github.com/cloudfoundry-incubator/lattice/ltc/terminal" "github.com/cloudfoundry-incubator/lattice/ltc/test_helpers" "github.com/codegangsta/cli" config_package "github.com/cloudfoundry-incubator/lattice/ltc/config" ) var _ = Describe("CommandFactory", func() { var ( stdinReader *io.PipeReader stdinWriter *io.PipeWriter outputBuffer *gbytes.Buffer terminalUI terminal.UI config *config_package.Config fakeTargetVerifier *fake_target_verifier.FakeTargetVerifier fakeExitHandler *fake_exit_handler.FakeExitHandler ) BeforeEach(func() { stdinReader, stdinWriter = io.Pipe() outputBuffer = gbytes.NewBuffer() fakeTargetVerifier = &fake_target_verifier.FakeTargetVerifier{} fakeExitHandler = new(fake_exit_handler.FakeExitHandler) terminalUI = terminal.NewUI(stdinReader, outputBuffer, nil) config = config_package.New(persister.NewMemPersister()) }) Describe("TargetBlobCommand", func() {
"github.com/cloudfoundry-incubator/lattice/ltc/exit_handler/fake_exit_handler" "github.com/cloudfoundry-incubator/lattice/ltc/receptor_client/fake_receptor_client_creator" "github.com/cloudfoundry-incubator/lattice/ltc/terminal" "github.com/cloudfoundry-incubator/lattice/ltc/test_helpers" "github.com/cloudfoundry-incubator/receptor/fake_receptor" "github.com/codegangsta/cli" "github.com/pivotal-golang/lager" ) var _ = Describe("CliAppFactory", func() { var ( fakeTargetVerifier *fake_target_verifier.FakeTargetVerifier fakeReceptorClientCreator *fake_receptor_client_creator.FakeCreator fakeExitHandler *fake_exit_handler.FakeExitHandler outputBuffer *gbytes.Buffer terminalUI terminal.UI cliApp *cli.App cliConfig *config.Config latticeVersion, diegoVersion string ) BeforeEach(func() { fakeTargetVerifier = &fake_target_verifier.FakeTargetVerifier{} fakeReceptorClientCreator = &fake_receptor_client_creator.FakeCreator{} fakeExitHandler = &fake_exit_handler.FakeExitHandler{} memPersister := persister.NewMemPersister() outputBuffer = gbytes.NewBuffer() terminalUI = terminal.NewUI(nil, outputBuffer, nil) cliConfig = config.New(memPersister) latticeVersion, diegoVersion = "v0.2.Test", "0.12345.0"