github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v6/remove_network_policy_command_test.go (about)

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