client = NewClient(&FailingConnectionProvider{})
			})

			It("should fail to connect", func() {
				err := client.Connect()
				Ω(err).Should(Equal(errors.New("nope!")))
			})
		})
	})

	Describe("The container lifecycle", func() {
		BeforeEach(func() {
			provider = NewFakeConnectionProvider(
				warden.Messages(
					&warden.CreateResponse{Handle: proto.String("foo")},
					&warden.StopResponse{},
					&warden.DestroyResponse{},
				),
				writeBuffer,
			)

			client = NewClient(provider)
			err := client.Connect()
			Ω(err).ShouldNot(HaveOccurred())
		})

		It("should be able to create, stop and destroy a container", func() {
			res, err := client.Create()
			Ω(err).ShouldNot(HaveOccurred())
			Ω(res.GetHandle()).Should(Equal("foo"))
	"math"

	"code.google.com/p/gogoprotobuf/proto"
	. "github.com/vito/gordon/test_helpers"
	"github.com/vito/gordon/warden"
)

var _ = Describe("Connection", func() {
	var (
		connection     *Connection
		writeBuffer    *bytes.Buffer
		wardenMessages []proto.Message
	)

	assertWriteBufferContains := func(messages ...proto.Message) {
		Ω(string(writeBuffer.Bytes())).Should(Equal(string(warden.Messages(messages...).Bytes())))
	}

	JustBeforeEach(func() {
		writeBuffer = bytes.NewBuffer([]byte{})

		fakeConn := &FakeConn{
			ReadBuffer:  warden.Messages(wardenMessages...),
			WriteBuffer: writeBuffer,
		}

		connection = New(fakeConn)
	})

	BeforeEach(func() {
		wardenMessages = []proto.Message{}