func NewCliApp() *cli.App { config := config.New(persister.NewFilePersister(config_helpers.ConfigFileLocation(ltcConfigRoot()))) signalChan := make(chan os.Signal) signal.Notify(signalChan, os.Interrupt) exitHandler := exit_handler.New(signalChan, os.Exit) go exitHandler.Run() targetVerifier := target_verifier.New(receptor_client_factory.MakeReceptorClient) app := cli_app_factory.MakeCliApp(latticeVersion, ltcConfigRoot(), exitHandler, config, logger(), targetVerifier, os.Stdout) return app }
func (t *targetVerifier) VerifyBlobTarget(host string, port uint16, accessKey, secretKey, bucketName string) (bool, error) { s3Auth := aws.Auth{ AccessKey: accessKey, SecretKey: secretKey, } config := config.New(persister.NewMemPersister()) config.SetBlobTarget(host, port, accessKey, secretKey, bucketName) s3S3 := s3.New(s3Auth, awsRegion, &http.Client{ Transport: &http.Transport{ Proxy: config.BlobTarget().Proxy(), Dial: (&net.Dialer{ Timeout: 5 * time.Second, KeepAlive: 5 * time.Second, }).Dial, TLSHandshakeTimeout: 10 * time.Second, }, }) s3S3.AttemptStrategy = aws.AttemptStrategy{} blobStore := blob_store.NewBlobStore(config, s3S3) blobBucket := blobStore.Bucket(config.BlobTarget().BucketName) if _, err := blobBucket.List("", "/", "", 1); err != nil { if httpError, ok := err.(*s3.Error); ok { switch httpError.StatusCode { case 403: return false, fmt.Errorf("unauthorized") default: return false, fmt.Errorf("%s", httpError) } } return false, fmt.Errorf("blob target is down: %s", err) } return true, nil }
func NewCliApp() *cli.App { config := config.New(persister.NewFilePersister(config_helpers.ConfigFileLocation(ltcConfigRoot()))) signalChan := make(chan os.Signal) signal.Notify(signalChan, os.Interrupt) exitHandler := exit_handler.New(signalChan, os.Exit) go exitHandler.Run() receptorClientCreator := receptor_client.ProxyAwareCreator{} return cli_app_factory.MakeCliApp( diegoVersion, latticeVersion, ltcConfigRoot(), exitHandler, config, logger(), receptorClientCreator, target_verifier.New(receptorClientCreator), os.Stdout, ) }
func NewCliApp() *cli.App { config := config.New(persister.NewFilePersister(config_helpers.ConfigFileLocation(ltcConfigRoot()))) signalChan := make(chan os.Signal) signal.Notify(signalChan, os.Interrupt) exitHandler := exit_handler.New(signalChan, os.Exit) go exitHandler.Run() targetVerifier := target_verifier.New(func(target string) receptor.Client { return receptor.NewClient(target) }) return cli_app_factory.MakeCliApp( diegoVersion, latticeVersion, ltcConfigRoot(), exitHandler, config, logger(), targetVerifier, os.Stdout, ) }
config *config_package.Config appRunnerCommandFactory app_runner_command_factory.AppRunnerCommandFactory ) BeforeEach(func() { fakeDropletRunner = &fake_droplet_runner.FakeDropletRunner{} fakeExitHandler = &fake_exit_handler.FakeExitHandler{} fakeTailedLogsOutputter = fake_tailed_logs_outputter.NewFakeTailedLogsOutputter() fakeClock = fakeclock.NewFakeClock(time.Now()) fakeAppExaminer = &fake_app_examiner.FakeAppExaminer{} fakeTaskExaminer = &fake_task_examiner.FakeTaskExaminer{} fakeCFIgnore = &fake_cf_ignore.FakeCFIgnore{} fakeZipper = &fake_zipper.FakeZipper{} fakeBlobStoreVerifier = &fake_blob_store_verifier.FakeBlobStoreVerifier{} config = config_package.New(nil) outputBuffer = gbytes.NewBuffer() appRunnerCommandFactory = app_runner_command_factory.AppRunnerCommandFactory{ AppRunner: &fake_app_runner.FakeAppRunner{}, AppExaminer: fakeAppExaminer, UI: terminal.NewUI(nil, outputBuffer, nil), ExitHandler: fakeExitHandler, TailedLogsOutputter: fakeTailedLogsOutputter, Clock: fakeClock, Domain: "192.168.11.11.xip.io", Env: []string{"SHELL=/bin/bash", "COLOR=Black", "AAAA=xyz"}, } }) Describe("BuildDropletCommand", func() {
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() { var targetBlobCommand cli.Command BeforeEach(func() { commandFactory := command_factory.NewConfigCommandFactory(config, terminalUI, fakeTargetVerifier, fakeExitHandler) targetBlobCommand = commandFactory.MakeTargetBlobCommand() }) Context("displaying the blob target", func() { It("outputs the current target", func() { config.SetBlobTarget("192.168.11.11", 8980, "datkeyyo", "supersecretJKJK", "bucket") config.Save()
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" }) JustBeforeEach(func() { cliApp = cli_app_factory.MakeCliApp( diegoVersion, latticeVersion, "~/", fakeExitHandler, cliConfig, lager.NewLogger("test"), fakeTargetVerifier, terminalUI, ) })
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) }) Describe("ListDroplets", func() { It("returns a list of droplets in the blob store", func() { fakeBlobStore.ListReturns([]blob.Blob{ {Path: "X/bits.zip", Created: time.Unix(1000, 0), Size: 100}, {Path: "X/droplet.tgz", Created: time.Unix(2000, 0), Size: 200}, {Path: "X/result.json", Created: time.Unix(3000, 0), Size: 300}, {Path: "Y/bits.zip"}, {Path: "X/Y/droplet.tgz"}, {Path: "droplet.tgz"},
subCommandTemplate := `NAME: {{.Name}} - {{.Usage}} USAGE: {{.Name}} command{{if .Flags}} [command options]{{end}} [arguments...] ` BeforeEach(func() { outputBuffer = gbytes.NewBuffer() fakeReceptorClientCreator = &fake_receptor_client_creator.FakeCreator{} cliApp = cli_app_factory.MakeCliApp( "", "", "~/", nil, config.New(persister.NewMemPersister()), nil, fakeReceptorClientCreator, nil, terminal.NewUI(nil, outputBuffer, nil), ) }) Describe("ShowHelp", func() { It("shows help for all commands", func() { Expect(cliApp.Commands).NotTo(BeEmpty()) cli_app_factory.ShowHelp(outputBuffer, dummyTemplate, cliApp) outputBytes, err := ioutil.ReadAll(outputBuffer)
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() config = config_package.New(configPersister) }) Describe("TargetCommand", func() { var targetCommand cli.Command verifyOldTargetStillSet := func() { newConfig := config_package.New(configPersister) Expect(newConfig.Load()).To(Succeed()) Expect(newConfig.Receptor()).To(Equal("http://*****:*****@receptor.oldtarget.com")) } BeforeEach(func() { commandFactory := command_factory.NewConfigCommandFactory(config, terminalUI, fakeTargetVerifier, fakeBlobStoreVerifier, fakeExitHandler) targetCommand = commandFactory.MakeTargetCommand()
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()) }) Describe("TargetCommand", func() { var targetCommand cli.Command verifyOldTargetStillSet := func() { config.Load() Expect(config.Receptor()).To(Equal("http://*****:*****@receptor.oldtarget.com")) } BeforeEach(func() { commandFactory := command_factory.NewConfigCommandFactory(config, terminalUI, fakeTargetVerifier, fakeExitHandler) targetCommand = commandFactory.MakeTargetCommand() })
. "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")) }) }) Describe("Username", func() { It("sets the target", func() { testConfig.SetLogin("ausername", "apassword") Expect(testConfig.Username()).To(Equal("ausername"))
) var _ = Describe("HelpHelpers", func() { var ( fakeTargetVerifier *fake_target_verifier.FakeTargetVerifier outputBuffer *gbytes.Buffer terminalUI terminal.UI cliConfig *config.Config cliApp *cli.App ) BeforeEach(func() { fakeTargetVerifier = &fake_target_verifier.FakeTargetVerifier{} outputBuffer = gbytes.NewBuffer() terminalUI = terminal.NewUI(nil, outputBuffer, nil) cliConfig = config.New(persister.NewMemPersister()) cliApp = cli_app_factory.MakeCliApp( "", "~/", nil, cliConfig, nil, fakeTargetVerifier, terminalUI, ) }) Describe("MatchArgAndFlags", func() { It("Checks for badflag", func() { cliAppArgs := []string{"ltc", "create", "--badflag"} flags := main.GetCommandFlags(cliApp, cliAppArgs[1])
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") Expect(testConfig.Username()).To(Equal("ausername"))
ghttp.VerifyRequest("GET", "/v1/actual_lrps"), ghttp.RespondWithJSONEncoded(http.StatusOK, actualResponse), ), ) fakeServer.RouteToHandler("GET", "/v1/tasks", ghttp.CombineHandlers( ghttp.VerifyRequest("GET", "/v1/tasks"), ghttp.RespondWithJSONEncoded(http.StatusOK, tasksResponse), ), ) var err error configRoot, err = ioutil.TempDir("", "config") Expect(err).NotTo(HaveOccurred()) ltcConfig := config.New(persister.NewFilePersister(config_helpers.ConfigFileLocation(configRoot))) listenerHost, listenerPort, err = net.SplitHostPort(listenerAddr) Expect(err).NotTo(HaveOccurred()) ltcConfig.SetTarget(fmt.Sprintf("%s.xip.io:%s", listenerHost, listenerPort)) Expect(ltcConfig.Save()).To(Succeed()) os.Setenv(latticeCliHomeVar, configRoot) }) AfterEach(func() { fakeServer.Close() Expect(os.RemoveAll(configRoot)).To(Succeed()) Expect(os.Unsetenv(latticeCliHomeVar)).To(Succeed()) }) ltcCommand := func(args ...string) *exec.Cmd {
. "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/cloudfoundry-incubator/lattice/ltc/blob_store" "github.com/cloudfoundry-incubator/lattice/ltc/blob_store/dav_blob_store" "github.com/cloudfoundry-incubator/lattice/ltc/blob_store/s3_blob_store" "github.com/cloudfoundry-incubator/lattice/ltc/config" ) var _ = Describe("BlobStoreManager", func() { Describe(".New", func() { var blobStore blob_store.BlobStore Context("when a dav blob store is targeted", func() { BeforeEach(func() { config := config.New(nil) config.SetBlobStore("some-host", "some-port", "some-user", "some-password") blobStore = blob_store.New(config) }) It("returns a new DavBlobStore object", func() { davBlobStore, ok := blobStore.(*dav_blob_store.BlobStore) Expect(ok).To(BeTrue()) Expect(davBlobStore.URL.String()).To(Equal("http://*****:*****@some-host:some-port")) }) }) Context("when an s3 blob store is targeted", func() { BeforeEach(func() { config := config.New(nil) config.SetS3BlobStore("", "", "some-bucket-name", "")