blob: 844d844ba82a550957c5a010341ae0f9d396dbaf [file]
package cmd_test
import (
"bytes"
"errors"
"os"
"pxf-cli/cmd"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
var _ = Describe("CommandFunc", func() {
Context("when GPHOME, JAVA_HOME, PXF_BASE and PXF_HOME are set", func() {
BeforeEach(func() {
_ = os.Setenv("GPHOME", "/test/gphome")
_ = os.Setenv("PXF_HOME", "/test/pxfhome")
_ = os.Setenv("PXF_BASE", "/test/somewhere/pxf_base")
_ = os.Setenv("JAVA_HOME", "/etc/java/home")
})
It("successfully generates init command", func() {
commandFunc, err := cmd.InitCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
expected := "GPHOME=/test/gphome JAVA_HOME=/etc/java/home /test/pxfhome/bin/pxf init"
Expect(expected).To(Equal(commandFunc("foo")))
})
})
Context("when GPHOME is not set, JAVA_HOME, PXF_BASE, PXF_HOME, and PXF_CONF are set", func() {
BeforeEach(func() {
_ = os.Unsetenv("GPHOME")
_ = os.Setenv("PXF_HOME", "/test/pxfhome")
_ = os.Setenv("PXF_BASE", "/test/somewhere/pxf_base")
_ = os.Setenv("JAVA_HOME", "/etc/java/home")
_ = os.Setenv("PXF_CONF", "/test/pxfconf")
})
It("fails to init, register and migrate", func() {
commandFunc, err := cmd.RegisterCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("GPHOME must be set")))
commandFunc, err = cmd.InitCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("GPHOME must be set")))
})
It("it successfully generates start, stop, status, restart, reset, prepare, and migrate commands", func() {
commandFunc, err := cmd.StartCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("PXF_BASE=/test/somewhere/pxf_base /test/pxfhome/bin/pxf start").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.StopCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("PXF_BASE=/test/somewhere/pxf_base /test/pxfhome/bin/pxf stop").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.StatusCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("PXF_BASE=/test/somewhere/pxf_base /test/pxfhome/bin/pxf status").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.RestartCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("PXF_BASE=/test/somewhere/pxf_base /test/pxfhome/bin/pxf restart").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.ResetCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("/test/pxfhome/bin/pxf reset --force").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.PrepareCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("PXF_BASE=/test/somewhere/pxf_base /test/pxfhome/bin/pxf prepare").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.MigrateCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("PXF_CONF=/test/pxfconf PXF_BASE=/test/somewhere/pxf_base /test/pxfhome/bin/pxf migrate").To(Equal(commandFunc("foo")))
})
})
Context("when PXF_BASE is not set", func() {
BeforeEach(func() {
_ = os.Setenv("GPHOME", "/test/gphome")
_ = os.Setenv("PXF_HOME", "/test/pxfhome")
_ = os.Unsetenv("PXF_BASE")
_ = os.Setenv("JAVA_HOME", "/etc/java/home")
_ = os.Setenv("PXF_CONF", "/test/pxfconf")
})
It("successfully generates init and reset commands", func() {
commandFunc, err := cmd.ResetCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("/test/pxfhome/bin/pxf reset --force").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.InitCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("GPHOME=/test/gphome JAVA_HOME=/etc/java/home /test/pxfhome/bin/pxf init").To(Equal(commandFunc("foo")))
})
It("fails to start, stop, restart, status, sync, prepare, or migrate", func() {
commandFunc, err := cmd.StartCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_BASE must be set")))
commandFunc, err = cmd.StopCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_BASE must be set")))
commandFunc, err = cmd.StatusCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_BASE must be set")))
commandFunc, err = cmd.RestartCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_BASE must be set")))
commandFunc, err = cmd.SyncCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_BASE must be set")))
commandFunc, err = cmd.PrepareCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_BASE must be set")))
commandFunc, err = cmd.MigrateCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_BASE must be set")))
})
})
Context("when user specifies --delete", func() {
BeforeEach(func() {
_ = os.Setenv("PXF_BASE", "/test/somewhere/pxf_base")
_ = os.Unsetenv("PXF_HOME")
cmd.DeleteOnSync = true
})
It("sets up rsync commands of $PXF_BASE/{conf,lib,servers} dirs with --delete flag", func() {
commandFunc, err := cmd.SyncCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect(commandFunc("sdw1")).To(Equal(
"rsync -az --delete -e 'ssh -o StrictHostKeyChecking=no' " +
"'/test/somewhere/pxf_base/conf' " +
"'/test/somewhere/pxf_base/lib' " +
"'/test/somewhere/pxf_base/servers' " +
"'sdw1:/test/somewhere/pxf_base'",
))
Expect(commandFunc("sdw2")).To(Equal(
"rsync -az --delete -e 'ssh -o StrictHostKeyChecking=no' " +
"'/test/somewhere/pxf_base/conf' " +
"'/test/somewhere/pxf_base/lib' " +
"'/test/somewhere/pxf_base/servers' " +
"'sdw2:/test/somewhere/pxf_base'",
))
})
AfterEach(func() {
cmd.DeleteOnSync = false
})
})
Context("when only PXF_BASE is set", func() {
BeforeEach(func() {
_ = os.Unsetenv("GPHOME")
_ = os.Unsetenv("PXF_HOME")
_ = os.Setenv("PXF_BASE", "/test/somewhere/pxf_base")
_ = os.Unsetenv("JAVA_HOME")
_ = os.Unsetenv("PXF_CONF")
})
It("sets up rsync commands of $PXF_BASE/{conf,lib,servers} dirs", func() {
commandFunc, err := cmd.SyncCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect(commandFunc("sdw1")).To(Equal(
"rsync -az -e 'ssh -o StrictHostKeyChecking=no' " +
"'/test/somewhere/pxf_base/conf' " +
"'/test/somewhere/pxf_base/lib' " +
"'/test/somewhere/pxf_base/servers' " +
"'sdw1:/test/somewhere/pxf_base'",
))
Expect(commandFunc("sdw2")).To(Equal(
"rsync -az -e 'ssh -o StrictHostKeyChecking=no' " +
"'/test/somewhere/pxf_base/conf' " +
"'/test/somewhere/pxf_base/lib' " +
"'/test/somewhere/pxf_base/servers' " +
"'sdw2:/test/somewhere/pxf_base'",
))
})
It("fails to init, start, stop, restart, or tell status", func() {
commandFunc, err := cmd.InitCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("GPHOME must be set")))
commandFunc, err = cmd.StartCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_HOME must be set")))
commandFunc, err = cmd.StopCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_HOME must be set")))
commandFunc, err = cmd.RestartCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_HOME must be set")))
commandFunc, err = cmd.StatusCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_HOME must be set")))
commandFunc, err = cmd.PrepareCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_HOME must be set")))
commandFunc, err = cmd.MigrateCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_HOME must be set")))
})
})
Context("when PXF_BASE is set to empty string", func() {
BeforeEach(func() {
_ = os.Setenv("GPHOME", "/test/gphome")
_ = os.Setenv("PXF_HOME", "/test/pxfhome")
_ = os.Setenv("PXF_CONF", "/test/pxfconf")
_ = os.Setenv("PXF_BASE", "")
_ = os.Unsetenv("JAVA_HOME")
})
It("fails to start, stop, restart, status, or sync", func() {
_ = os.Setenv("PXF_BASE", "")
commandFunc, err := cmd.StartCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_BASE cannot be blank")))
commandFunc, err = cmd.StopCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_BASE cannot be blank")))
commandFunc, err = cmd.RestartCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_BASE cannot be blank")))
commandFunc, err = cmd.StatusCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_BASE cannot be blank")))
commandFunc, err = cmd.SyncCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_BASE cannot be blank")))
commandFunc, err = cmd.PrepareCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_BASE cannot be blank")))
commandFunc, err = cmd.MigrateCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_BASE cannot be blank")))
})
})
Context("when PXF_HOME is set to empty string", func() {
BeforeEach(func() {
_ = os.Setenv("GPHOME", "/test/gphome")
_ = os.Setenv("PXF_HOME", "")
_ = os.Unsetenv("PXF_BASE")
_ = os.Unsetenv("JAVA_HOME")
})
It("it fails to init, start, stop, restart, register, or status", func() {
_ = os.Setenv("PXF_HOME", "")
commandFunc, err := cmd.RegisterCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_HOME cannot be blank")))
commandFunc, err = cmd.InitCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_HOME cannot be blank")))
commandFunc, err = cmd.StartCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_HOME cannot be blank")))
commandFunc, err = cmd.StopCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_HOME cannot be blank")))
commandFunc, err = cmd.RestartCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_HOME cannot be blank")))
commandFunc, err = cmd.StatusCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_HOME cannot be blank")))
commandFunc, err = cmd.PrepareCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_HOME cannot be blank")))
commandFunc, err = cmd.MigrateCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("PXF_HOME cannot be blank")))
})
})
Context("when PXF_BASE is the same as PXF_HOME", func() {
BeforeEach(func() {
_ = os.Unsetenv("GPHOME")
_ = os.Setenv("PXF_HOME", "/test/pxfhome")
_ = os.Setenv("PXF_BASE", "/test/pxfhome")
_ = os.Setenv("PXF_CONF", "/test/pxfconf")
_ = os.Unsetenv("JAVA_HOME")
})
It("it fails to run the prepare command", func() {
commandFunc, err := cmd.PrepareCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("the PXF_BASE value must be different from your PXF installation directory")))
})
It("it successfully generates start, stop, status, restart, reset, and migrate commands", func() {
commandFunc, err := cmd.StartCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("PXF_BASE=/test/pxfhome /test/pxfhome/bin/pxf start").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.StopCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("PXF_BASE=/test/pxfhome /test/pxfhome/bin/pxf stop").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.StatusCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("PXF_BASE=/test/pxfhome /test/pxfhome/bin/pxf status").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.RestartCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("PXF_BASE=/test/pxfhome /test/pxfhome/bin/pxf restart").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.ResetCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("/test/pxfhome/bin/pxf reset --force").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.MigrateCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("PXF_CONF=/test/pxfconf PXF_BASE=/test/pxfhome /test/pxfhome/bin/pxf migrate").To(Equal(commandFunc("foo")))
})
})
Context("when PXF_CONF is the same as PXF_BASE", func() {
BeforeEach(func() {
_ = os.Unsetenv("GPHOME")
_ = os.Setenv("PXF_HOME", "/test/pxfhome")
_ = os.Setenv("PXF_BASE", "/test/pxfconf")
_ = os.Setenv("PXF_CONF", "/test/pxfconf")
_ = os.Unsetenv("JAVA_HOME")
})
It("it fails to run the migrate command", func() {
commandFunc, err := cmd.MigrateCommand.GetFunctionToExecute()
Expect(commandFunc).To(BeNil())
Expect(err).To(Equal(errors.New("your target PXF_BASE directory must be different from your existing PXF_CONF directory")))
})
It("it successfully generates start, stop, status, restart, and reset commands", func() {
commandFunc, err := cmd.StartCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("PXF_BASE=/test/pxfconf /test/pxfhome/bin/pxf start").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.StopCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("PXF_BASE=/test/pxfconf /test/pxfhome/bin/pxf stop").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.StatusCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("PXF_BASE=/test/pxfconf /test/pxfhome/bin/pxf status").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.RestartCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("PXF_BASE=/test/pxfconf /test/pxfhome/bin/pxf restart").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.ResetCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("/test/pxfhome/bin/pxf reset --force").To(Equal(commandFunc("foo")))
commandFunc, err = cmd.PrepareCommand.GetFunctionToExecute()
Expect(err).To(BeNil())
Expect("PXF_BASE=/test/pxfconf /test/pxfhome/bin/pxf prepare").To(Equal(commandFunc("foo")))
})
})
Context("when the user tries to run a warn command and they answer y", func() {
It("Returns an error", func() {
var input bytes.Buffer
input.Write([]byte("Y"))
err := cmd.ResetCommand.Warn(&input)
Expect(err).To(BeNil())
})
})
Context("when the user tries to run a non-warn command", func() {
It("Returns an error", func() {
var input bytes.Buffer
input.Write([]byte("this input shouldn't matter!"))
err := cmd.StatusCommand.Warn(&input)
Expect(err).To(BeNil())
})
})
})