manifest, err = manifest.SetConsulJobInstanceCount(3)
				Expect(err).NotTo(HaveOccurred())

				yaml, err := manifest.ToYAML()
				Expect(err).NotTo(HaveOccurred())

				_, err = boshClient.Deploy(yaml)
				Expect(err).NotTo(HaveOccurred())

				Eventually(func() ([]bosh.VM, error) {
					return helpers.DeploymentVMs(boshClient, manifest.Name)
				}, "1m", "10s").Should(ConsistOf(helpers.GetVMsFromManifest(manifest)))
			})

			By("checking if value was persisted", func() {
				actualVal, err := kv.Get(testKey)
				Expect(err).NotTo(HaveOccurred())
				Expect(actualVal).To(Equal(testValue))
			})

			By("setting a persistent value to check if the cluster is up", func() {
				err := kv.Set(testKey, testValue)
				Expect(err).NotTo(HaveOccurred())
			})
		})
	})

	Describe("scaling from 3 nodes to 5", func() {
		BeforeEach(func() {
			guid, err := helpers.NewGUID()
			Expect(err).NotTo(HaveOccurred())
			Expect(err).NotTo(HaveOccurred())
		})
	})

	Context("when a consul node is killed", func() {
		It("is still able to function on healthy vms", func() {
			By("setting and getting a value", func() {
				guid, err := helpers.NewGUID()
				Expect(err).NotTo(HaveOccurred())
				testKey := "consul-key-" + guid
				testValue := "consul-value-" + guid

				err = kv.Set(testKey, testValue)
				Expect(err).NotTo(HaveOccurred())

				value, err := kv.Get(testKey)
				Expect(err).NotTo(HaveOccurred())
				Expect(value).To(Equal(testValue))
			})

			By("killing indices", func() {
				for i := 0; i < 5; i++ {
					err := boshClient.SetVMResurrection(consulManifest.Name, "consul", i, false)
					Expect(err).NotTo(HaveOccurred())
				}

				leader, err := jobIndexOfLeader(kv, boshClient, consulManifest.Name)
				Expect(err).ToNot(HaveOccurred())

				rand.Seed(time.Now().Unix())
				startingIndex := rand.Intn(3)