github.com/cloudfoundry/cli@v7.1.0+incompatible/actor/v2action/space_summary_test.go (about)

     1  package v2action_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	. "code.cloudfoundry.org/cli/actor/v2action"
     7  	"code.cloudfoundry.org/cli/actor/v2action/v2actionfakes"
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant"
    10  	. "github.com/onsi/ginkgo"
    11  	. "github.com/onsi/gomega"
    12  )
    13  
    14  var _ = Describe("Space Summary Actions", func() {
    15  	Describe("GetSpaceSummaryByOrganizationAndName", func() {
    16  		var (
    17  			actor                     *Actor
    18  			fakeCloudControllerClient *v2actionfakes.FakeCloudControllerClient
    19  			spaceSummary              SpaceSummary
    20  			warnings                  Warnings
    21  			err                       error
    22  		)
    23  
    24  		BeforeEach(func() {
    25  			fakeCloudControllerClient = new(v2actionfakes.FakeCloudControllerClient)
    26  			actor = NewActor(fakeCloudControllerClient, nil, nil)
    27  		})
    28  
    29  		When("space staging security groups are requested", func() {
    30  			JustBeforeEach(func() {
    31  				spaceSummary, warnings, err = actor.GetSpaceSummaryByOrganizationAndName("some-org-guid", "some-space")
    32  			})
    33  
    34  			When("no errors are encountered", func() {
    35  				BeforeEach(func() {
    36  					fakeCloudControllerClient.GetOrganizationReturns(
    37  						ccv2.Organization{
    38  							GUID: "some-org-guid",
    39  							Name: "some-org",
    40  						},
    41  						ccv2.Warnings{"warning-1", "warning-2"},
    42  						nil)
    43  
    44  					fakeCloudControllerClient.GetSpacesReturns(
    45  						[]ccv2.Space{
    46  							{
    47  								GUID:                     "some-space-guid",
    48  								Name:                     "some-space",
    49  								SpaceQuotaDefinitionGUID: "some-space-quota-guid",
    50  							},
    51  						},
    52  						ccv2.Warnings{"warning-3", "warning-4"},
    53  						nil)
    54  
    55  					fakeCloudControllerClient.GetApplicationsReturns(
    56  						[]ccv2.Application{
    57  							{
    58  								Name: "some-app-2",
    59  							},
    60  							{
    61  								Name: "some-app-1",
    62  							},
    63  						},
    64  						ccv2.Warnings{"warning-5", "warning-6"},
    65  						nil)
    66  
    67  					fakeCloudControllerClient.GetSpaceServiceInstancesReturns(
    68  						[]ccv2.ServiceInstance{
    69  							{
    70  								GUID: "some-service-instance-guid-2",
    71  								Name: "some-service-instance-2",
    72  							},
    73  							{
    74  								GUID: "some-service-instance-guid-1",
    75  								Name: "some-service-instance-1",
    76  							},
    77  						},
    78  						ccv2.Warnings{"warning-7", "warning-8"},
    79  						nil)
    80  
    81  					fakeCloudControllerClient.GetSpaceQuotaDefinitionReturns(
    82  						ccv2.SpaceQuota{
    83  							GUID: "some-space-quota-guid",
    84  							Name: "some-space-quota",
    85  						},
    86  						ccv2.Warnings{"warning-9", "warning-10"},
    87  						nil)
    88  
    89  					fakeCloudControllerClient.GetSpaceSecurityGroupsReturns(
    90  						[]ccv2.SecurityGroup{
    91  							{
    92  								Name: "some-shared-security-group",
    93  								Rules: []ccv2.SecurityGroupRule{
    94  									{
    95  										Description: "Some shared walking group",
    96  										Destination: "0.0.0.0-5.6.7.8",
    97  										Ports:       "80,443",
    98  										Protocol:    "tcp",
    99  									},
   100  									{
   101  										Description: "Some shared walking group too",
   102  										Destination: "127.10.10.10-127.10.10.255",
   103  										Ports:       "80,4443",
   104  										Protocol:    "udp",
   105  									},
   106  								},
   107  							},
   108  							{
   109  								Name: "some-running-security-group",
   110  								Rules: []ccv2.SecurityGroupRule{
   111  									{
   112  										Description: "Some running walking group",
   113  										Destination: "127.0.0.1-127.0.0.255",
   114  										Ports:       "8080,443",
   115  										Protocol:    "tcp",
   116  									},
   117  									{
   118  										Description: "Some running walking group too",
   119  										Destination: "127.20.20.20-127.20.20.25",
   120  										Ports:       "80,4443",
   121  										Protocol:    "udp",
   122  									},
   123  								},
   124  							},
   125  						},
   126  						ccv2.Warnings{"warning-11", "warning-12"},
   127  						nil)
   128  
   129  					fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns(
   130  						[]ccv2.SecurityGroup{
   131  							{
   132  								Name: "some-staging-security-group",
   133  								Rules: []ccv2.SecurityGroupRule{
   134  									{
   135  										Description: "Some staging cinematic group",
   136  										Destination: "127.5.5.1-127.6.6.255",
   137  										Ports:       "32767,443",
   138  										Protocol:    "tcp",
   139  									},
   140  									{
   141  										Description: "Some staging cinematic group too",
   142  										Destination: "127.25.20.20-127.25.20.25",
   143  										Ports:       "80,9999",
   144  										Protocol:    "udp",
   145  									},
   146  								},
   147  							},
   148  							{
   149  								Name: "some-shared-security-group",
   150  								Rules: []ccv2.SecurityGroupRule{
   151  									{
   152  										Description: "Some shared cinematic group",
   153  										Destination: "0.0.0.0-5.6.7.8",
   154  										Ports:       "80,443",
   155  										Protocol:    "tcp",
   156  									},
   157  									{
   158  										Description: "Some shared cinematic group too",
   159  										Destination: "127.10.10.10-127.10.10.255",
   160  										Ports:       "80,4443",
   161  										Protocol:    "udp",
   162  									},
   163  								},
   164  							},
   165  						},
   166  						ccv2.Warnings{"warning-13", "warning-14"},
   167  						nil)
   168  				})
   169  
   170  				It("returns the space summary and all warnings", func() {
   171  					Expect(err).NotTo(HaveOccurred())
   172  
   173  					Expect(warnings).To(ConsistOf([]string{
   174  						"warning-1",
   175  						"warning-2",
   176  						"warning-3",
   177  						"warning-4",
   178  						"warning-5",
   179  						"warning-6",
   180  						"warning-7",
   181  						"warning-8",
   182  						"warning-9",
   183  						"warning-10",
   184  						"warning-11",
   185  						"warning-12",
   186  						"warning-13",
   187  						"warning-14",
   188  					}))
   189  
   190  					Expect(spaceSummary).To(Equal(SpaceSummary{
   191  						Space: Space{
   192  							Name:                     "some-space",
   193  							GUID:                     "some-space-guid",
   194  							SpaceQuotaDefinitionGUID: "some-space-quota-guid",
   195  						},
   196  						OrgName:                   "some-org",
   197  						AppNames:                  []string{"some-app-1", "some-app-2"},
   198  						ServiceInstanceNames:      []string{"some-service-instance-1", "some-service-instance-2"},
   199  						SpaceQuotaName:            "some-space-quota",
   200  						RunningSecurityGroupNames: []string{"some-running-security-group", "some-shared-security-group"},
   201  						StagingSecurityGroupNames: []string{"some-shared-security-group", "some-staging-security-group"},
   202  						SecurityGroupRules: []SecurityGroupRule{
   203  							{
   204  								Name:        "some-running-security-group",
   205  								Description: "Some running walking group",
   206  								Destination: "127.0.0.1-127.0.0.255",
   207  								Lifecycle:   "running",
   208  								Ports:       "8080,443",
   209  								Protocol:    "tcp",
   210  							},
   211  							{
   212  								Name:        "some-running-security-group",
   213  								Description: "Some running walking group too",
   214  								Destination: "127.20.20.20-127.20.20.25",
   215  								Lifecycle:   "running",
   216  								Ports:       "80,4443",
   217  								Protocol:    "udp",
   218  							},
   219  							{
   220  								Name:        "some-shared-security-group",
   221  								Description: "Some shared walking group",
   222  								Destination: "0.0.0.0-5.6.7.8",
   223  								Lifecycle:   "running",
   224  								Ports:       "80,443",
   225  								Protocol:    "tcp",
   226  							},
   227  							{
   228  								Name:        "some-shared-security-group",
   229  								Description: "Some shared cinematic group",
   230  								Destination: "0.0.0.0-5.6.7.8",
   231  								Lifecycle:   "staging",
   232  								Ports:       "80,443",
   233  								Protocol:    "tcp",
   234  							},
   235  							{
   236  								Name:        "some-shared-security-group",
   237  								Description: "Some shared walking group too",
   238  								Destination: "127.10.10.10-127.10.10.255",
   239  								Lifecycle:   "running",
   240  								Ports:       "80,4443",
   241  								Protocol:    "udp",
   242  							},
   243  							{
   244  								Name:        "some-shared-security-group",
   245  								Description: "Some shared cinematic group too",
   246  								Destination: "127.10.10.10-127.10.10.255",
   247  								Lifecycle:   "staging",
   248  								Ports:       "80,4443",
   249  								Protocol:    "udp",
   250  							},
   251  							{
   252  								Name:        "some-staging-security-group",
   253  								Description: "Some staging cinematic group too",
   254  								Destination: "127.25.20.20-127.25.20.25",
   255  								Lifecycle:   "staging",
   256  								Ports:       "80,9999",
   257  								Protocol:    "udp",
   258  							},
   259  							{
   260  								Name:        "some-staging-security-group",
   261  								Description: "Some staging cinematic group",
   262  								Destination: "127.5.5.1-127.6.6.255",
   263  								Lifecycle:   "staging",
   264  								Ports:       "32767,443",
   265  								Protocol:    "tcp",
   266  							},
   267  						},
   268  					}))
   269  
   270  					Expect(fakeCloudControllerClient.GetOrganizationCallCount()).To(Equal(1))
   271  					Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(0)).To(Equal("some-org-guid"))
   272  
   273  					Expect(fakeCloudControllerClient.GetSpacesCallCount()).To(Equal(1))
   274  					filters := fakeCloudControllerClient.GetSpacesArgsForCall(0)
   275  					Expect(filters).To(ConsistOf(
   276  						ccv2.Filter{
   277  							Type:     constant.NameFilter,
   278  							Operator: constant.EqualOperator,
   279  							Values:   []string{"some-space"},
   280  						},
   281  						ccv2.Filter{
   282  							Type:     constant.OrganizationGUIDFilter,
   283  							Operator: constant.EqualOperator,
   284  							Values:   []string{"some-org-guid"},
   285  						},
   286  					))
   287  
   288  					Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1))
   289  					filters = fakeCloudControllerClient.GetApplicationsArgsForCall(0)
   290  					Expect(filters).To(ConsistOf(
   291  						ccv2.Filter{
   292  							Type:     constant.SpaceGUIDFilter,
   293  							Operator: constant.EqualOperator,
   294  							Values:   []string{"some-space-guid"},
   295  						},
   296  					))
   297  
   298  					Expect(fakeCloudControllerClient.GetSpaceServiceInstancesCallCount()).To(Equal(1))
   299  					spaceGUID, includeUserProvidedServices, filters := fakeCloudControllerClient.GetSpaceServiceInstancesArgsForCall(0)
   300  					Expect(spaceGUID).To(Equal("some-space-guid"))
   301  					Expect(includeUserProvidedServices).To(BeTrue())
   302  					Expect(filters).To(BeNil())
   303  
   304  					Expect(fakeCloudControllerClient.GetSpaceQuotaDefinitionCallCount()).To(Equal(1))
   305  					spaceQuotaGUID := fakeCloudControllerClient.GetSpaceQuotaDefinitionArgsForCall(0)
   306  					Expect(spaceQuotaGUID).To(Equal("some-space-quota-guid"))
   307  
   308  					Expect(fakeCloudControllerClient.GetSpaceSecurityGroupsCallCount()).To(Equal(1))
   309  					spaceGUIDRunning, queriesRunning := fakeCloudControllerClient.GetSpaceSecurityGroupsArgsForCall(0)
   310  					Expect(spaceGUIDRunning).To(Equal("some-space-guid"))
   311  					Expect(queriesRunning).To(BeNil())
   312  
   313  					Expect(fakeCloudControllerClient.GetSpaceStagingSecurityGroupsCallCount()).To(Equal(1))
   314  					spaceGUIDStaging, queriesStaging := fakeCloudControllerClient.GetSpaceStagingSecurityGroupsArgsForCall(0)
   315  					Expect(spaceGUIDStaging).To(Equal("some-space-guid"))
   316  					Expect(queriesStaging).To(BeNil())
   317  				})
   318  
   319  				When("no space quota is assigned", func() {
   320  					BeforeEach(func() {
   321  						fakeCloudControllerClient.GetSpacesReturns(
   322  							[]ccv2.Space{
   323  								{
   324  									GUID: "some-space-guid",
   325  									Name: "some-space",
   326  								},
   327  							},
   328  							ccv2.Warnings{"warning-3", "warning-4"},
   329  							nil)
   330  					})
   331  
   332  					It("does not request space quota information or return a space quota name", func() {
   333  						Expect(fakeCloudControllerClient.GetSpaceQuotaDefinitionCallCount()).To(Equal(0))
   334  						Expect(spaceSummary.SpaceQuotaName).To(Equal(""))
   335  					})
   336  				})
   337  			})
   338  
   339  			When("an error is encountered getting the organization", func() {
   340  				var expectedErr error
   341  
   342  				BeforeEach(func() {
   343  					expectedErr = errors.New("get-org-error")
   344  					fakeCloudControllerClient.GetOrganizationReturns(
   345  						ccv2.Organization{},
   346  						ccv2.Warnings{
   347  							"warning-1",
   348  							"warning-2",
   349  						},
   350  						expectedErr)
   351  				})
   352  
   353  				It("returns the error and all warnings", func() {
   354  					Expect(err).To(MatchError(expectedErr))
   355  					Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
   356  				})
   357  			})
   358  
   359  			When("an error is encountered getting the space", func() {
   360  				var expectedErr error
   361  
   362  				BeforeEach(func() {
   363  					expectedErr = errors.New("get-space-error")
   364  
   365  					fakeCloudControllerClient.GetOrganizationReturns(
   366  						ccv2.Organization{
   367  							GUID: "some-org-guid",
   368  							Name: "some-org",
   369  						},
   370  						nil,
   371  						nil)
   372  
   373  					fakeCloudControllerClient.GetSpacesReturns(
   374  						[]ccv2.Space{},
   375  						ccv2.Warnings{"warning-1", "warning-2"},
   376  						expectedErr)
   377  				})
   378  
   379  				It("returns the error and all warnings", func() {
   380  					Expect(err).To(MatchError(expectedErr))
   381  					Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
   382  				})
   383  			})
   384  
   385  			When("an error is encountered getting the application", func() {
   386  				var expectedErr error
   387  
   388  				BeforeEach(func() {
   389  					expectedErr = errors.New("get-applications-error")
   390  
   391  					fakeCloudControllerClient.GetOrganizationReturns(
   392  						ccv2.Organization{
   393  							GUID: "some-org-guid",
   394  							Name: "some-org",
   395  						},
   396  						nil,
   397  						nil)
   398  
   399  					fakeCloudControllerClient.GetSpacesReturns(
   400  						[]ccv2.Space{
   401  							{
   402  								GUID:                     "some-space-guid",
   403  								Name:                     "some-space",
   404  								SpaceQuotaDefinitionGUID: "some-space-quota-guid",
   405  							},
   406  						},
   407  						nil,
   408  						nil)
   409  
   410  					fakeCloudControllerClient.GetApplicationsReturns(
   411  						[]ccv2.Application{},
   412  						ccv2.Warnings{"warning-1", "warning-2"},
   413  						expectedErr)
   414  				})
   415  
   416  				It("returns the error and all warnings", func() {
   417  					Expect(err).To(MatchError(expectedErr))
   418  					Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
   419  				})
   420  			})
   421  
   422  			When("an error is encountered getting the service instances", func() {
   423  				var expectedErr error
   424  
   425  				BeforeEach(func() {
   426  					expectedErr = errors.New("get-service-instances-error")
   427  
   428  					fakeCloudControllerClient.GetOrganizationReturns(
   429  						ccv2.Organization{
   430  							GUID: "some-org-guid",
   431  							Name: "some-org",
   432  						},
   433  						nil,
   434  						nil)
   435  
   436  					fakeCloudControllerClient.GetSpacesReturns(
   437  						[]ccv2.Space{
   438  							{
   439  								GUID:                     "some-space-guid",
   440  								Name:                     "some-space",
   441  								SpaceQuotaDefinitionGUID: "some-space-quota-guid",
   442  							},
   443  						},
   444  						nil,
   445  						nil)
   446  
   447  					fakeCloudControllerClient.GetApplicationsReturns(
   448  						[]ccv2.Application{
   449  							{
   450  								Name: "some-app-2",
   451  							},
   452  							{
   453  								Name: "some-app-1",
   454  							},
   455  						},
   456  						nil,
   457  						nil)
   458  
   459  					fakeCloudControllerClient.GetSpaceServiceInstancesReturns(
   460  						[]ccv2.ServiceInstance{},
   461  						ccv2.Warnings{"warning-1", "warning-2"},
   462  						expectedErr)
   463  				})
   464  
   465  				It("returns the error and all warnings", func() {
   466  					Expect(err).To(MatchError(expectedErr))
   467  					Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
   468  				})
   469  			})
   470  
   471  			When("an error is encountered getting the space quota", func() {
   472  				var expectedErr error
   473  
   474  				BeforeEach(func() {
   475  					expectedErr = errors.New("get-space-quota-error")
   476  
   477  					fakeCloudControllerClient.GetOrganizationReturns(
   478  						ccv2.Organization{
   479  							GUID: "some-org-guid",
   480  							Name: "some-org",
   481  						},
   482  						nil,
   483  						nil)
   484  
   485  					fakeCloudControllerClient.GetSpacesReturns(
   486  						[]ccv2.Space{
   487  							{
   488  								GUID:                     "some-space-guid",
   489  								Name:                     "some-space",
   490  								SpaceQuotaDefinitionGUID: "some-space-quota-guid",
   491  							},
   492  						},
   493  						nil,
   494  						nil)
   495  
   496  					fakeCloudControllerClient.GetApplicationsReturns(
   497  						[]ccv2.Application{
   498  							{
   499  								Name: "some-app-2",
   500  							},
   501  							{
   502  								Name: "some-app-1",
   503  							},
   504  						},
   505  						nil,
   506  						nil)
   507  
   508  					fakeCloudControllerClient.GetSpaceServiceInstancesReturns(
   509  						[]ccv2.ServiceInstance{
   510  							{
   511  								GUID: "some-service-instance-guid-2",
   512  								Name: "some-service-instance-2",
   513  							},
   514  							{
   515  								GUID: "some-service-instance-guid-1",
   516  								Name: "some-service-instance-1",
   517  							},
   518  						},
   519  						nil,
   520  						nil)
   521  
   522  					fakeCloudControllerClient.GetSpaceQuotaDefinitionReturns(
   523  						ccv2.SpaceQuota{},
   524  						ccv2.Warnings{"warning-1", "warning-2"},
   525  						expectedErr)
   526  				})
   527  
   528  				It("returns the error and all warnings", func() {
   529  					Expect(err).To(MatchError(expectedErr))
   530  					Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
   531  				})
   532  			})
   533  
   534  			When("an error is encountered getting the running security groups", func() {
   535  				var expectedErr error
   536  
   537  				BeforeEach(func() {
   538  					expectedErr = errors.New("get-running-security-groups-error")
   539  
   540  					fakeCloudControllerClient.GetOrganizationReturns(
   541  						ccv2.Organization{
   542  							GUID: "some-org-guid",
   543  							Name: "some-org",
   544  						},
   545  						nil,
   546  						nil)
   547  
   548  					fakeCloudControllerClient.GetSpacesReturns(
   549  						[]ccv2.Space{
   550  							{
   551  								GUID:                     "some-space-guid",
   552  								Name:                     "some-space",
   553  								SpaceQuotaDefinitionGUID: "some-space-quota-guid",
   554  							},
   555  						},
   556  						nil,
   557  						nil)
   558  
   559  					fakeCloudControllerClient.GetApplicationsReturns(
   560  						[]ccv2.Application{
   561  							{
   562  								Name: "some-app-2",
   563  							},
   564  							{
   565  								Name: "some-app-1",
   566  							},
   567  						},
   568  						nil,
   569  						nil)
   570  
   571  					fakeCloudControllerClient.GetSpaceServiceInstancesReturns(
   572  						[]ccv2.ServiceInstance{
   573  							{
   574  								GUID: "some-service-instance-guid-2",
   575  								Name: "some-service-instance-2",
   576  							},
   577  							{
   578  								GUID: "some-service-instance-guid-1",
   579  								Name: "some-service-instance-1",
   580  							},
   581  						},
   582  						nil,
   583  						nil)
   584  
   585  					fakeCloudControllerClient.GetSpaceQuotaDefinitionReturns(
   586  						ccv2.SpaceQuota{
   587  							GUID: "some-space-quota-guid",
   588  							Name: "some-space-quota",
   589  						},
   590  						nil,
   591  						nil)
   592  
   593  					fakeCloudControllerClient.GetSpaceSecurityGroupsReturns(
   594  						[]ccv2.SecurityGroup{},
   595  						ccv2.Warnings{"warning-1", "warning-2"},
   596  						expectedErr)
   597  				})
   598  
   599  				It("returns the error and all warnings", func() {
   600  					Expect(err).To(MatchError(expectedErr))
   601  					Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
   602  				})
   603  			})
   604  
   605  			When("an error is encountered getting the staging security groups", func() {
   606  				var expectedErr error
   607  
   608  				BeforeEach(func() {
   609  					expectedErr = errors.New("get-staging-security-groups-error")
   610  
   611  					fakeCloudControllerClient.GetOrganizationReturns(
   612  						ccv2.Organization{
   613  							GUID: "some-org-guid",
   614  							Name: "some-org",
   615  						},
   616  						nil,
   617  						nil)
   618  
   619  					fakeCloudControllerClient.GetSpacesReturns(
   620  						[]ccv2.Space{
   621  							{
   622  								GUID:                     "some-space-guid",
   623  								Name:                     "some-space",
   624  								SpaceQuotaDefinitionGUID: "some-space-quota-guid",
   625  							},
   626  						},
   627  						nil,
   628  						nil)
   629  
   630  					fakeCloudControllerClient.GetApplicationsReturns(
   631  						[]ccv2.Application{
   632  							{
   633  								Name: "some-app-2",
   634  							},
   635  							{
   636  								Name: "some-app-1",
   637  							},
   638  						},
   639  						nil,
   640  						nil)
   641  
   642  					fakeCloudControllerClient.GetSpaceServiceInstancesReturns(
   643  						[]ccv2.ServiceInstance{
   644  							{
   645  								GUID: "some-service-instance-guid-2",
   646  								Name: "some-service-instance-2",
   647  							},
   648  							{
   649  								GUID: "some-service-instance-guid-1",
   650  								Name: "some-service-instance-1",
   651  							},
   652  						},
   653  						nil,
   654  						nil)
   655  
   656  					fakeCloudControllerClient.GetSpaceQuotaDefinitionReturns(
   657  						ccv2.SpaceQuota{
   658  							GUID: "some-space-quota-guid",
   659  							Name: "some-space-quota",
   660  						},
   661  						nil,
   662  						nil)
   663  
   664  					fakeCloudControllerClient.GetSpaceSecurityGroupsReturns(
   665  						[]ccv2.SecurityGroup{},
   666  						nil,
   667  						nil)
   668  
   669  					fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns(
   670  						[]ccv2.SecurityGroup{},
   671  						ccv2.Warnings{"warning-1", "warning-2"},
   672  						expectedErr)
   673  				})
   674  
   675  				It("returns the error and all warnings", func() {
   676  					Expect(err).To(MatchError(expectedErr))
   677  					Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
   678  				})
   679  			})
   680  		})
   681  	})
   682  })