github.com/niteshexa/cloudfoundry_cli@v7.1.0+incompatible/command/v7/add_network_policy_command_test.go (about)

     1  package v7_test
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/actionerror"
     5  	"code.cloudfoundry.org/cli/actor/cfnetworkingaction"
     6  	"code.cloudfoundry.org/cli/actor/v7action"
     7  	"code.cloudfoundry.org/cli/command/commandfakes"
     8  	"code.cloudfoundry.org/cli/command/flag"
     9  	"code.cloudfoundry.org/cli/command/translatableerror"
    10  	. "code.cloudfoundry.org/cli/command/v7"
    11  	"code.cloudfoundry.org/cli/command/v7/v7fakes"
    12  	"code.cloudfoundry.org/cli/resources"
    13  	"code.cloudfoundry.org/cli/util/configv3"
    14  	"code.cloudfoundry.org/cli/util/ui"
    15  	. "github.com/onsi/ginkgo"
    16  	. "github.com/onsi/gomega"
    17  	. "github.com/onsi/gomega/gbytes"
    18  )
    19  
    20  var _ = Describe("add-network-policy Command", func() {
    21  	var (
    22  		cmd                 AddNetworkPolicyCommand
    23  		testUI              *ui.UI
    24  		fakeConfig          *commandfakes.FakeConfig
    25  		fakeSharedActor     *commandfakes.FakeSharedActor
    26  		fakeNetworkingActor *v7fakes.FakeNetworkingActor
    27  		fakeActor           *v7fakes.FakeActor
    28  		binaryName          string
    29  		executeErr          error
    30  		srcApp              string
    31  		destApp             string
    32  		protocol            string
    33  		org                 string
    34  		space               string
    35  	)
    36  
    37  	BeforeEach(func() {
    38  		testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer())
    39  		fakeConfig = new(commandfakes.FakeConfig)
    40  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    41  		fakeNetworkingActor = new(v7fakes.FakeNetworkingActor)
    42  		fakeActor = new(v7fakes.FakeActor)
    43  
    44  		srcApp = "some-app"
    45  		destApp = "some-other-app"
    46  		protocol = "tcp"
    47  		org = ""
    48  		space = ""
    49  
    50  		cmd = AddNetworkPolicyCommand{
    51  			BaseCommand: BaseCommand{
    52  				UI:          testUI,
    53  				Config:      fakeConfig,
    54  				Actor:       fakeActor,
    55  				SharedActor: fakeSharedActor,
    56  			},
    57  			NetworkingActor: fakeNetworkingActor,
    58  			RequiredArgs: flag.AddNetworkPolicyArgsV7{
    59  				SourceApp: srcApp,
    60  				DestApp:   destApp,
    61  			},
    62  			DestinationSpace: space,
    63  			DestinationOrg:   org,
    64  		}
    65  
    66  		binaryName = "faceman"
    67  		fakeConfig.BinaryNameReturns(binaryName)
    68  	})
    69  
    70  	JustBeforeEach(func() {
    71  		executeErr = cmd.Execute(nil)
    72  	})
    73  
    74  	When("checking target fails", func() {
    75  		BeforeEach(func() {
    76  			fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName})
    77  		})
    78  
    79  		It("returns an error", func() {
    80  			Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName}))
    81  
    82  			Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
    83  			checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    84  			Expect(checkTargetedOrg).To(BeTrue())
    85  			Expect(checkTargetedSpace).To(BeTrue())
    86  		})
    87  	})
    88  
    89  	When("the user is logged in, an org is targeted, and a space is targeted", func() {
    90  		BeforeEach(func() {
    91  			fakeConfig.CurrentUserReturns(configv3.User{Name: "some-user"}, nil)
    92  			fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "some-space", GUID: "some-space-guid"})
    93  			fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "some-org"})
    94  		})
    95  
    96  		When("protocol is specified but port is not", func() {
    97  			BeforeEach(func() {
    98  				cmd.Protocol = flag.NetworkProtocol{Protocol: protocol}
    99  			})
   100  
   101  			It("returns an error", func() {
   102  				Expect(executeErr).To(MatchError(translatableerror.NetworkPolicyProtocolOrPortNotProvidedError{}))
   103  				Expect(testUI.Out).NotTo(Say(`Adding network policy`))
   104  			})
   105  		})
   106  
   107  		When("port is specified but protocol is not", func() {
   108  			BeforeEach(func() {
   109  				cmd.Port = flag.NetworkPort{StartPort: 8080, EndPort: 8081}
   110  			})
   111  
   112  			It("returns an error", func() {
   113  				Expect(executeErr).To(MatchError(translatableerror.NetworkPolicyProtocolOrPortNotProvidedError{}))
   114  				Expect(testUI.Out).NotTo(Say(`Adding network policy`))
   115  			})
   116  		})
   117  
   118  		When("both protocol and port are specificed", func() {
   119  			BeforeEach(func() {
   120  				cmd.Protocol = flag.NetworkProtocol{Protocol: protocol}
   121  				cmd.Port = flag.NetworkPort{StartPort: 8080, EndPort: 8081}
   122  			})
   123  
   124  			When("the policy creation is successful", func() {
   125  				BeforeEach(func() {
   126  					fakeNetworkingActor.AddNetworkPolicyReturns(cfnetworkingaction.Warnings{"some-warning-1", "some-warning-2"}, nil)
   127  				})
   128  
   129  				It("displays OK when no error occurs", func() {
   130  					Expect(executeErr).ToNot(HaveOccurred())
   131  					Expect(fakeActor.GetOrganizationByNameCallCount()).To(Equal(0))
   132  					Expect(fakeActor.GetSpaceByNameAndOrganizationCallCount()).To(Equal(0))
   133  					Expect(fakeNetworkingActor.AddNetworkPolicyCallCount()).To(Equal(1))
   134  					passedSrcSpaceGuid, passedSrcAppName, passedDestSpaceGuid, passedDestAppName, passedProtocol, passedStartPort, passedEndPort := fakeNetworkingActor.AddNetworkPolicyArgsForCall(0)
   135  					Expect(passedSrcSpaceGuid).To(Equal("some-space-guid"))
   136  					Expect(passedSrcAppName).To(Equal("some-app"))
   137  					Expect(passedDestSpaceGuid).To(Equal("some-space-guid"))
   138  					Expect(passedDestAppName).To(Equal("some-other-app"))
   139  					Expect(passedProtocol).To(Equal("tcp"))
   140  					Expect(passedStartPort).To(Equal(8080))
   141  					Expect(passedEndPort).To(Equal(8081))
   142  
   143  					Expect(testUI.Out).To(Say(`Adding network policy from app %s to app %s in org some-org / space some-space as some-user\.\.\.`, srcApp, destApp))
   144  					Expect(testUI.Err).To(Say("some-warning-1"))
   145  					Expect(testUI.Err).To(Say("some-warning-2"))
   146  					Expect(testUI.Out).To(Say("OK"))
   147  				})
   148  			})
   149  
   150  			When("the policy creation is not successful", func() {
   151  				BeforeEach(func() {
   152  					fakeNetworkingActor.AddNetworkPolicyReturns(cfnetworkingaction.Warnings{"some-warning-1", "some-warning-2"}, actionerror.ApplicationNotFoundError{Name: srcApp})
   153  				})
   154  
   155  				It("does not display OK when an error occurs", func() {
   156  					Expect(executeErr).To(MatchError(actionerror.ApplicationNotFoundError{Name: srcApp}))
   157  
   158  					Expect(testUI.Out).To(Say(`Adding network policy from app %s to app %s in org some-org / space some-space as some-user\.\.\.`, srcApp, destApp))
   159  					Expect(testUI.Err).To(Say("some-warning-1"))
   160  					Expect(testUI.Err).To(Say("some-warning-2"))
   161  					Expect(testUI.Out).ToNot(Say("OK"))
   162  				})
   163  			})
   164  		})
   165  
   166  		When("both protocol and port are not specified", func() {
   167  			It("defaults protocol to 'tcp' and port to '8080'", func() {
   168  				Expect(executeErr).ToNot(HaveOccurred())
   169  
   170  				Expect(fakeNetworkingActor.AddNetworkPolicyCallCount()).To(Equal(1))
   171  				_, _, _, _, passedProtocol, passedStartPort, passedEndPort := fakeNetworkingActor.AddNetworkPolicyArgsForCall(0)
   172  				Expect(passedProtocol).To(Equal("tcp"))
   173  				Expect(passedStartPort).To(Equal(8080))
   174  				Expect(passedEndPort).To(Equal(8080))
   175  			})
   176  		})
   177  
   178  		When("org is specified and space is not", func() {
   179  			BeforeEach(func() {
   180  				cmd.DestinationOrg = "bananarama"
   181  				cmd.DestinationSpace = ""
   182  				fakeActor.GetOrganizationByNameReturns(resources.Organization{}, v7action.Warnings{}, actionerror.OrganizationNotFoundError{Name: "bananarama"})
   183  			})
   184  
   185  			It("returns an error", func() {
   186  				Expect(executeErr).To(MatchError(translatableerror.NetworkPolicyDestinationOrgWithoutSpaceError{}))
   187  				Expect(fakeNetworkingActor.AddNetworkPolicyCallCount()).To(Equal(0))
   188  			})
   189  		})
   190  
   191  		When("invalid org is specified", func() {
   192  			BeforeEach(func() {
   193  				cmd.DestinationOrg = "bananarama"
   194  				cmd.DestinationSpace = "hamdinger"
   195  				warnings := v7action.Warnings{"some-org-warning-1", "some-org-warning-2"}
   196  				fakeActor.GetOrganizationByNameReturns(resources.Organization{}, warnings, actionerror.OrganizationNotFoundError{Name: "bananarama"})
   197  			})
   198  
   199  			It("returns an error", func() {
   200  				Expect(executeErr).To(MatchError(actionerror.OrganizationNotFoundError{Name: "bananarama"}))
   201  				Expect(fakeNetworkingActor.AddNetworkPolicyCallCount()).To(Equal(0))
   202  			})
   203  
   204  			It("prints the warnings", func() {
   205  				Expect(testUI.Err).To(Say("some-org-warning-1"))
   206  				Expect(testUI.Err).To(Say("some-org-warning-2"))
   207  			})
   208  		})
   209  
   210  		When("a valid org but invalid space is specified", func() {
   211  			BeforeEach(func() {
   212  				cmd.DestinationOrg = "bananarama"
   213  				cmd.DestinationSpace = "hamdinger"
   214  				warnings := v7action.Warnings{"some-space-warning-1", "some-space-warning-2"}
   215  				fakeActor.GetOrganizationByNameReturns(resources.Organization{GUID: "some-org-guid"}, v7action.Warnings{}, nil)
   216  				fakeActor.GetSpaceByNameAndOrganizationReturns(resources.Space{}, warnings, actionerror.SpaceNotFoundError{Name: "bananarama"})
   217  			})
   218  
   219  			It("returns an error", func() {
   220  				passedSpaceName, passedOrgGuid := fakeActor.GetSpaceByNameAndOrganizationArgsForCall(0)
   221  				Expect(passedSpaceName).To(Equal("hamdinger"))
   222  				Expect(passedOrgGuid).To(Equal("some-org-guid"))
   223  				Expect(executeErr).To(MatchError(actionerror.SpaceNotFoundError{Name: "bananarama"}))
   224  				Expect(fakeNetworkingActor.AddNetworkPolicyCallCount()).To(Equal(0))
   225  			})
   226  
   227  			It("prints the warnings", func() {
   228  				Expect(testUI.Err).To(Say("some-space-warning-1"))
   229  				Expect(testUI.Err).To(Say("some-space-warning-2"))
   230  			})
   231  		})
   232  
   233  		When("a destination space but no destination org is specified", func() {
   234  			BeforeEach(func() {
   235  				cmd.DestinationSpace = "hamdinger"
   236  				warnings := v7action.Warnings{"some-warning-1", "some-warning-2"}
   237  				fakeActor.GetSpaceByNameAndOrganizationReturns(resources.Space{GUID: "some-other-space-guid"}, warnings, nil)
   238  			})
   239  
   240  			It("displays OK", func() {
   241  				Expect(executeErr).ToNot(HaveOccurred())
   242  				Expect(fakeActor.GetOrganizationByNameCallCount()).To(Equal(0))
   243  				Expect(fakeNetworkingActor.AddNetworkPolicyCallCount()).To(Equal(1))
   244  				passedSrcSpaceGuid, _, passedDestSpaceGuid, _, _, _, _ := fakeNetworkingActor.AddNetworkPolicyArgsForCall(0)
   245  				Expect(passedSrcSpaceGuid).To(Equal("some-space-guid"))
   246  				Expect(passedDestSpaceGuid).To(Equal("some-other-space-guid"))
   247  
   248  				Expect(testUI.Out).To(Say(`Adding network policy from app %s in org some-org / space some-space to app %s in org some-org / space hamdinger as some-user\.\.\.`, srcApp, destApp))
   249  				Expect(testUI.Out).To(Say("OK"))
   250  			})
   251  
   252  			It("prints the warnings", func() {
   253  				Expect(testUI.Err).To(Say("some-warning-1"))
   254  				Expect(testUI.Err).To(Say("some-warning-2"))
   255  			})
   256  		})
   257  
   258  		When("a destination org and space is specified for destination app", func() {
   259  			BeforeEach(func() {
   260  				cmd.DestinationOrg = "bananarama"
   261  				cmd.DestinationSpace = "hamdinger"
   262  				fakeActor.GetOrganizationByNameReturns(resources.Organization{GUID: "some-org-guid"}, v7action.Warnings{"some-org-warning-1", "some-org-warning-2"}, nil)
   263  				fakeActor.GetSpaceByNameAndOrganizationReturns(resources.Space{GUID: "some-other-space-guid"}, v7action.Warnings{"some-space-warning-1", "some-space-warning-2"}, nil)
   264  				fakeNetworkingActor.AddNetworkPolicyReturns(cfnetworkingaction.Warnings{"some-add-warning-1", "some-add-warning-2"}, nil)
   265  			})
   266  
   267  			It("displays OK", func() {
   268  				Expect(executeErr).ToNot(HaveOccurred())
   269  				Expect(fakeNetworkingActor.AddNetworkPolicyCallCount()).To(Equal(1))
   270  				passedSrcSpaceGuid, _, passedDestSpaceGuid, _, _, _, _ := fakeNetworkingActor.AddNetworkPolicyArgsForCall(0)
   271  				Expect(passedSrcSpaceGuid).To(Equal("some-space-guid"))
   272  				Expect(passedDestSpaceGuid).To(Equal("some-other-space-guid"))
   273  
   274  				Expect(testUI.Out).To(Say(`Adding network policy from app %s in org some-org / space some-space to app %s in org bananarama / space hamdinger as some-user\.\.\.`, srcApp, destApp))
   275  				Expect(testUI.Err).To(Say("some-org-warning-1"))
   276  				Expect(testUI.Err).To(Say("some-org-warning-2"))
   277  				Expect(testUI.Err).To(Say("some-space-warning-1"))
   278  				Expect(testUI.Err).To(Say("some-space-warning-2"))
   279  				Expect(testUI.Err).To(Say("some-add-warning-1"))
   280  				Expect(testUI.Err).To(Say("some-add-warning-2"))
   281  				Expect(testUI.Out).To(Say("OK"))
   282  			})
   283  		})
   284  	})
   285  })