github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/network_policies_command_test.go (about)

     1  package v7_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/LukasHeimann/cloudfoundrycli/v8/actor/actionerror"
     7  	"github.com/LukasHeimann/cloudfoundrycli/v8/actor/cfnetworkingaction"
     8  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/commandfakes"
     9  	. "github.com/LukasHeimann/cloudfoundrycli/v8/command/v7"
    10  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/v7/v7fakes"
    11  	"github.com/LukasHeimann/cloudfoundrycli/v8/util/configv3"
    12  	"github.com/LukasHeimann/cloudfoundrycli/v8/util/ui"
    13  	. "github.com/onsi/ginkgo"
    14  	. "github.com/onsi/gomega"
    15  	. "github.com/onsi/gomega/gbytes"
    16  )
    17  
    18  var _ = Describe("network-policies Command", func() {
    19  	var (
    20  		cmd                      NetworkPoliciesCommand
    21  		testUI                   *ui.UI
    22  		fakeConfig               *commandfakes.FakeConfig
    23  		fakeSharedActor          *commandfakes.FakeSharedActor
    24  		fakeActor                *v7fakes.FakeActor
    25  		fakeNetworkPoliciesActor *v7fakes.FakeNetworkPoliciesActor
    26  		binaryName               string
    27  		executeErr               error
    28  		srcApp                   string
    29  	)
    30  
    31  	BeforeEach(func() {
    32  		testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer())
    33  		fakeConfig = new(commandfakes.FakeConfig)
    34  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    35  		fakeActor = new(v7fakes.FakeActor)
    36  		fakeNetworkPoliciesActor = new(v7fakes.FakeNetworkPoliciesActor)
    37  
    38  		srcApp = ""
    39  
    40  		cmd = NetworkPoliciesCommand{
    41  			BaseCommand: BaseCommand{
    42  				Config:      fakeConfig,
    43  				SharedActor: fakeSharedActor,
    44  				UI:          testUI,
    45  				Actor:       fakeActor,
    46  			},
    47  			NetworkingActor: fakeNetworkPoliciesActor,
    48  			SourceApp:       srcApp,
    49  		}
    50  
    51  		binaryName = "faceman"
    52  		fakeConfig.BinaryNameReturns(binaryName)
    53  	})
    54  
    55  	JustBeforeEach(func() {
    56  		executeErr = cmd.Execute(nil)
    57  	})
    58  
    59  	When("checking target fails", func() {
    60  		BeforeEach(func() {
    61  			fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName})
    62  		})
    63  
    64  		It("returns an error", func() {
    65  			Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName}))
    66  
    67  			Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
    68  			checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    69  			Expect(checkTargetedOrg).To(BeTrue())
    70  			Expect(checkTargetedSpace).To(BeTrue())
    71  		})
    72  	})
    73  
    74  	When("the user is logged in", func() {
    75  		BeforeEach(func() {
    76  			fakeActor.GetCurrentUserReturns(configv3.User{Name: "some-user"}, nil)
    77  			fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "some-space", GUID: "some-space-guid"})
    78  			fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "some-org"})
    79  		})
    80  
    81  		It("outputs flavor text", func() {
    82  			Expect(testUI.Out).To(Say(`Listing network policies in org some-org / space some-space as some-user\.\.\.`))
    83  		})
    84  
    85  		When("fetching the user fails", func() {
    86  			BeforeEach(func() {
    87  				fakeActor.GetCurrentUserReturns(configv3.User{}, errors.New("some-error"))
    88  			})
    89  
    90  			It("returns an error", func() {
    91  				Expect(executeErr).To(MatchError("some-error"))
    92  			})
    93  		})
    94  
    95  		When("listing policies is successful", func() {
    96  			BeforeEach(func() {
    97  				fakeNetworkPoliciesActor.NetworkPoliciesBySpaceReturns([]cfnetworkingaction.Policy{
    98  					{
    99  						SourceName:           "app1",
   100  						DestinationName:      "app2",
   101  						Protocol:             "tcp",
   102  						StartPort:            8080,
   103  						EndPort:              8080,
   104  						DestinationSpaceName: "some-space",
   105  						DestinationOrgName:   "some-org",
   106  					}, {
   107  						SourceName:           "app2",
   108  						DestinationName:      "app1",
   109  						Protocol:             "udp",
   110  						StartPort:            1234,
   111  						EndPort:              2345,
   112  						DestinationSpaceName: "some-space",
   113  						DestinationOrgName:   "some-org",
   114  					},
   115  				}, cfnetworkingaction.Warnings{"some-warning-1", "some-warning-2"}, nil)
   116  			})
   117  
   118  			It("lists the policies when no error occurs", func() {
   119  				Expect(executeErr).ToNot(HaveOccurred())
   120  				Expect(fakeNetworkPoliciesActor.NetworkPoliciesBySpaceCallCount()).To(Equal(1))
   121  				passedSpaceGuid := fakeNetworkPoliciesActor.NetworkPoliciesBySpaceArgsForCall(0)
   122  				Expect(passedSpaceGuid).To(Equal("some-space-guid"))
   123  
   124  				Expect(testUI.Out).To(Say(`Listing network policies in org some-org / space some-space as some-user\.\.\.`))
   125  				Expect(testUI.Out).To(Say("\n\n"))
   126  				Expect(testUI.Out).To(Say(`source\s+destination\s+protocol\s+ports\s+destination space\s+destination org`))
   127  				Expect(testUI.Out).To(Say(`app1\s+app2\s+tcp\s+8080\s+some-space\s+some-org`))
   128  				Expect(testUI.Out).To(Say(`app2\s+app1\s+udp\s+1234-2345\s+some-space\s+some-org`))
   129  
   130  				Expect(testUI.Err).To(Say("some-warning-1"))
   131  				Expect(testUI.Err).To(Say("some-warning-2"))
   132  			})
   133  
   134  			When("a source app name is passed", func() {
   135  				BeforeEach(func() {
   136  					cmd.SourceApp = "some-app"
   137  					fakeNetworkPoliciesActor.NetworkPoliciesBySpaceAndAppNameReturns([]cfnetworkingaction.Policy{
   138  						{
   139  							SourceName:           "app1",
   140  							DestinationName:      "app2",
   141  							Protocol:             "tcp",
   142  							StartPort:            8080,
   143  							EndPort:              8080,
   144  							DestinationSpaceName: "some-space",
   145  							DestinationOrgName:   "some-org",
   146  						}, {
   147  							SourceName:           "app2",
   148  							DestinationName:      "app1",
   149  							Protocol:             "udp",
   150  							StartPort:            1234,
   151  							EndPort:              2345,
   152  							DestinationSpaceName: "some-space",
   153  							DestinationOrgName:   "some-org",
   154  						},
   155  					}, cfnetworkingaction.Warnings{"some-warning-1", "some-warning-2"}, nil)
   156  				})
   157  
   158  				It("lists the policies when no error occurs", func() {
   159  					Expect(executeErr).ToNot(HaveOccurred())
   160  					Expect(fakeNetworkPoliciesActor.NetworkPoliciesBySpaceAndAppNameCallCount()).To(Equal(1))
   161  					passedSpaceGuid, passedSrcAppName := fakeNetworkPoliciesActor.NetworkPoliciesBySpaceAndAppNameArgsForCall(0)
   162  					Expect(passedSpaceGuid).To(Equal("some-space-guid"))
   163  					Expect(passedSrcAppName).To(Equal("some-app"))
   164  
   165  					Expect(testUI.Out).To(Say(`Listing network policies of app %s in org some-org / space some-space as some-user\.\.\.`, cmd.SourceApp))
   166  					Expect(testUI.Out).To(Say("\n\n"))
   167  					Expect(testUI.Out).To(Say(`source\s+destination\s+protocol\s+ports\s+destination space\s+destination org`))
   168  					Expect(testUI.Out).To(Say(`app1\s+app2\s+tcp\s+8080\s+some-space\s+some-org`))
   169  					Expect(testUI.Out).To(Say(`app2\s+app1\s+udp\s+1234-2345\s+some-space\s+some-org`))
   170  
   171  					Expect(testUI.Err).To(Say("some-warning-1"))
   172  					Expect(testUI.Err).To(Say("some-warning-2"))
   173  				})
   174  			})
   175  		})
   176  
   177  		When("listing the policies is not successful", func() {
   178  			BeforeEach(func() {
   179  				fakeNetworkPoliciesActor.NetworkPoliciesBySpaceReturns([]cfnetworkingaction.Policy{}, cfnetworkingaction.Warnings{"some-warning-1", "some-warning-2"}, actionerror.ApplicationNotFoundError{Name: srcApp})
   180  			})
   181  
   182  			It("displays warnings and returns the error", func() {
   183  				Expect(executeErr).To(MatchError(actionerror.ApplicationNotFoundError{Name: srcApp}))
   184  
   185  				Expect(testUI.Out).To(Say(`Listing network policies in org some-org / space some-space as some-user\.\.\.`))
   186  				Expect(testUI.Err).To(Say("some-warning-1"))
   187  				Expect(testUI.Err).To(Say("some-warning-2"))
   188  			})
   189  		})
   190  	})
   191  })