github.com/cloudfoundry/postgres-release/src/acceptance-tests@v0.0.0-20240511030151-872bdd2e0dba/testing/helpers/bosh_director_test.go (about)

     1  package helpers_test
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"os"
     7  	"strings"
     8  
     9  	"github.com/cloudfoundry/postgres-release/src/acceptance-tests/testing/helpers"
    10  
    11  	boshdir "github.com/cloudfoundry/bosh-cli/director"
    12  	fakedir "github.com/cloudfoundry/bosh-cli/director/directorfakes"
    13  
    14  	. "github.com/onsi/ginkgo/v2"
    15  	. "github.com/onsi/gomega"
    16  )
    17  
    18  var _ = Describe("Deployment", func() {
    19  	var (
    20  		envName      string
    21  		director     helpers.BOSHDirector
    22  		fakeDirector *fakedir.FakeDirector
    23  	)
    24  	BeforeEach(func() {
    25  		envName = helpers.GenerateEnvName("dummy")
    26  		fakeDirector = &fakedir.FakeDirector{}
    27  		releases := make(map[string]string)
    28  		releases["postgres"] = "latest"
    29  		director = helpers.BOSHDirector{
    30  			Director:               fakeDirector,
    31  			DeploymentsInfo:        make(map[string]*helpers.DeploymentData),
    32  			DirectorConfig:         helpers.DefaultBOSHConfig,
    33  			CloudConfig:            helpers.DefaultCloudConfig,
    34  			DefaultReleasesVersion: releases,
    35  		}
    36  	})
    37  
    38  	Describe("Initialize deployment from manifest", func() {
    39  		Context("With non existent manifest", func() {
    40  
    41  			It("Should return an error if not existent manifest", func() {
    42  				var err error
    43  				err = director.SetDeploymentFromManifest("/Not/existent/path", nil, envName)
    44  				Expect(err).To(MatchError(ContainSubstring("no such file or directory")))
    45  			})
    46  		})
    47  		Context("With invalid manifest", func() {
    48  			var (
    49  				manifestFilePath string
    50  			)
    51  
    52  			AfterEach(func() {
    53  				err := os.Remove(manifestFilePath)
    54  				Expect(err).NotTo(HaveOccurred())
    55  			})
    56  
    57  			It("Should return an error if manifest is not a valid yaml", func() {
    58  				var err error
    59  				manifestFilePath, err = helpers.WriteFile("%%%")
    60  				Expect(err).NotTo(HaveOccurred())
    61  				err = director.SetDeploymentFromManifest(manifestFilePath, nil, envName)
    62  				Expect(err).To(MatchError(ContainSubstring("yaml: could not find expected directive name")))
    63  			})
    64  
    65  			It("Should return an error if deployment name not provided in input", func() {
    66  				var err error
    67  				data := `
    68  director_uuid: <%= %x[bosh status --uuid] %>
    69  stemcells:
    70  - alias: linux
    71    name: bosh-warden-boshlite-ubuntu-xenial-go_agent
    72    version: latest
    73  `
    74  				manifestFilePath, err = helpers.WriteFile(data)
    75  				Expect(err).NotTo(HaveOccurred())
    76  				err = director.SetDeploymentFromManifest(manifestFilePath, nil, "")
    77  				Expect(err).To(MatchError(errors.New(helpers.MissingDeploymentNameMsg)))
    78  			})
    79  			It("Properly set the provided deployment name", func() {
    80  				var err error
    81  				data := `
    82  director_uuid: <%= %x[bosh status --uuid] %>
    83  stemcells:
    84  - alias: linux
    85    name: bosh-warden-boshlite-ubuntu-xenial-go_agent
    86    version: latest
    87  `
    88  				manifestFilePath, err = helpers.WriteFile(data)
    89  				Expect(err).NotTo(HaveOccurred())
    90  				err = director.SetDeploymentFromManifest(manifestFilePath, nil, envName)
    91  				Expect(err).NotTo(HaveOccurred())
    92  				name := director.GetEnv(envName).ManifestData["name"]
    93  				Expect(name).To(MatchRegexp("pgats-([\\w-]+)-(.{36})"))
    94  			})
    95  		})
    96  
    97  		Context("With a valid manifest", func() {
    98  			var manifestFilePath string
    99  			var data string
   100  
   101  			BeforeEach(func() {
   102  				var err error
   103  				deploymentFake := &fakedir.FakeDeployment{}
   104  				vmInfoFake := boshdir.VMInfo{
   105  					JobName: "postgres",
   106  					IPs:     []string{"1.1.1.1"},
   107  				}
   108  				deploymentFake.VMInfosReturns([]boshdir.VMInfo{vmInfoFake}, nil)
   109  				fakeDirector.FindDeploymentReturns(deploymentFake, nil)
   110  				data = `director_uuid: xxx
   111  instance_groups:
   112  - azs:
   113    - %s
   114    instances: 1
   115    jobs:
   116    - name: postgres
   117      release: postgres
   118    name: postgres
   119    networks:
   120    - name: %s
   121    persistent_disk_type: %s
   122    stemcell: linux
   123    vm_type: %s
   124  name: %s
   125  properties:
   126    %s: %s
   127    databases:
   128      databases:
   129      - name: pgdb
   130      port: 1111
   131      roles:
   132      - name: pguser
   133        password: pgpsw
   134    ssh_key: %s
   135  releases:
   136  - name: postgres
   137    version: %s
   138  variables: []
   139  `
   140  				input := fmt.Sprintf(data, "xx", "xx", "xx", "xx", "xx", "((key))", "((value))", "((sshkey.public_key))", "xx")
   141  				manifestFilePath, err = helpers.WriteFile(input)
   142  				Expect(err).NotTo(HaveOccurred())
   143  				err = director.SetDeploymentFromManifest(manifestFilePath, nil, envName)
   144  				Expect(err).NotTo(HaveOccurred())
   145  				Expect(director.GetEnv(envName).ContainsVariables()).To(BeFalse())
   146  			})
   147  			AfterEach(func() {
   148  				var err error
   149  				err = os.Remove(manifestFilePath)
   150  				Expect(err).NotTo(HaveOccurred())
   151  			})
   152  
   153  			It("Successfully create and delete a deployment", func() {
   154  				var err error
   155  				err = director.GetEnv(envName).CreateOrUpdateDeployment()
   156  				Expect(err).NotTo(HaveOccurred())
   157  				err = director.GetEnv(envName).DeleteDeployment()
   158  				Expect(err).NotTo(HaveOccurred())
   159  			})
   160  			It("Can interpolate variables", func() {
   161  				vars := map[string]interface{}{
   162  					"key":               "aaa",
   163  					"value":             "bar",
   164  					"sshkey.public_key": "key",
   165  				}
   166  				data = fmt.Sprintf(data, "z1", "default", "10GB", "small", envName, vars["key"], vars["value"], vars["sshkey.public_key"], "latest")
   167  				err := director.GetEnv(envName).EvaluateTemplate(vars, nil, helpers.EvaluateOptions{})
   168  				Expect(err).NotTo(HaveOccurred())
   169  				Expect(string(director.GetEnv(envName).ManifestBytes)).To(Equal(data))
   170  			})
   171  			It("Can generate variables", func() {
   172  				var err error
   173  				vars := map[string]interface{}{
   174  					"key":         "foo",
   175  					"common_name": "aaa",
   176  				}
   177  				variables := `variables:
   178  - name: xxx_password
   179    type: password
   180  - name: sshkey
   181    type: ssh
   182  - name: xxx_ca
   183    options:
   184      common_name: xxx_ca
   185      is_ca: true
   186    type: certificate
   187  - name: xxx_cert
   188    options:
   189      alternative_names:
   190      - %s
   191      ca: xxx_ca
   192      common_name: %s
   193    type: certificate
   194  `
   195  				input := fmt.Sprintf(data, "xx", "xx", "xx", "xx", "xx", "((key))", "((xxx_password))", "((sshkey.public_key))", "xx") + fmt.Sprintf(variables, "((common_name))", "((common_name))")
   196  				err = os.Remove(manifestFilePath)
   197  				Expect(err).NotTo(HaveOccurred())
   198  				manifestFilePath, err = helpers.WriteFile(input)
   199  				Expect(err).NotTo(HaveOccurred())
   200  				err = director.SetDeploymentFromManifest(manifestFilePath, nil, envName)
   201  				Expect(err).NotTo(HaveOccurred())
   202  				Expect(director.GetEnv(envName).ContainsVariables()).To(BeTrue())
   203  				err = director.GetEnv(envName).EvaluateTemplate(vars, nil, helpers.EvaluateOptions{})
   204  				Expect(err).NotTo(HaveOccurred())
   205  				props := director.GetEnv(envName).ManifestData["properties"]
   206  				password := props.(map[interface{}]interface{})["foo"]
   207  
   208  				sshkey := director.GetEnv(envName).GetVariable("sshkey")
   209  				public_key := sshkey.(map[interface{}]interface{})["public_key"]
   210  				actualDataProperties := director.GetEnv(envName).ManifestData["properties"]
   211  				Expect(strings.TrimSpace(public_key.(string))).To(Equal(strings.TrimSpace(actualDataProperties.(map[interface{}]interface{})["ssh_key"].(string))))
   212  				Expect(strings.TrimSpace(password.(string))).To(Equal(strings.TrimSpace(actualDataProperties.(map[interface{}]interface{})["foo"].(string))))
   213  			})
   214  			It("Fails to interpolate variables", func() {
   215  				vars := map[string]interface{}{
   216  					"key": "foo",
   217  				}
   218  				options := helpers.EvaluateOptions{ExpectAllKeys: true}
   219  				err := director.GetEnv(envName).EvaluateTemplate(vars, nil, options)
   220  				Expect(err).NotTo(BeNil())
   221  			})
   222  			It("Fails to interpolate operation directives", func() {
   223  
   224  				var ops []helpers.OpDefinition
   225  				var value interface{}
   226  				value = "aaa"
   227  
   228  				helpers.AddOpDefinition(&ops, "replace", "/properties/fake/((key))", value)
   229  				data = fmt.Sprintf(data, "z1", "default", "10GB", "small", envName, "((key))", value, value, "latest")
   230  				err := director.GetEnv(envName).EvaluateTemplate(nil, ops, helpers.EvaluateOptions{})
   231  				Expect(err).NotTo(BeNil())
   232  			})
   233  			It("Can interpolate operation directives", func() {
   234  				var ops []helpers.OpDefinition
   235  				var value interface{}
   236  				value = "aaa"
   237  				helpers.AddOpDefinition(&ops, "replace", "/properties/((key))", value)
   238  				helpers.AddOpDefinition(&ops, "replace", "/properties/ssh_key", value)
   239  				data = fmt.Sprintf(data, "z1", "default", "10GB", "small", envName, "((key))", value, value, "latest")
   240  				err := director.GetEnv(envName).EvaluateTemplate(nil, ops, helpers.EvaluateOptions{})
   241  				Expect(err).NotTo(HaveOccurred())
   242  				Expect(string(director.GetEnv(envName).ManifestBytes)).To(Equal(data))
   243  			})
   244  		})
   245  	})
   246  
   247  	Describe("Update director", func() {
   248  		Context("Uploading a release", func() {
   249  			It("correctly upload release", func() {
   250  				fakeDirector.UploadReleaseURLReturns(nil)
   251  				err := director.UploadReleaseFromURL("some-org", "some-repo", 1)
   252  				Expect(err).NotTo(HaveOccurred())
   253  			})
   254  			It("Fail to upload release", func() {
   255  				fakeDirector.UploadReleaseURLReturns(errors.New("fake-error"))
   256  				err := director.UploadReleaseFromURL("some-org", "some-repo", 1)
   257  				Expect(err).To(Equal(errors.New("fake-error")))
   258  			})
   259  		})
   260  		Context("Uploading postgres release", func() {
   261  			It("Correctly upload release", func() {
   262  				fakeDirector.UploadReleaseURLReturns(nil)
   263  				err := director.UploadPostgresReleaseFromURL(1)
   264  				Expect(err).NotTo(HaveOccurred())
   265  			})
   266  			It("Fail to upload release", func() {
   267  				fakeDirector.UploadReleaseURLReturns(errors.New("fake-error"))
   268  				err := director.UploadPostgresReleaseFromURL(1)
   269  				Expect(err).To(Equal(errors.New("fake-error")))
   270  			})
   271  		})
   272  	})
   273  	Describe("Access deployed environment", func() {
   274  
   275  		var manifestFilePath string
   276  
   277  		AfterEach(func() {
   278  			err := os.Remove(manifestFilePath)
   279  			Expect(err).NotTo(HaveOccurred())
   280  		})
   281  		Context("Update resurrector for all vms in deployment", func() {
   282  			var deploymentFake *fakedir.FakeDeployment
   283  			BeforeEach(func() {
   284  				var err error
   285  				data := `
   286  director_uuid: <%= %x[bosh status --uuid] %>
   287  name: test
   288  `
   289  				manifestFilePath, err = helpers.WriteFile(data)
   290  				Expect(err).NotTo(HaveOccurred())
   291  				deploymentFake = &fakedir.FakeDeployment{}
   292  				vm1InfoFake := boshdir.VMInfo{
   293  					JobName: "postgres",
   294  					ID:      "xxx-xxx-xxx",
   295  				}
   296  				vm2InfoFake := boshdir.VMInfo{
   297  					JobName: "postgres",
   298  					ID:      "aaa-aaa-aaa-aaa",
   299  				}
   300  				deploymentFake.VMInfosReturns([]boshdir.VMInfo{vm1InfoFake, vm2InfoFake}, nil)
   301  				fakeDirector.FindDeploymentReturns(deploymentFake, nil)
   302  				err = director.SetDeploymentFromManifest(manifestFilePath, nil, envName)
   303  				Expect(err).NotTo(HaveOccurred())
   304  			})
   305  
   306  			It("Fails to restart the VM", func() {
   307  				var err error
   308  				deploymentFake.RestartReturns(errors.New("fake-error"))
   309  				fakeDirector.FindDeploymentReturns(deploymentFake, nil)
   310  				err = director.GetEnv(envName).Restart("postgres")
   311  				Expect(err).To(Equal(errors.New("fake-error")))
   312  			})
   313  
   314  			It("Can restart the VM", func() {
   315  				var err error
   316  				deploymentFake.RestartReturns(nil)
   317  				fakeDirector.FindDeploymentReturns(deploymentFake, nil)
   318  				err = director.GetEnv(envName).Restart("postgres")
   319  				Expect(err).NotTo(HaveOccurred())
   320  			})
   321  
   322  			It("Fails to stop the VM", func() {
   323  				var err error
   324  				deploymentFake.StopReturns(errors.New("fake-error"))
   325  				fakeDirector.FindDeploymentReturns(deploymentFake, nil)
   326  				err = director.GetEnv(envName).Stop("postgres")
   327  				Expect(err).To(Equal(errors.New("fake-error")))
   328  			})
   329  
   330  			It("Can stop the VM", func() {
   331  				var err error
   332  				deploymentFake.StopReturns(nil)
   333  				fakeDirector.FindDeploymentReturns(deploymentFake, nil)
   334  				err = director.GetEnv(envName).Stop("postgres")
   335  				Expect(err).NotTo(HaveOccurred())
   336  			})
   337  			It("Fails to start the VM", func() {
   338  				var err error
   339  				deploymentFake.StartReturns(errors.New("fake-error"))
   340  				fakeDirector.FindDeploymentReturns(deploymentFake, nil)
   341  				err = director.GetEnv(envName).Start("postgres")
   342  				Expect(err).To(Equal(errors.New("fake-error")))
   343  			})
   344  
   345  			It("Can start the VM", func() {
   346  				var err error
   347  				deploymentFake.StartReturns(nil)
   348  				fakeDirector.FindDeploymentReturns(deploymentFake, nil)
   349  				err = director.GetEnv(envName).Start("postgres")
   350  				Expect(err).NotTo(HaveOccurred())
   351  			})
   352  			It("Fail to pause resurrection", func() {
   353  				var err error
   354  				deploymentFake.EnableResurrectionReturns(errors.New("fake-error"))
   355  				err = director.GetEnv(envName).UpdateResurrection(false)
   356  				Expect(err).To(Equal(errors.New("fake-error")))
   357  			})
   358  			It("Correctly pause resurrection", func() {
   359  				var err error
   360  				fakeDirector.EnableResurrectionReturns(nil)
   361  				err = director.GetEnv(envName).UpdateResurrection(false)
   362  				Expect(err).NotTo(HaveOccurred())
   363  			})
   364  			It("Fail to print deployment diffs", func() {
   365  				var err error
   366  				expected := boshdir.DeploymentDiff{
   367  					Diff: [][]interface{}{[]interface{}{"name: simple manifest", nil}},
   368  				}
   369  				deploymentFake.DiffReturns(expected, errors.New("fake-error"))
   370  				err = director.GetEnv(envName).PrintDeploymentDiffs()
   371  				Expect(err).To(Equal(errors.New("fake-error")))
   372  			})
   373  			It("Prints the deployment diffs", func() {
   374  				var err error
   375  				expected := boshdir.DeploymentDiff{
   376  					Diff: [][]interface{}{[]interface{}{"name: simple manifest", nil}},
   377  				}
   378  				deploymentFake.DiffReturns(expected, nil)
   379  				fakeDirector.FindDeploymentReturns(deploymentFake, nil)
   380  				err = director.GetEnv(envName).PrintDeploymentDiffs()
   381  				Expect(err).NotTo(HaveOccurred())
   382  			})
   383  		})
   384  
   385  		Context("Getting VM information", func() {
   386  
   387  			BeforeEach(func() {
   388  				var err error
   389  				data := `
   390  director_uuid: <%= %x[bosh status --uuid] %>
   391  name: test
   392  `
   393  				manifestFilePath, err = helpers.WriteFile(data)
   394  				Expect(err).NotTo(HaveOccurred())
   395  			})
   396  
   397  			It("Correctly checks if a vm is running", func() {
   398  				var err error
   399  				deploymentFake := &fakedir.FakeDeployment{}
   400  				vm1InfoFake := boshdir.VMInfo{
   401  					JobName:      "postgres",
   402  					ID:           "xxx-xxx-xxx",
   403  					ProcessState: "running",
   404  					IPs:          []string{"1.1.1.1"},
   405  					Processes: []boshdir.VMInfoProcess{
   406  						boshdir.VMInfoProcess{
   407  							Name:  "etcd",
   408  							State: "running",
   409  						},
   410  						boshdir.VMInfoProcess{
   411  							Name:  "postgres",
   412  							State: "failed",
   413  						},
   414  					},
   415  				}
   416  				vm2InfoFake := boshdir.VMInfo{
   417  					JobName:      "postgres",
   418  					ID:           "aaa-aaa-aaa-aaa",
   419  					ProcessState: "running",
   420  					IPs:          []string{"2.2.2.2"},
   421  					Processes:    []boshdir.VMInfoProcess{},
   422  				}
   423  				deploymentFake.VMInfosReturns([]boshdir.VMInfo{vm1InfoFake, vm2InfoFake}, nil)
   424  				fakeDirector.FindDeploymentReturns(deploymentFake, nil)
   425  				err = director.SetDeploymentFromManifest(manifestFilePath, nil, envName)
   426  				Expect(err).NotTo(HaveOccurred())
   427  				//isRunning, err := director.GetEnv(envName).IsVmRunning("aaa-aaa-aaa-aaa")
   428  				//Expect(err).NotTo(HaveOccurred())
   429  				//Expect(isRunning).To(BeTrue())
   430  				//isRunning, err = director.GetEnv(envName).IsVmRunning("xxx-xxx-xxx")
   431  				//Expect(err).NotTo(HaveOccurred())
   432  				//Expect(isRunning).To(BeFalse())
   433  				isRunning, err := director.GetEnv(envName).IsVmProcessRunning("xxx-xxx-xxx", "postgres")
   434  				Expect(err).NotTo(HaveOccurred())
   435  				Expect(isRunning).To(BeFalse())
   436  				isRunning, err = director.GetEnv(envName).IsVmProcessRunning("xxx-xxx-xxx", "etcd")
   437  				Expect(err).NotTo(HaveOccurred())
   438  				Expect(isRunning).To(BeTrue())
   439  				isRunning, err = director.GetEnv(envName).IsVmProcessRunning("aaa-aaa-aaa-aaa", "xxx")
   440  				Expect(err).NotTo(HaveOccurred())
   441  				Expect(isRunning).To(BeFalse())
   442  				_, err = director.GetEnv(envName).IsVmProcessRunning("xxx", "postgres")
   443  				Expect(err).To(Equal(errors.New(fmt.Sprintf(helpers.VMNotPresentMsg, "xxx"))))
   444  				_, err = director.GetEnv(envName).IsVmProcessRunning("xxx-xxx-xxx", "xxx")
   445  				Expect(err).To(Equal(errors.New(fmt.Sprintf(helpers.ProcessNotPresentInVmMsg, "xxx", "xxx-xxx-xxx"))))
   446  			})
   447  			It("Should return an error if getting address of a non-existent vm", func() {
   448  				var err error
   449  				deploymentFake := &fakedir.FakeDeployment{}
   450  				deploymentFake.VMInfosReturns([]boshdir.VMInfo{}, nil)
   451  				fakeDirector.FindDeploymentReturns(deploymentFake, nil)
   452  				err = director.SetDeploymentFromManifest(manifestFilePath, nil, envName)
   453  				Expect(err).NotTo(HaveOccurred())
   454  				_, err = director.GetEnv(envName).GetVmAddress("postgres")
   455  				Expect(err).To(Equal(errors.New(fmt.Sprintf(helpers.VMNotPresentMsg, "postgres"))))
   456  				_, err = director.GetEnv(envName).GetVmAddresses("postgres")
   457  				Expect(err).To(Equal(errors.New(fmt.Sprintf(helpers.VMNotPresentMsg, "postgres"))))
   458  				_, err = director.GetEnv(envName).GetVmIdByAddress("1.1.1.1")
   459  				Expect(err).To(Equal(errors.New(fmt.Sprintf(helpers.VMNotPresentMsg, "1.1.1.1"))))
   460  			})
   461  			It("Should return an error if VMInfo fails", func() {
   462  				var err error
   463  				deploymentFake := &fakedir.FakeDeployment{}
   464  				deploymentFake.VMInfosReturns([]boshdir.VMInfo{}, errors.New("fake-error"))
   465  				fakeDirector.FindDeploymentReturns(deploymentFake, nil)
   466  				err = director.SetDeploymentFromManifest(manifestFilePath, nil, envName)
   467  				Expect(err).NotTo(HaveOccurred())
   468  				_, err = director.GetEnv(envName).GetVmAddress("postgres")
   469  				Expect(err).To(Equal(errors.New("fake-error")))
   470  				_, err = director.GetEnv(envName).GetVmAddresses("postgres")
   471  				Expect(err).To(Equal(errors.New("fake-error")))
   472  				_, err = director.GetEnv(envName).GetVmIdByAddress("1.1.1.1")
   473  				Expect(err).To(Equal(errors.New("fake-error")))
   474  			})
   475  			It("Gets the proper vm address and id", func() {
   476  				var err error
   477  				deploymentFake := &fakedir.FakeDeployment{}
   478  				vm1InfoFake := boshdir.VMInfo{
   479  					JobName: "postgres",
   480  					ID:      "xxx-xxx-xxx",
   481  					IPs:     []string{"1.1.1.1"},
   482  				}
   483  				vm2InfoFake := boshdir.VMInfo{
   484  					JobName: "postgres",
   485  					ID:      "aaa-aaa-aaa-aaa",
   486  					IPs:     []string{"2.2.2.2"},
   487  				}
   488  				deploymentFake.VMInfosReturns([]boshdir.VMInfo{vm1InfoFake, vm2InfoFake}, nil)
   489  				fakeDirector.FindDeploymentReturns(deploymentFake, nil)
   490  				err = director.SetDeploymentFromManifest(manifestFilePath, nil, envName)
   491  				Expect(err).NotTo(HaveOccurred())
   492  				address, err := director.GetEnv(envName).GetVmAddress("postgres")
   493  				Expect(err).NotTo(HaveOccurred())
   494  				Expect(address).To(Equal("1.1.1.1"))
   495  				addresses, err := director.GetEnv(envName).GetVmAddresses("postgres")
   496  				Expect(err).NotTo(HaveOccurred())
   497  				Expect(addresses).To(Equal([]string{"1.1.1.1", "2.2.2.2"}))
   498  				uuid, err := director.GetEnv(envName).GetVmIdByAddress(address)
   499  				Expect(err).NotTo(HaveOccurred())
   500  				Expect(uuid).To(Equal(vm1InfoFake.ID))
   501  			})
   502  
   503  		})
   504  	})
   505  	Describe("Manage properties", func() {
   506  
   507  		var (
   508  			data             string
   509  			manifestFilePath string
   510  		)
   511  
   512  		AfterEach(func() {
   513  			err := os.Remove(manifestFilePath)
   514  			Expect(err).NotTo(HaveOccurred())
   515  		})
   516  		JustBeforeEach(func() {
   517  			var err error
   518  			manifestFilePath, err = helpers.WriteFile(data)
   519  			Expect(err).NotTo(HaveOccurred())
   520  			deploymentFake := &fakedir.FakeDeployment{}
   521  			vmInfoFake := boshdir.VMInfo{
   522  				JobName: "postgres",
   523  				IPs:     []string{"1.1.1.1"},
   524  			}
   525  			deploymentFake.VMInfosReturns([]boshdir.VMInfo{vmInfoFake}, nil)
   526  			fakeDirector.FindDeploymentReturns(deploymentFake, nil)
   527  			err = director.SetDeploymentFromManifest(manifestFilePath, nil, envName)
   528  			Expect(err).NotTo(HaveOccurred())
   529  		})
   530  		AssertPropertiesGetSuccessful := func() func() {
   531  			return func() {
   532  				var err error
   533  				props, err := director.GetEnv(envName).GetJobsProperties()
   534  				Expect(err).NotTo(HaveOccurred())
   535  				expectedProps := helpers.Properties{
   536  					Databases: helpers.PgProperties{
   537  						Port: 1111,
   538  						Databases: []helpers.PgDBProperties{
   539  							{Name: "pgdb"},
   540  						},
   541  						MaxConnections:        500,
   542  						LogLinePrefix:         "%m: ",
   543  						CollectStatementStats: false,
   544  						Roles: []helpers.PgRoleProperties{
   545  							{Name: "pguser",
   546  								Password: "pgpsw"},
   547  						},
   548  					},
   549  				}
   550  				Expect(props.GetJobProperties("postgres")).To(Equal([]helpers.Properties{expectedProps}))
   551  			}
   552  		}
   553  		Context("Getting Postgres information from job section", func() {
   554  
   555  			BeforeEach(func() {
   556  				data = `
   557  director_uuid: <%= %x[bosh status --uuid] %>
   558  name: test
   559  instance_groups:
   560  - azs:
   561    - xx
   562    instances: 1
   563    jobs:
   564    - name: postgres
   565      release: postgres
   566      properties:
   567        databases:
   568          port: 1111
   569          databases:
   570          - name: pgdb
   571          roles:
   572          - name: pguser
   573            password: pgpsw
   574    name: postgres
   575    networks:
   576    - name: xx
   577    persistent_disk_type: xx
   578    stemcell: linux
   579    vm_type: xx
   580  `
   581  			})
   582  
   583  			It("Correctly gets the proper postgres props", AssertPropertiesGetSuccessful())
   584  		})
   585  	})
   586  })