})

	Context("when parsing the listen address fails", func() {
		BeforeEach(func() {
			startDNS.ListenAddress = "some-bogus-address"
		})

		It("returns a meaningful error", func() {
			err := startDNS.Execute(context)
			Expect(err).To(MatchError(MatchRegexp("resolve udp address:.*some-bogus-address")))
		})
	})

	Context("when creating the dummy link fails", func() {
		BeforeEach(func() {
			linkFactory.CreateDummyReturns(errors.New("pineapple"))
		})

		It("returns a meaningful error", func() {
			err := startDNS.Execute(context)
			Expect(err).To(MatchError("namespace execute: create dummy: pineapple"))
		})
	})

	Context("when adding the address fails", func() {
		BeforeEach(func() {
			addressManager.AddAddressReturns(errors.New("pineapple"))
		})

		It("returns a meaningful error", func() {
			err := startDNS.Execute(context)
			Name: "my-dummy",
		}
	})

	It("uses the factory to create the adapter", func() {
		err := createDummy.Execute(context)
		Expect(err).NotTo(HaveOccurred())

		Expect(linkFactory.CreateDummyCallCount()).To(Equal(1))
		name := linkFactory.CreateDummyArgsForCall(0)
		Expect(name).To(Equal("my-dummy"))
	})

	Context("when creating the dummy link fails", func() {
		BeforeEach(func() {
			linkFactory.CreateDummyReturns(errors.New("no dummy for you, dummy"))
		})

		It("wraps and propagates the error", func() {
			err := createDummy.Execute(context)
			Expect(err).To(MatchError("create dummy: no dummy for you, dummy"))
		})
	})

	Describe("String", func() {
		It("is self describing", func() {
			Expect(createDummy.String()).To(Equal("ip link add my-dummy type dummy"))
		})
	})
})