It("returns the error", func() {
				_, _, err := container.NetIn(123, 456)
				Expect(err).To(Equal(disaster))
			})
		})
	})

	Describe("Net out", func() {
		It("delegates to the filter", func() {
			rule := garden.NetOutRule{}
			err := container.NetOut(rule)
			Expect(err).ToNot(HaveOccurred())

			Expect(fakeFilter.NetOutCallCount()).To(Equal(1))
			passedRule := fakeFilter.NetOutArgsForCall(0)
			Expect(passedRule).To(Equal(rule))
		})

		Context("when the filter fails", func() {
			disaster := errors.New("oh no!")

			BeforeEach(func() {
				fakeFilter.NetOutReturns(disaster)
			})

			It("returns the error", func() {
				err := container.NetOut(garden.NetOutRule{})
				Expect(err).To(Equal(disaster))
			})
		})
			err := container.Restore(linux_backend.LinuxContainerSpec{
				ContainerSpec: garden.ContainerSpec{Env: []string{"env1=env1value", "env2=env2Value"}},
				Resources:     containerResources,
			})
			Expect(err).ToNot(HaveOccurred())
			Expect(container.Env).To(Equal([]string{"env1=env1value", "env2=env2Value"}))
		})

		It("redoes net-outs", func() {
			Expect(container.Restore(linux_backend.LinuxContainerSpec{
				NetOuts:   []garden.NetOutRule{netOutRule1, netOutRule2},
				Resources: containerResources,
			})).To(Succeed())

			Expect(fakeFilter.NetOutCallCount()).To(Equal(2))
			Expect(fakeFilter.NetOutArgsForCall(0)).To(Equal(netOutRule1))
			Expect(fakeFilter.NetOutArgsForCall(1)).To(Equal(netOutRule2))
		})

		Context("when applying a netout rule fails", func() {
			It("returns an error", func() {
				fakeFilter.NetOutReturns(errors.New("didn't work"))

				Expect(container.Restore(
					linux_backend.LinuxContainerSpec{
						NetOuts:   []garden.NetOutRule{{}},
						Resources: containerResources,
					})).To(MatchError("didn't work"))
			})
		})