Example #1
0
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
}
				})
				It("errors when port exceeds 65536", func() {
					commandFinishChan := test_helpers.AsyncExecuteCommandWithArgs(targetBlobCommand, []string{"192.168.11.11:70000"})

					Eventually(commandFinishChan).Should(BeClosed())
					Expect(outputBuffer).To(test_helpers.SayLine("Error setting blob target: malformed port"))
					Expect(fakeExitHandler.ExitCalledWith).To(Equal([]int{exit_codes.InvalidSyntax}))
					Expect(fakeTargetVerifier.VerifyBlobTargetCallCount()).To(BeZero())
				})
			})

			Context("scenarios that should not save the config", func() {
				verifyConfigNotSaved := func(failMessage string) {
					Expect(outputBuffer).NotTo(test_helpers.Say("Blob Location Set"))
					Expect(outputBuffer).To(test_helpers.Say(failMessage))
					config.Load()
					blobTarget := config.BlobTarget()
					Expect(blobTarget.TargetHost).To(Equal("original-host"))
					Expect(blobTarget.TargetPort).To(Equal(uint16(8989)))
					Expect(blobTarget.AccessKey).To(Equal("original-key"))
					Expect(blobTarget.SecretKey).To(Equal("original-secret"))
					Expect(blobTarget.BucketName).To(Equal("original-bucket"))
					Expect(fakeExitHandler.ExitCalledWith).To(Equal([]int{exit_codes.BadTarget}))
				}

				BeforeEach(func() {
					config.SetBlobTarget("original-host", 8989, "original-key", "original-secret", "original-bucket")
					config.Save()
				})

				It("does not save the config when there is an error connecting to the target", func() {
Example #3
0
		It("returns errors from the persistor", func() {
			testPersister.err = errors.New("Error")

			err := testConfig.Save()
			Expect(err).To(MatchError("Error"))
		})
	})

	Describe("Load", func() {
		It("loads the target, username, and password from the persister", func() {
			testPersister.target = "mysavedapi.com"
			testPersister.username = "******"
			testPersister.password = "******"

			Expect(testConfig.Load()).To(Succeed())

			Expect(testPersister.target).To(Equal("mysavedapi.com"))
			Expect(testConfig.Receptor()).To(Equal("http://*****:*****@receptor.mysavedapi.com"))
		})

		It("returns errors from loading the config", func() {
			testPersister.err = errors.New("Error")

			err := testConfig.Load()
			Expect(err).To(MatchError("Error"))
		})
	})

	Describe("TargetBlob", func() {
		It("sets the blob target", func() {
Example #4
0
		It("returns errors from the persistor", func() {
			testConfig = config.New(&fakePersister{err: errors.New("Error")})

			err := testConfig.Save()

			Expect(err).To(MatchError("Error"))
		})
	})

	Describe("Load", func() {
		It("loads the target, username, and password from the persister", func() {
			fakePersister := &fakePersister{target: "mysavedapi.com", username: "******", password: "******"}
			testConfig = config.New(fakePersister)

			testConfig.Load()

			Expect(fakePersister.target).To(Equal("mysavedapi.com"))
			Expect(testConfig.Receptor()).To(Equal("http://*****:*****@receptor.mysavedapi.com"))
		})

		It("returns errors from loading the config", func() {
			testConfig = config.New(&fakePersister{err: errors.New("Error")})

			err := testConfig.Load()

			Expect(err).To(MatchError("Error"))
		})
	})

	Describe("TargetBlob", func() {