Expect(err).NotTo(HaveOccurred())

			yaml, err = boshClient.ResolveManifestVersions(yaml)
			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("stopping the spammer", func() {
			spammer.Stop()
		})

		By("reading from the consul kv store", func() {
			err := spammer.Check()
			if config.WindowsClients {
				if err != nil {
					Expect(err).To(HaveLen(1))
					Expect(err).To(HaveKey("unexpected status: 500 Internal Server Error  No known Consul servers"))
				}
			} else {
				Expect(err).NotTo(HaveOccurred())
			}
		})
	})
})
			prefix = fmt.Sprintf("some-prefix-%v", rand.Int())
			kv = newFakeKV()
			kv.AddressCall.Returns.Address = "http://some-address/consul"

			spammer = helpers.NewSpammer(kv, time.Duration(0), prefix)
			spammer.Spam()

			Eventually(func() int {
				return kv.SetCall.CallCount.Value()
			}).Should(BeNumerically(">", 1))

			spammer.Stop()
		})

		It("gets all the sets", func() {
			Expect(spammer.Check()).To(Succeed())
			Expect(kv.GetCall.CallCount).Should(Equal(kv.SetCall.CallCount.Value()))
		})

		It("returns an error when a key doesn't exist", func() {
			kv.GetCall.Returns.Error = fmt.Errorf("could not find key: %s-some-key-0", prefix)

			err := spammer.Check()
			Expect(err).To(MatchError(ContainSubstring(fmt.Sprintf("could not find key: %v-some-key-0", prefix))))
		})

		It("returns an error when a key doesn't match it's value", func() {
			Expect(kv.KeyVals).To(HaveKeyWithValue(fmt.Sprintf("%v-some-key-0", prefix), fmt.Sprintf("%v-some-value-0", prefix)))
			kv.KeyVals[fmt.Sprintf("%v-some-key-0", prefix)] = "banana"

			err := spammer.Check()
			By("scaling from 3 nodes to 5", func() {
				var err error
				manifest, err = manifest.SetConsulJobInstanceCount(5)
				Expect(err).NotTo(HaveOccurred())

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

				spammer.Spam()
				_, 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)))

				spammer.Stop()
			})

			By("reading the value from consul", func() {
				value, err := kv.Get(testKey)
				Expect(err).NotTo(HaveOccurred())
				Expect(value).To(Equal(testValue))

				err = spammer.Check()
				Expect(err).NotTo(HaveOccurred())
			})
		})
	})
})